From 8007778c3941065e18a9696d4d8bf6277ba92eeb Mon Sep 17 00:00:00 2001 From: skippyall <> Date: Tue, 21 Jan 2025 19:21:18 +0100 Subject: [PATCH] Interact and Attack --- gradle.properties | 2 +- .../io/github/skippyall/minions/Minions.java | 29 ++++++--- .../minions/client/MinionsClient.java | 16 ----- .../minions/command/CommandExecutor.java | 2 +- .../minions/command/SimpleCommand.java | 2 +- .../fakeplayer/ServerPlayerInterface.java | 8 --- .../skippyall/minions/gui/CommandsGui.java | 2 +- .../skippyall/minions/gui/MinionGui.java | 17 ++++-- .../minions/gui/ModuleInventory.java | 2 +- .../skippyall/minions/input/TextInput.java | 5 +- .../skippyall/minions/minion/MinionData.java | 2 +- .../skippyall/minions/minion/MinionItem.java | 20 +++++- .../minions/minion/MinionPersistentState.java | 4 +- .../fakeplayer/ClientConnectionInterface.java | 3 +- .../fakeplayer/EntityPlayerActionPack.java | 3 +- .../fakeplayer/FakeClientConnection.java | 4 +- .../fakeplayer/MinionFakePlayer.java | 61 ++++++++----------- .../fakeplayer/NetHandlerPlayServerFake.java | 3 +- .../fakeplayer/ServerPlayerInterface.java | 7 +++ .../{ => minion}/fakeplayer/Tracer.java | 3 +- .../minions/mixins/ConnectionMixin.java | 3 +- .../minions/mixins/MinecraftServerMixin.java | 2 +- .../minions/mixins/MobEntityMixin.java | 2 +- .../PlayerListEntryS2CPacket$EntryMixin.java | 2 +- .../minions/mixins/PlayerListMixin.java | 5 +- .../mixins/ServerPlayNetworkHandlerMixin.java | 2 +- .../minions/mixins/ServerPlayerMixin.java | 4 +- .../minions/mixins/SleepManagerMixin.java | 2 +- .../minions/mixins/SpawnHelperMixin.java | 2 +- .../minions/module/ActionModules.java | 7 ++- .../minions/module/AttackModule.java | 33 ++++++++++ .../minions/module/InteractModule.java | 25 +++++--- .../minions/module/MobSpawningModule.java | 2 +- .../skippyall/minions/module/Modules.java | 2 + .../minions/module/SimpleModuleItem.java | 15 +---- .../networking/ClientToServerNetworking.java | 40 ------------ .../minions/networking/VersionChecker.java | 21 ------- .../minions/program/block/GoBlock.java | 6 +- .../minions/program/block/UseBlock.java | 4 +- .../program/runtime/MinionRuntime.java | 6 +- .../minions/server/MinionsServer.java | 23 ------- .../resources/data/minions/lang/en_us.json | 18 +++++- .../minions/recipe/advanced_upgrade_base.json | 17 ++++++ .../data/minions/recipe/attack_module.json | 9 +++ ...c_upgrade.json => basic_upgrade_base.json} | 2 +- .../data/minions/recipe/interact_module.json | 9 +++ .../resources/data/minions/recipe/minion.json | 4 +- .../minions/recipe/mob_spawning_module.json | 9 +++ .../{mount_upgrade.json => mount_module.json} | 0 .../{move_upgrade.json => move_module.json} | 0 .../tags/damage_type/minion_item_resists.json | 6 ++ src/main/resources/fabric.mod.json | 6 -- 52 files changed, 249 insertions(+), 234 deletions(-) delete mode 100644 src/main/java/io/github/skippyall/minions/client/MinionsClient.java delete mode 100644 src/main/java/io/github/skippyall/minions/fakeplayer/ServerPlayerInterface.java rename src/main/java/io/github/skippyall/minions/{ => minion}/fakeplayer/ClientConnectionInterface.java (52%) rename src/main/java/io/github/skippyall/minions/{ => minion}/fakeplayer/EntityPlayerActionPack.java (99%) rename src/main/java/io/github/skippyall/minions/{ => minion}/fakeplayer/FakeClientConnection.java (90%) rename src/main/java/io/github/skippyall/minions/{ => minion}/fakeplayer/MinionFakePlayer.java (83%) rename src/main/java/io/github/skippyall/minions/{ => minion}/fakeplayer/NetHandlerPlayServerFake.java (93%) create mode 100644 src/main/java/io/github/skippyall/minions/minion/fakeplayer/ServerPlayerInterface.java rename src/main/java/io/github/skippyall/minions/{ => minion}/fakeplayer/Tracer.java (97%) create mode 100644 src/main/java/io/github/skippyall/minions/module/AttackModule.java delete mode 100644 src/main/java/io/github/skippyall/minions/networking/ClientToServerNetworking.java delete mode 100644 src/main/java/io/github/skippyall/minions/networking/VersionChecker.java delete mode 100644 src/main/java/io/github/skippyall/minions/server/MinionsServer.java create mode 100644 src/main/resources/data/minions/recipe/advanced_upgrade_base.json create mode 100644 src/main/resources/data/minions/recipe/attack_module.json rename src/main/resources/data/minions/recipe/{basic_upgrade.json => basic_upgrade_base.json} (87%) create mode 100644 src/main/resources/data/minions/recipe/interact_module.json create mode 100644 src/main/resources/data/minions/recipe/mob_spawning_module.json rename src/main/resources/data/minions/recipe/{mount_upgrade.json => mount_module.json} (100%) rename src/main/resources/data/minions/recipe/{move_upgrade.json => move_module.json} (100%) create mode 100644 src/main/resources/data/minions/tags/damage_type/minion_item_resists.json diff --git a/gradle.properties b/gradle.properties index 48b088b..8fa819a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ org.gradle.jvmargs=-Xmx1G yarn_mappings=1.21.3+build.2 # Mod Properties - mod_version = 0.1.1-SNAPSHOT + mod_version = 0.1.2-SNAPSHOT maven_group = io.github.skippyall archives_base_name = Minions diff --git a/src/main/java/io/github/skippyall/minions/Minions.java b/src/main/java/io/github/skippyall/minions/Minions.java index f0818b2..203a692 100644 --- a/src/main/java/io/github/skippyall/minions/Minions.java +++ b/src/main/java/io/github/skippyall/minions/Minions.java @@ -2,7 +2,7 @@ package io.github.skippyall.minions; import eu.pb4.polymer.core.api.entity.PolymerEntityUtils; import eu.pb4.polymer.core.api.item.SimplePolymerItem; -import io.github.skippyall.minions.fakeplayer.MinionFakePlayer; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.minion.MinionData; import io.github.skippyall.minions.minion.MinionItem; import io.github.skippyall.minions.minion.MinionPersistentState; @@ -10,28 +10,31 @@ import io.github.skippyall.minions.module.Modules; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; +import net.minecraft.component.DataComponentTypes; +import net.minecraft.component.type.DamageResistantComponent; +import net.minecraft.entity.boss.WitherEntity; +import net.minecraft.entity.damage.DamageType; import net.minecraft.item.Item; import net.minecraft.item.Items; -import net.minecraft.registry.BuiltinRegistries; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; import net.minecraft.registry.RegistryKey; import net.minecraft.registry.RegistryKeys; -import net.minecraft.server.MinecraftServer; +import net.minecraft.registry.tag.TagKey; import net.minecraft.util.Identifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; +import java.util.function.Function; public class Minions implements ModInitializer { public static final String MOD_ID = "minions"; - - private static final Identifier MINION_ITEM_ID = Identifier.of(MOD_ID, "minion"); - public static final MinionItem MINION_ITEM = Registry.register(Registries.ITEM, Identifier.of(MOD_ID, "minion"), new MinionItem(new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, MINION_ITEM_ID)),false)); - private static final Identifier BASIC_UPGRADE_BASE_ID = Identifier.of(MOD_ID, "basic_upgrade_base"); - public static final SimplePolymerItem BASIC_UPGRADE_BASE = Registry.register(Registries.ITEM, BASIC_UPGRADE_BASE_ID, new SimplePolymerItem(new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, BASIC_UPGRADE_BASE_ID)), Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE)); + public static final TagKey MINION_ITEM_RESISTS = TagKey.of(RegistryKeys.DAMAGE_TYPE, Identifier.of(MOD_ID, "minion_item_resists")); + public static final MinionItem MINION_ITEM = registerItem(Identifier.of(MOD_ID, "minion"), settings -> new MinionItem(settings.component(DataComponentTypes.DAMAGE_RESISTANT, new DamageResistantComponent(MINION_ITEM_RESISTS)),false)); + public static final SimplePolymerItem BASIC_UPGRADE_BASE = registerItem(Identifier.of(MOD_ID, "basic_upgrade_base"), settings -> new SimplePolymerItem(settings, Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE)); + public static final SimplePolymerItem ADVANCED_UPGRADE_BASE = registerItem(Identifier.of(MOD_ID, "advanced_upgrade_base"), settings -> new SimplePolymerItem(settings, Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE)); public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); @@ -40,12 +43,10 @@ public class Minions implements ModInitializer { @Override public void onInitialize() { MinionData.register(); - LOGGER.debug("Add Customthing"); PolymerEntityUtils.registerType(); ServerLifecycleEvents.SERVER_STARTED.register(server -> { MinionPersistentState.create(server); MinionPersistentState.INSTANCE.getMinionData().forEach(data -> { - System.out.println("spawn Minion " + data.name()); MinionFakePlayer.spawnMinionAt(data, server.getOverworld(), null, null); }); }); @@ -61,6 +62,14 @@ public class Minions implements ModInitializer { Modules.register(); } + private static T registerItem(Identifier identifier, Function constructor, Item.Settings settings) { + return Registry.register(Registries.ITEM, identifier, constructor.apply(settings.registryKey(RegistryKey.of(RegistryKeys.ITEM, identifier)))); + } + + private static T registerItem(Identifier identifier, Function constructor) { + return registerItem(identifier, constructor, new Item.Settings()); + } + private static synchronized void exec(Runnable run) { run.run(); } diff --git a/src/main/java/io/github/skippyall/minions/client/MinionsClient.java b/src/main/java/io/github/skippyall/minions/client/MinionsClient.java deleted file mode 100644 index 7f5d9a7..0000000 --- a/src/main/java/io/github/skippyall/minions/client/MinionsClient.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.github.skippyall.minions.client; - -import io.github.skippyall.minions.networking.ClientToServerNetworking; -import net.fabricmc.api.ClientModInitializer; -import net.fabricmc.fabric.api.client.networking.v1.ClientConfigurationConnectionEvents; -import net.fabricmc.fabric.api.client.networking.v1.ClientLoginConnectionEvents; - -public class MinionsClient implements ClientModInitializer { - /** - * Runs the mod initializer on the client environment. - */ - @Override - public void onInitializeClient() { - //ClientConfigurationConnectionEvents.INIT.register(ClientToServerNetworking::onConfigurationInit); - } -} diff --git a/src/main/java/io/github/skippyall/minions/command/CommandExecutor.java b/src/main/java/io/github/skippyall/minions/command/CommandExecutor.java index 4ee3fd2..f46b48f 100644 --- a/src/main/java/io/github/skippyall/minions/command/CommandExecutor.java +++ b/src/main/java/io/github/skippyall/minions/command/CommandExecutor.java @@ -1,6 +1,6 @@ package io.github.skippyall.minions.command; -import io.github.skippyall.minions.fakeplayer.MinionFakePlayer; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import net.minecraft.server.network.ServerPlayerEntity; public interface CommandExecutor { diff --git a/src/main/java/io/github/skippyall/minions/command/SimpleCommand.java b/src/main/java/io/github/skippyall/minions/command/SimpleCommand.java index 9aa2f44..5a5f926 100644 --- a/src/main/java/io/github/skippyall/minions/command/SimpleCommand.java +++ b/src/main/java/io/github/skippyall/minions/command/SimpleCommand.java @@ -1,6 +1,6 @@ package io.github.skippyall.minions.command; -import io.github.skippyall.minions.fakeplayer.MinionFakePlayer; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import net.minecraft.item.Item; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.Text; diff --git a/src/main/java/io/github/skippyall/minions/fakeplayer/ServerPlayerInterface.java b/src/main/java/io/github/skippyall/minions/fakeplayer/ServerPlayerInterface.java deleted file mode 100644 index f75600d..0000000 --- a/src/main/java/io/github/skippyall/minions/fakeplayer/ServerPlayerInterface.java +++ /dev/null @@ -1,8 +0,0 @@ -package io.github.skippyall.minions.fakeplayer; - -import io.github.skippyall.minions.fakeplayer.EntityPlayerActionPack; - -public interface ServerPlayerInterface -{ - EntityPlayerActionPack getActionPack(); -} diff --git a/src/main/java/io/github/skippyall/minions/gui/CommandsGui.java b/src/main/java/io/github/skippyall/minions/gui/CommandsGui.java index 6a21271..68d47a9 100644 --- a/src/main/java/io/github/skippyall/minions/gui/CommandsGui.java +++ b/src/main/java/io/github/skippyall/minions/gui/CommandsGui.java @@ -3,7 +3,7 @@ package io.github.skippyall.minions.gui; import eu.pb4.sgui.api.elements.GuiElementBuilder; import eu.pb4.sgui.api.gui.SimpleGui; import io.github.skippyall.minions.command.Command; -import io.github.skippyall.minions.fakeplayer.MinionFakePlayer; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.module.ModuleItem; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.server.network.ServerPlayerEntity; diff --git a/src/main/java/io/github/skippyall/minions/gui/MinionGui.java b/src/main/java/io/github/skippyall/minions/gui/MinionGui.java index 7ba218c..9c84df7 100644 --- a/src/main/java/io/github/skippyall/minions/gui/MinionGui.java +++ b/src/main/java/io/github/skippyall/minions/gui/MinionGui.java @@ -2,11 +2,9 @@ package io.github.skippyall.minions.gui; import eu.pb4.sgui.api.elements.GuiElementBuilder; import eu.pb4.sgui.api.gui.SimpleGui; -import io.github.skippyall.minions.fakeplayer.MinionFakePlayer; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import net.minecraft.item.Items; -import net.minecraft.screen.GenericContainerScreenHandler; import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.screen.SimpleNamedScreenHandlerFactory; import net.minecraft.screen.slot.Slot; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.Text; @@ -31,7 +29,7 @@ public class MinionGui { gui.setSlot(4, new GuiElementBuilder() .setItem(Items.REDSTONE) .setName(Text.translatable("minions.gui.main.programming")) - .setCallback((i, clickType, slotActionType) -> { + .setCallback(() -> { openProgrammingInventory(player, minion); }) ); @@ -39,17 +37,24 @@ public class MinionGui { gui.setSlot(3, new GuiElementBuilder() .setItem(Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE) .setName(Text.translatable("minions.gui.main.modules")) - .setCallback((i, clickType, slotActionType) -> { + .setCallback(() -> { ModuleInventory.openModuleInventory(player, minion); }) ); gui.setSlot(5, new GuiElementBuilder() .setItem(Items.CHEST) .setName(Text.translatable("minions.gui.main.inventory")) - .setCallback((i, clickType, slotActionType) -> { + .setCallback(() -> { openMinionInventory(player, minion); }) ); + gui.setSlot(7, new GuiElementBuilder() + .setItem(Items.BARRIER) + .setName(Text.translatable("minions.gui.main.pickup")) + .setCallback(() -> { + minion.kill(minion.getServerWorld()); + }) + ); gui.open(); } diff --git a/src/main/java/io/github/skippyall/minions/gui/ModuleInventory.java b/src/main/java/io/github/skippyall/minions/gui/ModuleInventory.java index 06b10c0..470e80e 100644 --- a/src/main/java/io/github/skippyall/minions/gui/ModuleInventory.java +++ b/src/main/java/io/github/skippyall/minions/gui/ModuleInventory.java @@ -1,7 +1,7 @@ package io.github.skippyall.minions.gui; import io.github.skippyall.minions.command.Command; -import io.github.skippyall.minions.fakeplayer.MinionFakePlayer; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.module.ModuleItem; import io.github.skippyall.minions.program.block.CodeBlock; import net.minecraft.inventory.Inventories; diff --git a/src/main/java/io/github/skippyall/minions/input/TextInput.java b/src/main/java/io/github/skippyall/minions/input/TextInput.java index 24e9547..581e19f 100644 --- a/src/main/java/io/github/skippyall/minions/input/TextInput.java +++ b/src/main/java/io/github/skippyall/minions/input/TextInput.java @@ -18,7 +18,10 @@ public class TextInput { gui.setSlot(AnvilScreenHandler.OUTPUT_ID, new GuiElementBuilder() .setItem(Items.EMERALD_BLOCK) .setName(Text.literal("OK")) - .setCallback(() -> future.complete(gui.getInput())) + .setCallback(() -> { + gui.close(); + future.complete(gui.getInput()); + }) ); gui.setTitle(title); gui.setDefaultInputValue(defaultText); diff --git a/src/main/java/io/github/skippyall/minions/minion/MinionData.java b/src/main/java/io/github/skippyall/minions/minion/MinionData.java index b5347e3..bcfe28a 100644 --- a/src/main/java/io/github/skippyall/minions/minion/MinionData.java +++ b/src/main/java/io/github/skippyall/minions/minion/MinionData.java @@ -4,7 +4,7 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import eu.pb4.polymer.core.api.other.PolymerComponent; import io.github.skippyall.minions.Minions; -import io.github.skippyall.minions.fakeplayer.MinionFakePlayer; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import net.minecraft.component.ComponentType; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtOps; diff --git a/src/main/java/io/github/skippyall/minions/minion/MinionItem.java b/src/main/java/io/github/skippyall/minions/minion/MinionItem.java index 5b39cf8..25f154a 100644 --- a/src/main/java/io/github/skippyall/minions/minion/MinionItem.java +++ b/src/main/java/io/github/skippyall/minions/minion/MinionItem.java @@ -2,7 +2,7 @@ package io.github.skippyall.minions.minion; import eu.pb4.polymer.core.api.item.PolymerItem; import eu.pb4.polymer.core.api.item.PolymerItemUtils; -import io.github.skippyall.minions.fakeplayer.MinionFakePlayer; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.NbtComponent; import net.minecraft.item.Item; @@ -12,11 +12,14 @@ import net.minecraft.item.Items; import net.minecraft.item.tooltip.TooltipType; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; +import net.minecraft.text.Text; import net.minecraft.util.ActionResult; +import net.minecraft.util.Identifier; import net.minecraft.util.math.Vec2f; import org.jetbrains.annotations.Nullable; import xyz.nucleoid.packettweaker.PacketContext; +import java.util.List; import java.util.Optional; public class MinionItem extends Item implements PolymerItem { @@ -27,6 +30,11 @@ public class MinionItem extends Item implements PolymerItem { this.canProgram = canProgram; } + @Override + public @Nullable Identifier getPolymerItemModel(ItemStack stack, PacketContext context) { + return null; + } + @Override public Item getPolymerItem(ItemStack itemStack, PacketContext player) { return Items.ARMOR_STAND; @@ -39,6 +47,14 @@ public class MinionItem extends Item implements PolymerItem { return out; } + @Override + public void appendTooltip(ItemStack stack, TooltipContext context, List tooltip, TooltipType type) { + MinionData data = stack.get(MinionData.COMPONENT); + if(data != null) { + tooltip.add(Text.translatable("minions.minion_item.tooltip", data.name())); + } + } + @Override public ActionResult useOnBlock(ItemUsageContext context) { String contents = context.getStack().getName().getLiteralString(); @@ -56,7 +72,7 @@ public class MinionItem extends Item implements PolymerItem { } if (data.uuid() == null) { - MinionFakePlayer.createMinion(data, (ServerWorld) context.getWorld(), (ServerPlayerEntity) context.getPlayer(), canProgram, context.getBlockPos().toCenterPos().add(0,0.5,0), 0, 0); + MinionFakePlayer.createMinion(data, (ServerWorld) context.getWorld(), (ServerPlayerEntity) context.getPlayer(), canProgram, context.getBlockPos().toCenterPos().add(0,0.5,0), new Vec2f(0, 0)); }else { data = data.withName(name); MinionFakePlayer.spawnMinionAt(data, (ServerWorld) context.getWorld(), context.getBlockPos().toCenterPos().add(0,0.5,0), new Vec2f(0, 0)); diff --git a/src/main/java/io/github/skippyall/minions/minion/MinionPersistentState.java b/src/main/java/io/github/skippyall/minions/minion/MinionPersistentState.java index e92b036..10a249b 100644 --- a/src/main/java/io/github/skippyall/minions/minion/MinionPersistentState.java +++ b/src/main/java/io/github/skippyall/minions/minion/MinionPersistentState.java @@ -1,6 +1,6 @@ package io.github.skippyall.minions.minion; -import io.github.skippyall.minions.fakeplayer.MinionFakePlayer; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtElement; import net.minecraft.nbt.NbtList; @@ -47,7 +47,7 @@ public class MinionPersistentState extends PersistentState { } NbtList uuids = compound.getList("uuids", NbtElement.COMPOUND_TYPE); - for(NbtElement element : list) { + for(NbtElement element : uuids) { instance.minionUuids.add(((NbtCompound) element).getUuid("uuid")); } return instance; diff --git a/src/main/java/io/github/skippyall/minions/fakeplayer/ClientConnectionInterface.java b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/ClientConnectionInterface.java similarity index 52% rename from src/main/java/io/github/skippyall/minions/fakeplayer/ClientConnectionInterface.java rename to src/main/java/io/github/skippyall/minions/minion/fakeplayer/ClientConnectionInterface.java index a199f98..1c692eb 100644 --- a/src/main/java/io/github/skippyall/minions/fakeplayer/ClientConnectionInterface.java +++ b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/ClientConnectionInterface.java @@ -1,4 +1,5 @@ -package io.github.skippyall.minions.fakeplayer; +//code from https://github.com/gnembon/fabric-carpet +package io.github.skippyall.minions.minion.fakeplayer; import io.netty.channel.Channel; diff --git a/src/main/java/io/github/skippyall/minions/fakeplayer/EntityPlayerActionPack.java b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/EntityPlayerActionPack.java similarity index 99% rename from src/main/java/io/github/skippyall/minions/fakeplayer/EntityPlayerActionPack.java rename to src/main/java/io/github/skippyall/minions/minion/fakeplayer/EntityPlayerActionPack.java index 91e3cd7..87e47b4 100644 --- a/src/main/java/io/github/skippyall/minions/fakeplayer/EntityPlayerActionPack.java +++ b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/EntityPlayerActionPack.java @@ -1,4 +1,5 @@ -package io.github.skippyall.minions.fakeplayer; +//partially code from https://github.com/gnembon/fabric-carpet +package io.github.skippyall.minions.minion.fakeplayer; import java.util.EnumMap; diff --git a/src/main/java/io/github/skippyall/minions/fakeplayer/FakeClientConnection.java b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/FakeClientConnection.java similarity index 90% rename from src/main/java/io/github/skippyall/minions/fakeplayer/FakeClientConnection.java rename to src/main/java/io/github/skippyall/minions/minion/fakeplayer/FakeClientConnection.java index 034b095..79593c7 100644 --- a/src/main/java/io/github/skippyall/minions/fakeplayer/FakeClientConnection.java +++ b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/FakeClientConnection.java @@ -1,11 +1,11 @@ -package io.github.skippyall.minions.fakeplayer; +//code from https://github.com/gnembon/fabric-carpet +package io.github.skippyall.minions.minion.fakeplayer; import io.netty.channel.embedded.EmbeddedChannel; import net.minecraft.network.ClientConnection; import net.minecraft.network.NetworkSide; import net.minecraft.network.NetworkState; import net.minecraft.network.listener.PacketListener; -import net.minecraft.text.Text; public class FakeClientConnection extends ClientConnection { public FakeClientConnection(NetworkSide p) diff --git a/src/main/java/io/github/skippyall/minions/fakeplayer/MinionFakePlayer.java b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/MinionFakePlayer.java similarity index 83% rename from src/main/java/io/github/skippyall/minions/fakeplayer/MinionFakePlayer.java rename to src/main/java/io/github/skippyall/minions/minion/fakeplayer/MinionFakePlayer.java index cce156c..01bebf6 100644 --- a/src/main/java/io/github/skippyall/minions/fakeplayer/MinionFakePlayer.java +++ b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/MinionFakePlayer.java @@ -1,4 +1,5 @@ -package io.github.skippyall.minions.fakeplayer; +//partially code from https://github.com/gnembon/fabric-carpet +package io.github.skippyall.minions.minion.fakeplayer; import com.mojang.authlib.GameProfile; import io.github.skippyall.minions.Minions; @@ -46,6 +47,8 @@ import java.util.Optional; import java.util.Set; import java.util.UUID; import java.util.concurrent.CompletableFuture; +import java.util.function.BiConsumer; +import java.util.function.Consumer; public class MinionFakePlayer extends ServerPlayerEntity { public Runnable fixStartingPosition = () -> {}; @@ -59,43 +62,26 @@ public class MinionFakePlayer extends ServerPlayerEntity { private UUID skinUuid = null; - public static void createMinion(MinionData data, ServerWorld level, ServerPlayerEntity owner, boolean canProgram, Vec3d pos, double yaw, double pitch) { - MinecraftServer server = level.getServer(); + public static void createMinion(MinionData data, ServerWorld level, ServerPlayerEntity owner, boolean canProgram, Vec3d pos, Vec2f rot) { + spawnMinion(data, level, pos, rot, + (minion, skinProfile) -> { + if (skinProfile != null) { + minion.skinUuid = skinProfile.getId(); + } - CompletableFuture future; - if(data.skinUuid().isPresent()) { - future = MinionProfileUtils.getSkinOwnerProfile(server, data.skinUuid().get()); - } else { - future = MinionProfileUtils.lookupSkinOwnerProfile(server, data.name()); - } - - future.thenAccept(skinProfile -> { - GameProfile profile = MinionProfileUtils.makeNewMinionProfile(null, data.name(), skinProfile); - Minions.addExecuteOnNextTick(() -> { - MinionFakePlayer instance = new MinionFakePlayer(server, level, profile, SyncedClientOptions.createDefault()); - if(skinProfile != null) { - instance.skinUuid = skinProfile.getId(); + minion.programmable = canProgram; + }, + minion -> { + MinionPersistentState.INSTANCE.addMinion(minion); } - - instance.programmable = canProgram; - instance.fixStartingPosition = () -> instance.refreshPositionAndAngles(pos.x, pos.y, pos.z, (float) yaw, (float) pitch); - server.getPlayerManager().onPlayerConnect(new FakeClientConnection(NetworkSide.SERVERBOUND), instance, new ConnectedClientData(profile, 0, instance.getClientOptions(), false)); - instance.teleport(level, pos.x, pos.y, pos.z, Set.of(), (float) yaw, (float) pitch, true); - instance.setHealth(20.0F); - instance.unsetRemoved(); - instance.getAttributeInstance(EntityAttributes.STEP_HEIGHT).setBaseValue(0.6F); - instance.interactionManager.changeGameMode(GameMode.SURVIVAL); - server.getPlayerManager().sendToDimension(new EntitySetHeadYawS2CPacket(instance, (byte) (instance.headYaw * 256 / 360)), level.getRegistryKey());//instance.dimension); - server.getPlayerManager().sendToDimension(EntityPositionSyncS2CPacket.create(instance), level.getRegistryKey());//instance.dimension); - //instance.world.getChunkManager(). updatePosition(instance); - instance.dataTracker.set(PLAYER_MODEL_PARTS, (byte) 0x7f); // show all model layers (incl. capes) - instance.getAbilities().flying = false; - MinionPersistentState.INSTANCE.addMinion(instance); - }); - }); + ); } public static void spawnMinionAt(MinionData data, ServerWorld level, @Nullable Vec3d pos, @Nullable Vec2f rot) { + spawnMinion(data, level, pos, rot, (minion, skinProfile) -> {}, minion -> {}); + } + + public static void spawnMinion(MinionData data, ServerWorld level, @Nullable Vec3d pos, @Nullable Vec2f rot, BiConsumer beforeSpawn, Consumer afterSpawn) { MinecraftServer server = level.getServer(); CompletableFuture future; @@ -109,6 +95,8 @@ public class MinionFakePlayer extends ServerPlayerEntity { GameProfile profile = MinionProfileUtils.makeNewMinionProfile(data.uuid(), data.name(), skinProfile); Minions.addExecuteOnNextTick(() -> { MinionFakePlayer instance = new MinionFakePlayer(server, level, profile, SyncedClientOptions.createDefault()); + beforeSpawn.accept(instance, skinProfile); + if(pos != null && rot != null) { instance.fixStartingPosition = () -> instance.refreshPositionAndAngles(pos.x, pos.y, pos.z, rot.x, rot.y); } @@ -120,12 +108,15 @@ public class MinionFakePlayer extends ServerPlayerEntity { instance.setVelocity(0,0,0); instance.setHealth(20.0F); instance.unsetRemoved(); + instance.getAttributeInstance(EntityAttributes.STEP_HEIGHT).setBaseValue(0.6F); instance.interactionManager.changeGameMode(GameMode.SURVIVAL); server.getPlayerManager().sendToDimension(new EntitySetHeadYawS2CPacket(instance, (byte) (instance.headYaw * 256 / 360)), level.getRegistryKey());//instance.dimension); server.getPlayerManager().sendToDimension(EntityPositionSyncS2CPacket.create(instance), level.getRegistryKey());//instance.dimension); //instance.world.getChunkManager(). updatePosition(instance); instance.dataTracker.set(PLAYER_MODEL_PARTS, (byte) 0x7f); // show all model layers (incl. capes) instance.getAbilities().flying = false; + + afterSpawn.accept(instance); }); }); } @@ -313,9 +304,9 @@ public class MinionFakePlayer extends ServerPlayerEntity { } @Override - protected void drop(ServerWorld world, DamageSource damageSource) { + public void drop(ServerWorld world, DamageSource damageSource) { super.drop(world, damageSource); - dropStack(world, toItemStack()); + dropStack(world, toItemStack()).setNeverDespawn(); } private ItemStack toItemStack() { diff --git a/src/main/java/io/github/skippyall/minions/fakeplayer/NetHandlerPlayServerFake.java b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/NetHandlerPlayServerFake.java similarity index 93% rename from src/main/java/io/github/skippyall/minions/fakeplayer/NetHandlerPlayServerFake.java rename to src/main/java/io/github/skippyall/minions/minion/fakeplayer/NetHandlerPlayServerFake.java index 5134861..472e9fb 100644 --- a/src/main/java/io/github/skippyall/minions/fakeplayer/NetHandlerPlayServerFake.java +++ b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/NetHandlerPlayServerFake.java @@ -1,4 +1,5 @@ -package io.github.skippyall.minions.fakeplayer; +//code from https://github.com/gnembon/fabric-carpet +package io.github.skippyall.minions.minion.fakeplayer; import net.minecraft.entity.player.PlayerPosition; import net.minecraft.network.ClientConnection; diff --git a/src/main/java/io/github/skippyall/minions/minion/fakeplayer/ServerPlayerInterface.java b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/ServerPlayerInterface.java new file mode 100644 index 0000000..7862f74 --- /dev/null +++ b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/ServerPlayerInterface.java @@ -0,0 +1,7 @@ +//code from https://github.com/gnembon/fabric-carpet +package io.github.skippyall.minions.minion.fakeplayer; + +public interface ServerPlayerInterface +{ + EntityPlayerActionPack getActionPack(); +} diff --git a/src/main/java/io/github/skippyall/minions/fakeplayer/Tracer.java b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/Tracer.java similarity index 97% rename from src/main/java/io/github/skippyall/minions/fakeplayer/Tracer.java rename to src/main/java/io/github/skippyall/minions/minion/fakeplayer/Tracer.java index c4cd9fe..51e9d08 100644 --- a/src/main/java/io/github/skippyall/minions/fakeplayer/Tracer.java +++ b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/Tracer.java @@ -1,4 +1,5 @@ -package io.github.skippyall.minions.fakeplayer; +//code from https://github.com/gnembon/fabric-carpet +package io.github.skippyall.minions.minion.fakeplayer; import java.util.Optional; import java.util.function.Predicate; diff --git a/src/main/java/io/github/skippyall/minions/mixins/ConnectionMixin.java b/src/main/java/io/github/skippyall/minions/mixins/ConnectionMixin.java index d967ef2..54711f1 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/ConnectionMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/ConnectionMixin.java @@ -1,6 +1,7 @@ +//code from https://github.com/gnembon/fabric-carpet package io.github.skippyall.minions.mixins; -import io.github.skippyall.minions.fakeplayer.ClientConnectionInterface; +import io.github.skippyall.minions.minion.fakeplayer.ClientConnectionInterface; import io.netty.channel.Channel; import net.minecraft.network.ClientConnection; import org.spongepowered.asm.mixin.Mixin; diff --git a/src/main/java/io/github/skippyall/minions/mixins/MinecraftServerMixin.java b/src/main/java/io/github/skippyall/minions/mixins/MinecraftServerMixin.java index fdff330..bca48af 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/MinecraftServerMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/MinecraftServerMixin.java @@ -1,7 +1,7 @@ package io.github.skippyall.minions.mixins; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; -import io.github.skippyall.minions.fakeplayer.MinionFakePlayer; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import net.minecraft.server.MinecraftServer; import net.minecraft.server.network.ServerPlayerEntity; import org.spongepowered.asm.mixin.Mixin; diff --git a/src/main/java/io/github/skippyall/minions/mixins/MobEntityMixin.java b/src/main/java/io/github/skippyall/minions/mixins/MobEntityMixin.java index 3e161b5..245eefe 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/MobEntityMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/MobEntityMixin.java @@ -1,6 +1,6 @@ package io.github.skippyall.minions.mixins; -import io.github.skippyall.minions.fakeplayer.MinionFakePlayer; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.module.MobSpawningModule; import net.minecraft.entity.Entity; import net.minecraft.entity.mob.MobEntity; diff --git a/src/main/java/io/github/skippyall/minions/mixins/PlayerListEntryS2CPacket$EntryMixin.java b/src/main/java/io/github/skippyall/minions/mixins/PlayerListEntryS2CPacket$EntryMixin.java index be22fbb..1cc27a9 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/PlayerListEntryS2CPacket$EntryMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/PlayerListEntryS2CPacket$EntryMixin.java @@ -1,7 +1,7 @@ package io.github.skippyall.minions.mixins; import com.llamalad7.mixinextras.sugar.Local; -import io.github.skippyall.minions.fakeplayer.MinionFakePlayer; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import net.minecraft.network.packet.s2c.play.PlayerListS2CPacket; import net.minecraft.server.network.ServerPlayerEntity; import org.spongepowered.asm.mixin.Mixin; diff --git a/src/main/java/io/github/skippyall/minions/mixins/PlayerListMixin.java b/src/main/java/io/github/skippyall/minions/mixins/PlayerListMixin.java index 0bce7b7..e364629 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/PlayerListMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/PlayerListMixin.java @@ -1,3 +1,4 @@ +//partially code from https://github.com/gnembon/fabric-carpet package io.github.skippyall.minions.mixins; import com.llamalad7.mixinextras.injector.ModifyReceiver; @@ -5,8 +6,8 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.llamalad7.mixinextras.sugar.Local; import com.mojang.authlib.GameProfile; -import io.github.skippyall.minions.fakeplayer.MinionFakePlayer; -import io.github.skippyall.minions.fakeplayer.NetHandlerPlayServerFake; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; +import io.github.skippyall.minions.minion.fakeplayer.NetHandlerPlayServerFake; import net.minecraft.nbt.NbtCompound; import net.minecraft.network.ClientConnection; import net.minecraft.network.packet.c2s.common.SyncedClientOptions; diff --git a/src/main/java/io/github/skippyall/minions/mixins/ServerPlayNetworkHandlerMixin.java b/src/main/java/io/github/skippyall/minions/mixins/ServerPlayNetworkHandlerMixin.java index 0696fa9..591bf87 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/ServerPlayNetworkHandlerMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/ServerPlayNetworkHandlerMixin.java @@ -2,7 +2,7 @@ package io.github.skippyall.minions.mixins; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import io.github.skippyall.minions.fakeplayer.MinionFakePlayer; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import net.minecraft.server.PlayerManager; import net.minecraft.server.network.ServerPlayNetworkHandler; import net.minecraft.server.network.ServerPlayerEntity; diff --git a/src/main/java/io/github/skippyall/minions/mixins/ServerPlayerMixin.java b/src/main/java/io/github/skippyall/minions/mixins/ServerPlayerMixin.java index c6d7275..be5db1e 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/ServerPlayerMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/ServerPlayerMixin.java @@ -1,8 +1,8 @@ package io.github.skippyall.minions.mixins; import com.mojang.authlib.GameProfile; -import io.github.skippyall.minions.fakeplayer.EntityPlayerActionPack; -import io.github.skippyall.minions.fakeplayer.ServerPlayerInterface; +import io.github.skippyall.minions.minion.fakeplayer.EntityPlayerActionPack; +import io.github.skippyall.minions.minion.fakeplayer.ServerPlayerInterface; import net.minecraft.network.packet.c2s.common.SyncedClientOptions; import net.minecraft.server.MinecraftServer; import net.minecraft.server.network.ServerPlayerEntity; diff --git a/src/main/java/io/github/skippyall/minions/mixins/SleepManagerMixin.java b/src/main/java/io/github/skippyall/minions/mixins/SleepManagerMixin.java index 64e7719..120825a 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/SleepManagerMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/SleepManagerMixin.java @@ -2,7 +2,7 @@ package io.github.skippyall.minions.mixins; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import io.github.skippyall.minions.fakeplayer.MinionFakePlayer; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.SleepManager; import org.spongepowered.asm.mixin.Mixin; diff --git a/src/main/java/io/github/skippyall/minions/mixins/SpawnHelperMixin.java b/src/main/java/io/github/skippyall/minions/mixins/SpawnHelperMixin.java index f79f7a4..4eedb31 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/SpawnHelperMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/SpawnHelperMixin.java @@ -1,6 +1,6 @@ package io.github.skippyall.minions.mixins; -import io.github.skippyall.minions.fakeplayer.MinionFakePlayer; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.module.MobSpawningModule; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.predicate.entity.EntityPredicates; diff --git a/src/main/java/io/github/skippyall/minions/module/ActionModules.java b/src/main/java/io/github/skippyall/minions/module/ActionModules.java index 628ee67..e331520 100644 --- a/src/main/java/io/github/skippyall/minions/module/ActionModules.java +++ b/src/main/java/io/github/skippyall/minions/module/ActionModules.java @@ -3,8 +3,8 @@ package io.github.skippyall.minions.module; import eu.pb4.sgui.api.elements.GuiElementBuilder; import eu.pb4.sgui.api.gui.SimpleGui; import io.github.skippyall.minions.command.CommandExecutor; -import io.github.skippyall.minions.fakeplayer.EntityPlayerActionPack; -import io.github.skippyall.minions.fakeplayer.MinionFakePlayer; +import io.github.skippyall.minions.minion.fakeplayer.EntityPlayerActionPack; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.input.TextInput; import net.minecraft.item.Items; import net.minecraft.screen.ScreenHandlerType; @@ -51,11 +51,12 @@ public class ActionModules { .setName(Text.translatable("minions.command.action.interval", actionName)) .setCallback(() -> executeInterval(actionType, player, minion)) ); - gui.setSlot(3, new GuiElementBuilder() + gui.setSlot(4, new GuiElementBuilder() .setItem(Items.BARRIER) .setName(Text.translatable("minions.command.action.stop", actionName)) .setCallback(() -> executeStop(actionType, player, minion)) ); + gui.open(); }; } } diff --git a/src/main/java/io/github/skippyall/minions/module/AttackModule.java b/src/main/java/io/github/skippyall/minions/module/AttackModule.java new file mode 100644 index 0000000..7dc1557 --- /dev/null +++ b/src/main/java/io/github/skippyall/minions/module/AttackModule.java @@ -0,0 +1,33 @@ +package io.github.skippyall.minions.module; + +import io.github.skippyall.minions.Minions; +import io.github.skippyall.minions.command.SimpleCommand; +import io.github.skippyall.minions.minion.fakeplayer.EntityPlayerActionPack; +import net.minecraft.item.Items; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; + +import java.util.List; + +import static io.github.skippyall.minions.module.Modules.register; + +public class AttackModule { + public static final SimpleCommand ATTACK_COMMAND = new SimpleCommand( + Text.translatable("minions.command.attack.name"), + Text.translatable("minions.command.attack.description"), + Items.DIAMOND_PICKAXE, + ActionModules.detailSelectionExecutor(EntityPlayerActionPack.ActionType.ATTACK, Text.translatable("minions.command.attack.name")) + ); + + public static final SimpleModuleItem ATTACK_MODULE = register( + Identifier.of(Minions.MOD_ID, "attack_module"), + List.of(), + List.of(ATTACK_COMMAND), + Items.DIAMOND_PICKAXE + ); + + public static void registerMe() { + + } +} + diff --git a/src/main/java/io/github/skippyall/minions/module/InteractModule.java b/src/main/java/io/github/skippyall/minions/module/InteractModule.java index d21d0b8..3bd9169 100644 --- a/src/main/java/io/github/skippyall/minions/module/InteractModule.java +++ b/src/main/java/io/github/skippyall/minions/module/InteractModule.java @@ -2,6 +2,7 @@ package io.github.skippyall.minions.module; import io.github.skippyall.minions.Minions; import io.github.skippyall.minions.command.SimpleCommand; +import io.github.skippyall.minions.minion.fakeplayer.EntityPlayerActionPack; import net.minecraft.item.Items; import net.minecraft.text.Text; import net.minecraft.util.Identifier; @@ -11,18 +12,22 @@ import java.util.List; import static io.github.skippyall.minions.module.Modules.register; public class InteractModule { - /*public static final SimpleCommand INTERACT_COMMAND = - new SimpleCommand( - Text.translatable() - ) + public static final SimpleCommand INTERACT_COMMAND = new SimpleCommand( + Text.translatable("minions.command.interact.name"), + Text.translatable("minions.command.interact.description"), + Items.LEVER, + ActionModules.detailSelectionExecutor(EntityPlayerActionPack.ActionType.USE, Text.translatable("minions.command.interact.name")) + ); public static final SimpleModuleItem INTERACT_MODULE = register( Identifier.of(Minions.MOD_ID, "interact_module"), - new SimpleModuleItem( - List.of(), - List.of(), - Items.LEVER - ) - );*/ + List.of(), + List.of(INTERACT_COMMAND), + Items.LEVER + ); + + public static void registerMe() { + + } } diff --git a/src/main/java/io/github/skippyall/minions/module/MobSpawningModule.java b/src/main/java/io/github/skippyall/minions/module/MobSpawningModule.java index 8e1fbb3..9b24257 100644 --- a/src/main/java/io/github/skippyall/minions/module/MobSpawningModule.java +++ b/src/main/java/io/github/skippyall/minions/module/MobSpawningModule.java @@ -1,7 +1,7 @@ package io.github.skippyall.minions.module; import io.github.skippyall.minions.Minions; -import io.github.skippyall.minions.fakeplayer.MinionFakePlayer; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import net.minecraft.item.Items; import net.minecraft.util.Identifier; diff --git a/src/main/java/io/github/skippyall/minions/module/Modules.java b/src/main/java/io/github/skippyall/minions/module/Modules.java index 69eb425..b6cbe34 100644 --- a/src/main/java/io/github/skippyall/minions/module/Modules.java +++ b/src/main/java/io/github/skippyall/minions/module/Modules.java @@ -17,6 +17,8 @@ public class Modules { MountModule.registerMe(); MoveModule.registerMe(); MobSpawningModule.registerMe(); + InteractModule.registerMe(); + AttackModule.registerMe(); } public static T register(Identifier id, T item) { diff --git a/src/main/java/io/github/skippyall/minions/module/SimpleModuleItem.java b/src/main/java/io/github/skippyall/minions/module/SimpleModuleItem.java index ad588cb..ef2863c 100644 --- a/src/main/java/io/github/skippyall/minions/module/SimpleModuleItem.java +++ b/src/main/java/io/github/skippyall/minions/module/SimpleModuleItem.java @@ -1,24 +1,20 @@ package io.github.skippyall.minions.module; -import eu.pb4.polymer.core.api.item.PolymerItem; +import eu.pb4.polymer.core.api.item.SimplePolymerItem; import io.github.skippyall.minions.command.Command; import io.github.skippyall.minions.program.block.CodeBlock; import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import xyz.nucleoid.packettweaker.PacketContext; import java.util.List; -public class SimpleModuleItem extends Item implements PolymerItem, ModuleItem { +public class SimpleModuleItem extends SimplePolymerItem implements ModuleItem { private final List> codeBlocks; private final List commands; - private final Item vanillaItem; public SimpleModuleItem(List> codeBlocks, List commands, Settings settings, Item vanillaItem) { - super(settings.maxCount(1)); + super(settings.maxCount(1), vanillaItem); this.codeBlocks = codeBlocks; this.commands = commands; - this.vanillaItem = vanillaItem; } @Override @@ -30,9 +26,4 @@ public class SimpleModuleItem extends Item implements PolymerItem, ModuleItem { public List getCommands() { return commands; } - - @Override - public Item getPolymerItem(ItemStack itemStack, PacketContext context) { - return vanillaItem; - } } diff --git a/src/main/java/io/github/skippyall/minions/networking/ClientToServerNetworking.java b/src/main/java/io/github/skippyall/minions/networking/ClientToServerNetworking.java deleted file mode 100644 index e3d0c21..0000000 --- a/src/main/java/io/github/skippyall/minions/networking/ClientToServerNetworking.java +++ /dev/null @@ -1,40 +0,0 @@ -package io.github.skippyall.minions.networking; - -import io.github.skippyall.minions.Minions; -import io.netty.buffer.Unpooled; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.client.networking.v1.ClientConfigurationNetworking; -import net.fabricmc.fabric.api.networking.v1.PacketSender; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientConfigurationNetworkHandler; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.network.ServerConfigurationNetworkHandler; -import net.minecraft.util.Identifier; - -public class ClientToServerNetworking { - /*public static final Identifier RL = Identifier.of(Minions.MOD_ID, "network"); - @Environment(EnvType.CLIENT) - public static void sendJoinPacket(PlayerEntity player) { - PacketByteBuf pbf = new PacketByteBuf(Unpooled.buffer()); - pbf.writeString("BN|Init|V0.1"); - ClientConfigurationNetworking.send(RL, pbf); - } - - @Environment(EnvType.CLIENT) - public static void onConfigurationInit(ClientConfigurationNetworkHandler handler, MinecraftClient client) { - sendJoinPacket(client.player); - } - - @Environment(EnvType.SERVER) - public static void receive(MinecraftServer server, ServerConfigurationNetworkHandler handler, PacketByteBuf buf, PacketSender responseSender) { - String message = buf.readString(); - if (!message.startsWith("BN|")) { - Minions.LOGGER.debug("Message with wrong format: " + message); - } - String[] parts = message.split("|"); - - }*/ -} diff --git a/src/main/java/io/github/skippyall/minions/networking/VersionChecker.java b/src/main/java/io/github/skippyall/minions/networking/VersionChecker.java deleted file mode 100644 index b65196b..0000000 --- a/src/main/java/io/github/skippyall/minions/networking/VersionChecker.java +++ /dev/null @@ -1,21 +0,0 @@ -package io.github.skippyall.minions.networking; - -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; -import net.minecraft.entity.player.PlayerEntity; - -public class VersionChecker { - protected static List hasSupportedMod = new ArrayList<>(); - public static boolean supportVersion(String version) { - return version.equals("v0.1"); - } - - public static boolean useSupportedMod(PlayerEntity p) { - return hasSupportedMod.contains(p.getUuid()); - } - - public static void resetPlayer(UUID uuid) { - hasSupportedMod.remove(uuid); - } -} diff --git a/src/main/java/io/github/skippyall/minions/program/block/GoBlock.java b/src/main/java/io/github/skippyall/minions/program/block/GoBlock.java index 2ea677e..ace8dbb 100644 --- a/src/main/java/io/github/skippyall/minions/program/block/GoBlock.java +++ b/src/main/java/io/github/skippyall/minions/program/block/GoBlock.java @@ -1,8 +1,8 @@ package io.github.skippyall.minions.program.block; -import io.github.skippyall.minions.fakeplayer.EntityPlayerActionPack; -import io.github.skippyall.minions.fakeplayer.MinionFakePlayer; -import io.github.skippyall.minions.fakeplayer.ServerPlayerInterface; +import io.github.skippyall.minions.minion.fakeplayer.EntityPlayerActionPack; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; +import io.github.skippyall.minions.minion.fakeplayer.ServerPlayerInterface; import io.github.skippyall.minions.program.runtime.MinionRuntime; import io.github.skippyall.minions.program.runtime.ProgramRuntime; import io.github.skippyall.minions.program.statement.Statement; diff --git a/src/main/java/io/github/skippyall/minions/program/block/UseBlock.java b/src/main/java/io/github/skippyall/minions/program/block/UseBlock.java index abd9834..3e81ce5 100644 --- a/src/main/java/io/github/skippyall/minions/program/block/UseBlock.java +++ b/src/main/java/io/github/skippyall/minions/program/block/UseBlock.java @@ -1,7 +1,7 @@ package io.github.skippyall.minions.program.block; -import io.github.skippyall.minions.fakeplayer.EntityPlayerActionPack; -import io.github.skippyall.minions.fakeplayer.MinionFakePlayer; +import io.github.skippyall.minions.minion.fakeplayer.EntityPlayerActionPack; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.program.runtime.MinionRuntime; import io.github.skippyall.minions.program.runtime.ProgramRuntime; import io.github.skippyall.minions.program.statement.Statement; diff --git a/src/main/java/io/github/skippyall/minions/program/runtime/MinionRuntime.java b/src/main/java/io/github/skippyall/minions/program/runtime/MinionRuntime.java index a39297f..fe1e131 100644 --- a/src/main/java/io/github/skippyall/minions/program/runtime/MinionRuntime.java +++ b/src/main/java/io/github/skippyall/minions/program/runtime/MinionRuntime.java @@ -1,10 +1,6 @@ package io.github.skippyall.minions.program.runtime; -import io.github.skippyall.minions.fakeplayer.MinionFakePlayer; -import net.fabricmc.fabric.api.entity.event.v1.ServerEntityCombatEvents; -import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; -import net.fabricmc.fabric.api.event.player.AttackEntityCallback; -import net.fabricmc.fabric.api.message.v1.ServerMessageEvents; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; public class MinionRuntime extends ProgramRuntime { private final MinionFakePlayer minion; diff --git a/src/main/java/io/github/skippyall/minions/server/MinionsServer.java b/src/main/java/io/github/skippyall/minions/server/MinionsServer.java deleted file mode 100644 index 97ccf3a..0000000 --- a/src/main/java/io/github/skippyall/minions/server/MinionsServer.java +++ /dev/null @@ -1,23 +0,0 @@ -package io.github.skippyall.minions.server; - -import io.github.skippyall.minions.networking.ClientToServerNetworking; -import io.github.skippyall.minions.networking.VersionChecker; -import net.fabricmc.api.DedicatedServerModInitializer; -import net.fabricmc.fabric.api.networking.v1.ServerConfigurationConnectionEvents; -import net.fabricmc.fabric.api.networking.v1.ServerConfigurationNetworking; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.network.ServerConfigurationNetworkHandler; - -public class MinionsServer implements DedicatedServerModInitializer { - @Override - public void onInitializeServer() { - /*ServerConfigurationNetworking.registerGlobalReceiver(ClientToServerNetworking.RL, ClientToServerNetworking::receive); - ServerConfigurationConnectionEvents.CONFIGURE.register(new ServerConfigurationConnectionEvents.Configure() { - @Override - public void onSendConfiguration(ServerConfigurationNetworkHandler handler, MinecraftServer server) { - VersionChecker.resetPlayer(handler.getDebugProfile().getId()); - } - });*/ - - } -} diff --git a/src/main/resources/data/minions/lang/en_us.json b/src/main/resources/data/minions/lang/en_us.json index c406bd3..26946c7 100644 --- a/src/main/resources/data/minions/lang/en_us.json +++ b/src/main/resources/data/minions/lang/en_us.json @@ -7,6 +7,7 @@ "minions.gui.module_commands.title": "Commands", "minions.gui.commands.title": "%s's Commands", "minions.gui.modules.title": "%s's Modules", + "minions.command.input.int.fail": "Not an integer", "minions.command.input.float.fail": "Not a number", "minions.command.action.details": "Set how to %s", @@ -15,6 +16,19 @@ "minions.command.action.interval": "%s every x seconds", "minions.command.action.stop": "Stop %s", "minions.command.action.interval.enter": "Enter an interval in seconds", - "minions.command.interact.name": "", - "minions.command.interact.description": "" + "minions.command.interact.name": "Interact", + "minions.command.interact.description": "Use and place blocks", + "minions.command.attack.name": "Attack", + "minions.command.attack.description": "Attack and mine blocks", + + "item.minions.attack_module": "Attack Module", + "item.minions.interact_module": "Interact Module", + "item.minions.mob_spawning_module": "Mob Spawning Module", + "item.minions.mount_module": "Mount Module", + "item.minions.move_module": "Move Module", + "item.minions.minion": "Minion", + "item.minions.basic_upgrade_base": "Basic Upgrade Base", + "item.minions.advanced_upgrade_base": "Advanced Upgrade Base", + + "minions.minion_item.tooltip": "Name: %s" } \ No newline at end of file diff --git a/src/main/resources/data/minions/recipe/advanced_upgrade_base.json b/src/main/resources/data/minions/recipe/advanced_upgrade_base.json new file mode 100644 index 0000000..3b0e316 --- /dev/null +++ b/src/main/resources/data/minions/recipe/advanced_upgrade_base.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "DND", + "NBN", + "DND" + ], + "key": { + "D": "minecraft:diamond", + "N": "minecraft:netherite_scrap", + "B": "minions:basic_upgrade_base" + }, + "result": { + "id": "minions:advanced_upgrade_base", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/minions/recipe/attack_module.json b/src/main/resources/data/minions/recipe/attack_module.json new file mode 100644 index 0000000..5ddc1cf --- /dev/null +++ b/src/main/resources/data/minions/recipe/attack_module.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smithing_transform", + "base": "minions:advanced_upgrade_base", + "addition": "minecraft:diamond_pickaxe", + "template": "minecraft:netherite_upgrade_smithing_template", + "result": { + "id": "minions:attack_module" + } +} \ No newline at end of file diff --git a/src/main/resources/data/minions/recipe/basic_upgrade.json b/src/main/resources/data/minions/recipe/basic_upgrade_base.json similarity index 87% rename from src/main/resources/data/minions/recipe/basic_upgrade.json rename to src/main/resources/data/minions/recipe/basic_upgrade_base.json index 084fce7..303c45e 100644 --- a/src/main/resources/data/minions/recipe/basic_upgrade.json +++ b/src/main/resources/data/minions/recipe/basic_upgrade_base.json @@ -8,7 +8,7 @@ "key": { "R": "minecraft:redstone_block", "G": "minecraft:gold_ingot", - "D": "minecraft:diamond_block" + "D": "minecraft:diamond" }, "result": { "id": "minions:basic_upgrade_base", diff --git a/src/main/resources/data/minions/recipe/interact_module.json b/src/main/resources/data/minions/recipe/interact_module.json new file mode 100644 index 0000000..048f7a8 --- /dev/null +++ b/src/main/resources/data/minions/recipe/interact_module.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smithing_transform", + "base": "minions:advanced_upgrade_base", + "addition": "minecraft:lever", + "template": "minecraft:netherite_upgrade_smithing_template", + "result": { + "id": "minions:interact_module" + } +} \ No newline at end of file diff --git a/src/main/resources/data/minions/recipe/minion.json b/src/main/resources/data/minions/recipe/minion.json index eeeca17..b64859c 100644 --- a/src/main/resources/data/minions/recipe/minion.json +++ b/src/main/resources/data/minions/recipe/minion.json @@ -3,13 +3,13 @@ "pattern": [ " H ", "RAR", - " L " + " N " ], "key": { "H": "#minecraft:skulls", "R": "minecraft:redstone_torch", "A": "minecraft:armor_stand", - "L": "minecraft:lodestone" + "N": "minecraft:netherite_ingot" }, "result": { "id": "minions:minion", diff --git a/src/main/resources/data/minions/recipe/mob_spawning_module.json b/src/main/resources/data/minions/recipe/mob_spawning_module.json new file mode 100644 index 0000000..bb7e825 --- /dev/null +++ b/src/main/resources/data/minions/recipe/mob_spawning_module.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smithing_transform", + "base": "minions:basic_upgrade_base", + "addition": "minecraft:rotten_flesh", + "template": "minecraft:netherite_upgrade_smithing_template", + "result": { + "id": "minions:mob_spawning_module" + } +} \ No newline at end of file diff --git a/src/main/resources/data/minions/recipe/mount_upgrade.json b/src/main/resources/data/minions/recipe/mount_module.json similarity index 100% rename from src/main/resources/data/minions/recipe/mount_upgrade.json rename to src/main/resources/data/minions/recipe/mount_module.json diff --git a/src/main/resources/data/minions/recipe/move_upgrade.json b/src/main/resources/data/minions/recipe/move_module.json similarity index 100% rename from src/main/resources/data/minions/recipe/move_upgrade.json rename to src/main/resources/data/minions/recipe/move_module.json diff --git a/src/main/resources/data/minions/tags/damage_type/minion_item_resists.json b/src/main/resources/data/minions/tags/damage_type/minion_item_resists.json new file mode 100644 index 0000000..9d1ec0a --- /dev/null +++ b/src/main/resources/data/minions/tags/damage_type/minion_item_resists.json @@ -0,0 +1,6 @@ +{ + "values": [ + "#minecraft:is_fire", + "#minecraft:is_explosion" + ] +} \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 9dbf788..49c1084 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -12,14 +12,8 @@ "icon": "assets/minions/icon.png", "environment": "*", "entrypoints": { - "client": [ - "io.github.skippyall.minions.client.MinionsClient" - ], "main": [ "io.github.skippyall.minions.Minions" - ], - "server": [ - "io.github.skippyall.minions.server.MinionsServer" ] }, "mixins": [