I don't know...

This commit is contained in:
skippyall
2024-11-15 20:07:03 +01:00
parent 2f35493580
commit fc70b2fe5a
21 changed files with 179 additions and 139 deletions
+1 -1
View File
@@ -8,7 +8,7 @@ org.gradle.jvmargs=-Xmx1G
yarn_mappings=1.21.3+build.2 yarn_mappings=1.21.3+build.2
# Mod Properties # Mod Properties
mod_version = 0.0.1-SNAPSHOT mod_version = 0.1.1-SNAPSHOT
maven_group = io.github.skippyall maven_group = io.github.skippyall
archives_base_name = Minions archives_base_name = Minions
@@ -3,6 +3,7 @@ package io.github.skippyall.minions;
import eu.pb4.polymer.core.api.entity.PolymerEntityUtils; import eu.pb4.polymer.core.api.entity.PolymerEntityUtils;
import eu.pb4.polymer.core.api.item.SimplePolymerItem; import eu.pb4.polymer.core.api.item.SimplePolymerItem;
import io.github.skippyall.minions.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.fakeplayer.MinionFakePlayer;
import io.github.skippyall.minions.minion.MinionData;
import io.github.skippyall.minions.minion.MinionItem; import io.github.skippyall.minions.minion.MinionItem;
import io.github.skippyall.minions.minion.MinionPersistentState; import io.github.skippyall.minions.minion.MinionPersistentState;
import io.github.skippyall.minions.module.Modules; import io.github.skippyall.minions.module.Modules;
@@ -11,8 +12,11 @@ import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.registry.BuiltinRegistries;
import net.minecraft.registry.Registries; import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry; import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -23,8 +27,11 @@ import java.util.List;
public class Minions implements ModInitializer { public class Minions implements ModInitializer {
public static final String MOD_ID = "minions"; public static final String MOD_ID = "minions";
public static final MinionItem MINION_ITEM = Registry.register(Registries.ITEM, Identifier.of(MOD_ID, "minion"), new MinionItem(false));
public static final SimplePolymerItem BASIC_UPGRADE_BASE = Registry.register(Registries.ITEM, Identifier.of(MOD_ID, "basic_upgrade_base"), new SimplePolymerItem(new Item.Settings(), Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE)); 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 Logger LOGGER = LoggerFactory.getLogger(MOD_ID); public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
@@ -32,12 +39,13 @@ public class Minions implements ModInitializer {
@Override @Override
public void onInitialize() { public void onInitialize() {
MinionData.register();
LOGGER.debug("Add Customthing"); LOGGER.debug("Add Customthing");
PolymerEntityUtils.registerType(); PolymerEntityUtils.registerType();
ServerLifecycleEvents.SERVER_STARTED.register(server -> { ServerLifecycleEvents.SERVER_STARTED.register(server -> {
MinionPersistentState.create(server); MinionPersistentState.create(server);
MinionPersistentState.INSTANCE.getMinionData().forEach(data -> { MinionPersistentState.INSTANCE.getMinionData().forEach(data -> {
System.out.println("spawn Minion " + data.name); System.out.println("spawn Minion " + data.name());
MinionFakePlayer.spawnMinionAt(data, server.getOverworld(), null, null); MinionFakePlayer.spawnMinionAt(data, server.getOverworld(), null, null);
}); });
}); });
@@ -42,6 +42,7 @@ import net.minecraft.world.GameMode;
import net.minecraft.world.TeleportTarget; import net.minecraft.world.TeleportTarget;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
@@ -62,14 +63,14 @@ public class MinionFakePlayer extends ServerPlayerEntity {
MinecraftServer server = level.getServer(); MinecraftServer server = level.getServer();
CompletableFuture<GameProfile> future; CompletableFuture<GameProfile> future;
if(data.skinUuid != null) { if(data.skinUuid().isPresent()) {
future = MinionProfileUtils.getSkinOwnerProfile(server, data.skinUuid); future = MinionProfileUtils.getSkinOwnerProfile(server, data.skinUuid().get());
} else { } else {
future = MinionProfileUtils.lookupSkinOwnerProfile(server, data.name); future = MinionProfileUtils.lookupSkinOwnerProfile(server, data.name());
} }
future.thenAccept(skinProfile -> { future.thenAccept(skinProfile -> {
GameProfile profile = MinionProfileUtils.makeNewMinionProfile(null, data.name, skinProfile); GameProfile profile = MinionProfileUtils.makeNewMinionProfile(null, data.name(), skinProfile);
Minions.addExecuteOnNextTick(() -> { Minions.addExecuteOnNextTick(() -> {
MinionFakePlayer instance = new MinionFakePlayer(server, level, profile, SyncedClientOptions.createDefault()); MinionFakePlayer instance = new MinionFakePlayer(server, level, profile, SyncedClientOptions.createDefault());
if(skinProfile != null) { if(skinProfile != null) {
@@ -98,19 +99,16 @@ public class MinionFakePlayer extends ServerPlayerEntity {
MinecraftServer server = level.getServer(); MinecraftServer server = level.getServer();
CompletableFuture<GameProfile> future; CompletableFuture<GameProfile> future;
if(data.skinUuid != null) { if(data.skinUuid().isPresent()) {
future = MinionProfileUtils.getSkinOwnerProfile(server, data.skinUuid); future = MinionProfileUtils.getSkinOwnerProfile(server, data.skinUuid().get());
} else { } else {
future = MinionProfileUtils.lookupSkinOwnerProfile(server, data.name); future = MinionProfileUtils.lookupSkinOwnerProfile(server, data.name());
} }
future.thenAccept((skinProfile) -> { future.thenAccept((skinProfile) -> {
GameProfile profile = MinionProfileUtils.makeNewMinionProfile(data.uuid, data.name, skinProfile); GameProfile profile = MinionProfileUtils.makeNewMinionProfile(data.uuid(), data.name(), skinProfile);
Minions.addExecuteOnNextTick(() -> { Minions.addExecuteOnNextTick(() -> {
MinionFakePlayer instance = new MinionFakePlayer(server, level, profile, SyncedClientOptions.createDefault()); MinionFakePlayer instance = new MinionFakePlayer(server, level, profile, SyncedClientOptions.createDefault());
if (skinProfile != null) {
instance.skinUuid = skinProfile.getId();
}
if(pos != null && rot != null) { if(pos != null && rot != null) {
instance.fixStartingPosition = () -> instance.refreshPositionAndAngles(pos.x, pos.y, pos.z, rot.x, rot.y); instance.fixStartingPosition = () -> instance.refreshPositionAndAngles(pos.x, pos.y, pos.z, rot.x, rot.y);
} }
@@ -347,7 +345,7 @@ public class MinionFakePlayer extends ServerPlayerEntity {
return getGameProfile().getName(); return getGameProfile().getName();
} }
public UUID getSkinUuid() { public Optional<UUID> getSkinUuid() {
return skinUuid; return Optional.ofNullable(skinUuid);
} }
} }
@@ -1,14 +0,0 @@
package io.github.skippyall.minions.minion;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.minecraft.component.ComponentType;
public class MinionComponent {
/*public static final Codec<MinionComponent> CODEC = RecordCodecBuilder.create(instance ->
instance.group()
);
public static final ComponentType<MinionComponent> TYPE = ComponentType.<MinionComponent>builder().codec(CODEC).build();
*/
}
@@ -1,45 +1,57 @@
package io.github.skippyall.minions.minion; package io.github.skippyall.minions.minion;
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.fakeplayer.MinionFakePlayer;
import net.minecraft.component.ComponentType;
import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtCompound;
import net.minecraft.nbt.NbtOps;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.util.Identifier;
import net.minecraft.util.Uuids;
import org.jetbrains.annotations.NotNull;
import java.util.Optional;
import java.util.UUID; import java.util.UUID;
public class MinionData { public record MinionData(UUID uuid, String name, @NotNull Optional<UUID> skinUuid) {
public UUID uuid; public static final Codec<MinionData> CODEC = RecordCodecBuilder.create(instance ->
public String name; instance.group(
public UUID skinUuid; Uuids.CODEC.fieldOf("uuid").forGetter(MinionData::uuid),
Codec.STRING.fieldOf("name").forGetter(MinionData::name),
Uuids.CODEC.optionalFieldOf("skinUuid").orElse(Optional.empty()).forGetter(MinionData::skinUuid)
).apply(instance, MinionData::new)
);
public static final ComponentType<MinionData> COMPONENT = Registry.register(Registries.DATA_COMPONENT_TYPE, Identifier.of(Minions.MOD_ID, "minion_data"), ComponentType.<MinionData>builder().codec(CODEC).build());
public MinionData(UUID uuid, String name, UUID skinUuid) { public MinionData withUuid(UUID uuid) {
this.uuid = uuid; return new MinionData(uuid, name, skinUuid);
this.name = name; }
this.skinUuid = skinUuid;
public MinionData withName(String name) {
return new MinionData(uuid, name, skinUuid);
}
public MinionData withSkin(Optional<UUID> skinUuid) {
return new MinionData(uuid, name, skinUuid);
} }
public NbtCompound writeNbt() { public NbtCompound writeNbt() {
NbtCompound nbt = new NbtCompound(); return (NbtCompound) MinionData.CODEC.encode(this, NbtOps.INSTANCE, null).getOrThrow();
nbt.putUuid("uuid", uuid);
nbt.putString("name", name);
if(skinUuid != null) {
nbt.putUuid("skinUuid", skinUuid);
}
return nbt;
} }
public static MinionData readNbt(NbtCompound nbt) { public static MinionData readNbt(NbtCompound nbt) {
UUID uuid = nbt.getUuid("uuid"); return MinionData.CODEC.decode(NbtOps.INSTANCE, nbt).getOrThrow().getFirst();
String name = nbt.getString("name");
UUID skinUuid = null;
if(nbt.contains("skinUuid")) {
skinUuid = nbt.getUuid("skinUuid");
}
return new MinionData(uuid, name, skinUuid);
} }
public static MinionData fromMinion(MinionFakePlayer minion) { public static MinionData fromMinion(MinionFakePlayer minion) {
return new MinionData(minion.getUuid(), minion.getMinionName(), minion.getSkinUuid()); return new MinionData(minion.getUuid(), minion.getMinionName(), minion.getSkinUuid());
} }
public static void register() {
PolymerComponent.registerDataComponent(COMPONENT);
}
} }
@@ -10,9 +10,6 @@ import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUsageContext; import net.minecraft.item.ItemUsageContext;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.item.tooltip.TooltipType; import net.minecraft.item.tooltip.TooltipType;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.nbt.NbtElement;
import net.minecraft.registry.RegistryWrapper;
import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.server.world.ServerWorld; import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResult;
@@ -20,11 +17,13 @@ import net.minecraft.util.math.Vec2f;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import xyz.nucleoid.packettweaker.PacketContext; import xyz.nucleoid.packettweaker.PacketContext;
import java.util.Optional;
public class MinionItem extends Item implements PolymerItem { public class MinionItem extends Item implements PolymerItem {
private final boolean canProgram; private final boolean canProgram;
public MinionItem(boolean canProgram) { public MinionItem(Settings settings, boolean canProgram) {
super(new Item.Settings()); super(settings);
this.canProgram = canProgram; this.canProgram = canProgram;
} }
@@ -53,13 +52,13 @@ public class MinionItem extends Item implements PolymerItem {
MinionData data = getData(context.getStack()); MinionData data = getData(context.getStack());
if(data == null) { if(data == null) {
data = new MinionData(null, name, null); data = new MinionData(null, name, Optional.empty());
} }
if (data.uuid == null) { 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), 0, 0);
}else { }else {
data.name = name; data = data.withName(name);
MinionFakePlayer.spawnMinionAt(data, (ServerWorld) context.getWorld(), context.getBlockPos().toCenterPos().add(0,0.5,0), new Vec2f(0, 0)); MinionFakePlayer.spawnMinionAt(data, (ServerWorld) context.getWorld(), context.getBlockPos().toCenterPos().add(0,0.5,0), new Vec2f(0, 0));
MinionPersistentState.INSTANCE.addMinion(data); MinionPersistentState.INSTANCE.addMinion(data);
} }
@@ -69,18 +68,12 @@ public class MinionItem extends Item implements PolymerItem {
} }
public static void setData(MinionData data, ItemStack item) { public static void setData(MinionData data, ItemStack item) {
NbtCompound nbt = item.getOrDefault(DataComponentTypes.CUSTOM_DATA, NbtComponent.DEFAULT).copyNbt(); item.set(MinionData.COMPONENT, data);
nbt.put("data", data.writeNbt());
item.set(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(nbt));
} }
@Nullable @Nullable
public static MinionData getData(ItemStack item) { public static MinionData getData(ItemStack item) {
NbtCompound nbt = item.getOrDefault(DataComponentTypes.CUSTOM_DATA, NbtComponent.DEFAULT).copyNbt(); return item.get(MinionData.COMPONENT);
if (nbt.getType("data") == NbtElement.COMPOUND_TYPE) {
return MinionData.readNbt(nbt.getCompound("data"));
}
return null;
} }
public static boolean containsData(ItemStack item) { public static boolean containsData(ItemStack item) {
@@ -18,7 +18,8 @@ public class MinionPersistentState extends PersistentState {
public static MinionPersistentState INSTANCE; public static MinionPersistentState INSTANCE;
private List<MinionData> minionData = new ArrayList<>(); private final List<MinionData> minionData = new ArrayList<>();
private final List<UUID> minionUuids = new ArrayList<>();
@Override @Override
public NbtCompound writeNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup registryLookup) { public NbtCompound writeNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup registryLookup) {
@@ -27,6 +28,14 @@ public class MinionPersistentState extends PersistentState {
list.add(data.writeNbt()); list.add(data.writeNbt());
} }
nbt.put("minions", list); nbt.put("minions", list);
NbtList uuids = new NbtList();
for(UUID uuid : minionUuids) {
NbtCompound compound = new NbtCompound();
compound.putUuid("uuid", uuid);
uuids.add(compound);
}
nbt.put("uuids", uuids);
return nbt; return nbt;
} }
@@ -36,15 +45,26 @@ public class MinionPersistentState extends PersistentState {
for(NbtElement element : list) { for(NbtElement element : list) {
instance.addMinion(MinionData.readNbt((NbtCompound) element)); instance.addMinion(MinionData.readNbt((NbtCompound) element));
} }
NbtList uuids = compound.getList("uuids", NbtElement.COMPOUND_TYPE);
for(NbtElement element : list) {
instance.minionUuids.add(((NbtCompound) element).getUuid("uuid"));
}
return instance; return instance;
} }
public void addMinionUUID(UUID uuid) {
if(!minionUuids.contains(uuid)) {
minionUuids.add(uuid);
}
}
public void addMinion(MinionFakePlayer minion) { public void addMinion(MinionFakePlayer minion) {
addMinion(MinionData.fromMinion(minion)); addMinion(MinionData.fromMinion(minion));
} }
public void addMinion(MinionData data) { public void addMinion(MinionData data) {
System.out.println("add Minion " + data.name); System.out.println("add Minion " + data.name());
minionData.add(data); minionData.add(data);
markDirty(); markDirty();
} }
@@ -56,7 +76,7 @@ public class MinionPersistentState extends PersistentState {
public void removeMinion(UUID minionUUID) { public void removeMinion(UUID minionUUID) {
MinionData removal = null; MinionData removal = null;
for (MinionData data : minionData) { for (MinionData data : minionData) {
if (data.uuid.equals(minionUUID)) { if (data.uuid().equals(minionUUID)) {
removal = data; removal = data;
} }
} }
@@ -70,6 +90,10 @@ public class MinionPersistentState extends PersistentState {
return minionData; return minionData;
} }
public boolean isMinion(UUID uuid) {
return minionUuids.contains(uuid);
}
public static void create(MinecraftServer server) { public static void create(MinecraftServer server) {
INSTANCE = server.getWorld(World.OVERWORLD).getPersistentStateManager().getOrCreate(TYPE, "minion"); INSTANCE = server.getWorld(World.OVERWORLD).getPersistentStateManager().getOrCreate(TYPE, "minion");
} }
@@ -61,11 +61,20 @@ public class MinionProfileUtils {
} }
public static GameProfile makeNewMinionProfile(@Nullable UUID uuidMinion, String username, @Nullable GameProfile skinProfile) { public static GameProfile makeNewMinionProfile(@Nullable UUID uuidMinion, String username, @Nullable GameProfile skinProfile) {
GameProfile newProfile = new GameProfile(uuidMinion != null ? uuidMinion : UUID.randomUUID(), username); if(uuidMinion == null) {
uuidMinion = UUID.randomUUID();
}
MinionPersistentState.INSTANCE.addMinionUUID(uuidMinion);
GameProfile newProfile = new GameProfile(uuidMinion, username);
if (skinProfile != null) { if (skinProfile != null) {
newProfile.getProperties().putAll(skinProfile.getProperties()); newProfile.getProperties().putAll(skinProfile.getProperties());
} }
LOGGER.info("Minion Profile: {}", newProfile); LOGGER.info("Minion Profile: {}", newProfile);
return newProfile; return newProfile;
} }
public static boolean isMinion(UUID uuid) {
return MinionPersistentState.INSTANCE.isMinion(uuid);
}
} }
@@ -10,7 +10,7 @@ import org.spongepowered.asm.mixin.injection.ModifyArg;
@Mixin(PlayerListS2CPacket.Entry.class) @Mixin(PlayerListS2CPacket.Entry.class)
public class PlayerListEntryS2CPacket$EntryMixin { public class PlayerListEntryS2CPacket$EntryMixin {
@ModifyArg(method = "<init>(Lnet/minecraft/server/network/ServerPlayerEntity;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/packet/s2c/play/PlayerListS2CPacket$Entry;<init>(Ljava/util/UUID;Lcom/mojang/authlib/GameProfile;ZILnet/minecraft/world/GameMode;Lnet/minecraft/text/Text;Lnet/minecraft/network/encryption/PublicPlayerSession$Serialized;)V")) @ModifyArg(method = "<init>(Lnet/minecraft/server/network/ServerPlayerEntity;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/packet/s2c/play/PlayerListS2CPacket$Entry;<init>(Ljava/util/UUID;Lcom/mojang/authlib/GameProfile;ZILnet/minecraft/world/GameMode;Lnet/minecraft/text/Text;ILnet/minecraft/network/encryption/PublicPlayerSession$Serialized;)V"))
private static boolean removeMinionFromTabList(boolean original, @Local(argsOnly = true) ServerPlayerEntity player) { private static boolean removeMinionFromTabList(boolean original, @Local(argsOnly = true) ServerPlayerEntity player) {
if(player instanceof MinionFakePlayer) { if(player instanceof MinionFakePlayer) {
return false; return false;
@@ -13,10 +13,10 @@ import static io.github.skippyall.minions.module.Modules.register;
public class ChatModule { public class ChatModule {
public static final SimpleModuleItem CHAT_MODULE = register(Identifier.of(Minions.MOD_ID, "chat_module"), public static final SimpleModuleItem CHAT_MODULE = register(Identifier.of(Minions.MOD_ID, "chat_module"),
new SimpleModuleItem(new ArrayList<>(), Arrays.asList( new ArrayList<>(), Arrays.asList(
new SimpleCommand(Text.of("Message"), Text.of("Send Message in Public Chat"), Items.PAPER, (player, minion) -> minion.getServer().getPlayerManager().broadcast(Text.of("message"), true)), new SimpleCommand(Text.of("Message"), Text.of("Send Message in Public Chat"), Items.PAPER, (player, minion) -> minion.getServer().getPlayerManager().broadcast(Text.of("message"), true)),
new SimpleCommand(Text.of("Prvt-Message"), Text.of("Send Message to one Person"), Items.TRIAL_KEY, (player, minion) -> {}) new SimpleCommand(Text.of("Prvt-Message"), Text.of("Send Message to one Person"), Items.TRIAL_KEY, (player, minion) -> {})
), Items.PAPER)); ), Items.PAPER);
public static void registerMe() {} public static void registerMe() {}
} }
@@ -0,0 +1,28 @@
package io.github.skippyall.minions.module;
import io.github.skippyall.minions.Minions;
import io.github.skippyall.minions.command.SimpleCommand;
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 InteractModule {
/*public static final SimpleCommand INTERACT_COMMAND =
new SimpleCommand(
Text.translatable()
)
public static final SimpleModuleItem INTERACT_MODULE = register(
Identifier.of(Minions.MOD_ID, "interact_module"),
new SimpleModuleItem(
List.of(),
List.of(),
Items.LEVER
)
);*/
}
@@ -13,7 +13,9 @@ public class MobSpawningModule {
public static final SimpleModuleItem MOB_SPAWNING_MODULE = public static final SimpleModuleItem MOB_SPAWNING_MODULE =
register( register(
Identifier.of(Minions.MOD_ID, "mob_spawning_module"), Identifier.of(Minions.MOD_ID, "mob_spawning_module"),
new SimpleModuleItem(List.of(), List.of(), Items.SPAWNER) List.of(),
List.of(),
Items.SPAWNER
); );
public static boolean canMinionSpawnMobs(MinionFakePlayer minion) { public static boolean canMinionSpawnMobs(MinionFakePlayer minion) {
@@ -1,10 +1,16 @@
package io.github.skippyall.minions.module; package io.github.skippyall.minions.module;
import io.github.skippyall.minions.command.Command;
import io.github.skippyall.minions.program.block.CodeBlock;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.registry.Registries; import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry; import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import java.util.List;
public class Modules { public class Modules {
public static void register() { public static void register() {
ChatModule.registerMe(); ChatModule.registerMe();
@@ -16,4 +22,8 @@ public class Modules {
public static <T extends Item & ModuleItem> T register(Identifier id, T item) { public static <T extends Item & ModuleItem> T register(Identifier id, T item) {
return Registry.register(Registries.ITEM, id, item); return Registry.register(Registries.ITEM, id, item);
} }
public static SimpleModuleItem register(Identifier id, List<CodeBlock<?,?>> codeBlocks, List<Command> commands, Item vanillaItem) {
return Registry.register(Registries.ITEM, id, new SimpleModuleItem(codeBlocks, commands, new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, id)), vanillaItem));
}
} }
@@ -27,14 +27,12 @@ public class MountModule {
public static final SimpleModuleItem MOUNT_MODULE = public static final SimpleModuleItem MOUNT_MODULE =
register(Identifier.of(Minions.MOD_ID, "mount_module"), register(Identifier.of(Minions.MOD_ID, "mount_module"),
new SimpleModuleItem( List.of(),
List.of(), List.of(
List.of( MOUNT_COMMAND,
MOUNT_COMMAND, DISMOUNT_COMMAND
DISMOUNT_COMMAND ),
), Items.MINECART
Items.MINECART
)
); );
public static void registerMe() { public static void registerMe() {
@@ -41,15 +41,13 @@ public class MoveModule {
public static final SimpleModuleItem MOVE_MODULE = public static final SimpleModuleItem MOVE_MODULE =
register(Identifier.of(Minions.MOD_ID, "move_module"), register(Identifier.of(Minions.MOD_ID, "move_module"),
new SimpleModuleItem( List.of(),
List.of(), List.of(
List.of( WALK_COMMAND,
WALK_COMMAND, TURN_RIGHT_COMMAND,
TURN_RIGHT_COMMAND, TURN_LEFT_COMMAND
TURN_LEFT_COMMAND ),
), Items.IRON_BOOTS
Items.IRON_BOOTS
)
); );
public static void registerMe() {} public static void registerMe() {}
@@ -14,8 +14,8 @@ public class SimpleModuleItem extends Item implements PolymerItem, ModuleItem {
private final List<Command> commands; private final List<Command> commands;
private final Item vanillaItem; private final Item vanillaItem;
public SimpleModuleItem(List<CodeBlock<?,?>> codeBlocks, List<Command> commands, Item vanillaItem) { public SimpleModuleItem(List<CodeBlock<?,?>> codeBlocks, List<Command> commands, Settings settings, Item vanillaItem) {
super(new Item.Settings().maxCount(1)); super(settings.maxCount(1));
this.codeBlocks = codeBlocks; this.codeBlocks = codeBlocks;
this.commands = commands; this.commands = commands;
this.vanillaItem = vanillaItem; this.vanillaItem = vanillaItem;
@@ -6,15 +6,9 @@
"RGR" "RGR"
], ],
"key": { "key": {
"R": { "R": "minecraft:redstone_block",
"item":"minecraft:redstone_block" "G": "minecraft:gold_ingot",
}, "D": "minecraft:diamond_block"
"G": {
"item": "minecraft:gold_ingot"
},
"D": {
"item": "minecraft:diamond_block"
}
}, },
"result": { "result": {
"id": "minions:basic_upgrade_base", "id": "minions:basic_upgrade_base",
@@ -6,18 +6,10 @@
" L " " L "
], ],
"key": { "key": {
"H": { "H": "#minecraft:skulls",
"tag": "minecraft:skulls" "R": "minecraft:redstone_torch",
}, "A": "minecraft:armor_stand",
"R": { "L": "minecraft:lodestone"
"item": "minecraft:redstone_torch"
},
"A": {
"item": "minecraft:armor_stand"
},
"L": {
"item":"minecraft:lodestone"
}
}, },
"result": { "result": {
"id": "minions:minion", "id": "minions:minion",
@@ -1,14 +1,8 @@
{ {
"type": "minecraft:smithing_transform", "type": "minecraft:smithing_transform",
"base": { "base": "minions:basic_upgrade_base",
"item": "minions:basic_upgrade_base" "addition": "minecraft:minecart",
}, "template": "minecraft:netherite_upgrade_smithing_template",
"addition": {
"item": "minecraft:minecart"
},
"template": {
"item": "minecraft:netherite_upgrade_smithing_template"
},
"result": { "result": {
"id": "minions:mount_module" "id": "minions:mount_module"
} }
@@ -1,14 +1,8 @@
{ {
"type": "minecraft:smithing_transform", "type": "minecraft:smithing_transform",
"base": { "base": "minions:basic_upgrade_base",
"item": "minions:basic_upgrade_base" "addition": "minecraft:iron_boots",
}, "template": "minecraft:netherite_upgrade_smithing_template",
"addition": {
"item": "minecraft:iron_boots"
},
"template": {
"item": "minecraft:netherite_upgrade_smithing_template"
},
"result": { "result": {
"id": "minions:move_module" "id": "minions:move_module"
} }
+1 -1
View File
@@ -28,7 +28,7 @@
"depends": { "depends": {
"fabricloader": "*", "fabricloader": "*",
"fabric": "*", "fabric": "*",
"minecraft": "~1.21", "minecraft": "~1.21.3",
"polymer-core": "*" "polymer-core": "*"
} }
} }