I don't know...
This commit is contained in:
+1
-1
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -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,7 +41,6 @@ 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,
|
||||||
@@ -49,7 +48,6 @@ public class MoveModule {
|
|||||||
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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
"depends": {
|
"depends": {
|
||||||
"fabricloader": "*",
|
"fabricloader": "*",
|
||||||
"fabric": "*",
|
"fabric": "*",
|
||||||
"minecraft": "~1.21",
|
"minecraft": "~1.21.3",
|
||||||
"polymer-core": "*"
|
"polymer-core": "*"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user