diff --git a/gradle.properties b/gradle.properties index 09f66e2b..b3acd6b9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,12 +4,12 @@ org.gradle.jvmargs=-Xmx4G # Fabric Properties # check these on https://fabricmc.net/use -minecraft_version=24w21b -yarn_mappings=24w21b+build.5 +minecraft_version=1.21-pre2 +yarn_mappings=1.21-pre2+build.1 loader_version=0.15.11 # Fabric API -fabric_version=0.99.1+1.21 +fabric_version=0.99.2+1.21 maven_group = eu.pb4 @@ -17,6 +17,6 @@ mod_version = 0.9.0-alpha minecraft_version_supported = ">=1.20.5-" -packet_tweaker_version = 0.5.3+1.20.6 +packet_tweaker_version = 0.5.4-dev+1.20.6 is_stable = false diff --git a/polymer-common/src/main/java/eu/pb4/polymer/common/api/PolymerCommonUtils.java b/polymer-common/src/main/java/eu/pb4/polymer/common/api/PolymerCommonUtils.java index 248e6eb3..84391c0a 100644 --- a/polymer-common/src/main/java/eu/pb4/polymer/common/api/PolymerCommonUtils.java +++ b/polymer-common/src/main/java/eu/pb4/polymer/common/api/PolymerCommonUtils.java @@ -7,6 +7,7 @@ import eu.pb4.polymer.common.impl.compat.FloodGateUtils; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.network.ClientConnection; +import net.minecraft.network.listener.PacketListener; import net.minecraft.server.MinecraftServer; import net.minecraft.server.network.ServerCommonNetworkHandler; import net.minecraft.server.network.ServerPlayerEntity; @@ -117,6 +118,13 @@ public static void executeWithNetworkingLogic(Runnable runnable) { FORCE_NETWORKING.set(val); } + public static void executeWithNetworkingLogic(PacketListener listener, Runnable runnable) { + var val = FORCE_NETWORKING.get(); + FORCE_NETWORKING.set(Unit.INSTANCE); + PacketContext.runWithContext(listener, runnable); + FORCE_NETWORKING.set(val); + } + /** * Allows to execute code with selected player being returned for {@link PolymerCommonUtils#getPlayerContext()} * calls. Useful for custom packets using writeItemStack and similar methods. diff --git a/polymer-common/src/main/java/eu/pb4/polymer/common/impl/entity/FakeEntity.java b/polymer-common/src/main/java/eu/pb4/polymer/common/impl/entity/FakeEntity.java index dbe14ff4..5acfe7fc 100644 --- a/polymer-common/src/main/java/eu/pb4/polymer/common/impl/entity/FakeEntity.java +++ b/polymer-common/src/main/java/eu/pb4/polymer/common/impl/entity/FakeEntity.java @@ -8,6 +8,7 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.network.packet.Packet; import net.minecraft.network.listener.ClientPlayPacketListener; +import net.minecraft.server.network.EntityTrackerEntry; import net.minecraft.world.World; import org.jetbrains.annotations.ApiStatus; @@ -32,8 +33,8 @@ protected void writeCustomDataToNbt(NbtCompound nbt) { } @Override - public Packet createSpawnPacket() { - return null; + public Packet createSpawnPacket(EntityTrackerEntry entityTrackerEntry) { + return super.createSpawnPacket(entityTrackerEntry); } static { diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/api/item/PolymerHeadBlockItem.java b/polymer-core/src/main/java/eu/pb4/polymer/core/api/item/PolymerHeadBlockItem.java index 048215e2..94c16efd 100644 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/api/item/PolymerHeadBlockItem.java +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/api/item/PolymerHeadBlockItem.java @@ -3,7 +3,7 @@ import eu.pb4.polymer.core.api.block.PolymerHeadBlock; import eu.pb4.polymer.core.api.utils.PolymerUtils; import net.minecraft.block.Block; -import net.minecraft.client.item.TooltipType; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.ProfileComponent; import net.minecraft.item.BlockItem; diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/api/item/PolymerItem.java b/polymer-core/src/main/java/eu/pb4/polymer/core/api/item/PolymerItem.java index 3cb48633..69e6260e 100644 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/api/item/PolymerItem.java +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/api/item/PolymerItem.java @@ -3,7 +3,7 @@ import eu.pb4.polymer.core.api.utils.PolymerSyncedObject; import eu.pb4.polymer.core.impl.PolymerImplUtils; import net.minecraft.block.BlockState; -import net.minecraft.client.item.TooltipType; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.registry.RegistryWrapper; @@ -37,18 +37,6 @@ public interface PolymerItem extends PolymerSyncedObject { * @return Client-side ItemStack */ default ItemStack getPolymerItemStack(ItemStack itemStack, TooltipType tooltipType, RegistryWrapper.WrapperLookup lookup, @Nullable ServerPlayerEntity player) { - if (PolymerImplUtils.POLYMER_ITEM_CLASS_CACHE.getBoolean(this.getClass())) { - RegistryWrapper.WrapperLookup old = null; - if (player == null) { - old = PolymerImplUtils.WRAPPER_LOOKUP_PASSER.get(); - PolymerImplUtils.WRAPPER_LOOKUP_PASSER.set(lookup); - } - var x = this.getPolymerItemStack(itemStack, tooltipType, player); - if (player == null) { - PolymerImplUtils.WRAPPER_LOOKUP_PASSER.set(old); - } - return x; - } return PolymerItemUtils.createItemStack(itemStack, tooltipType, lookup, player); } @@ -96,14 +84,6 @@ default boolean handleMiningOnServer(ItemStack tool, BlockState targetBlock, Blo return false; } - /** - * @deprecated Replaced with PolymerItem#getPolymerItemStack(ItemStack, TooltipType, ServerPlayerEntity) - */ - @Deprecated(forRemoval = true) - default ItemStack getPolymerItemStack(ItemStack itemStack, TooltipType tooltipType, @Nullable ServerPlayerEntity player) { - return PolymerItemUtils.createItemStack(itemStack, tooltipType, player); - } - default boolean shouldStorePolymerItemStackCount() { return false; } diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/api/item/PolymerItemComponent.java b/polymer-core/src/main/java/eu/pb4/polymer/core/api/item/PolymerItemComponent.java deleted file mode 100644 index da6b318c..00000000 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/api/item/PolymerItemComponent.java +++ /dev/null @@ -1,11 +0,0 @@ -package eu.pb4.polymer.core.api.item; - -import eu.pb4.polymer.core.api.utils.PolymerObject; -import eu.pb4.polymer.core.api.utils.PolymerSyncedObject; -import net.minecraft.server.network.ServerPlayerEntity; - -public interface PolymerItemComponent extends PolymerObject { - default boolean canSyncRawToClient(ServerPlayerEntity player) { - return false; - } -} diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/api/item/PolymerItemUtils.java b/polymer-core/src/main/java/eu/pb4/polymer/core/api/item/PolymerItemUtils.java index e62d3b9f..072e2412 100644 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/api/item/PolymerItemUtils.java +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/api/item/PolymerItemUtils.java @@ -7,9 +7,9 @@ import eu.pb4.polymer.common.api.PolymerCommonUtils; import eu.pb4.polymer.common.api.events.BooleanEvent; import eu.pb4.polymer.common.api.events.FunctionEvent; -import eu.pb4.polymer.common.impl.CommonImplUtils; import eu.pb4.polymer.common.impl.CompatStatus; import eu.pb4.polymer.core.api.block.PolymerBlockUtils; +import eu.pb4.polymer.core.api.other.PolymerComponent; import eu.pb4.polymer.core.api.utils.PolymerUtils; import eu.pb4.polymer.core.impl.PolymerImpl; import eu.pb4.polymer.core.impl.PolymerImplUtils; @@ -17,19 +17,17 @@ import eu.pb4.polymer.core.impl.compat.polymc.PolyMcUtils; import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils; import eu.pb4.polymer.rsm.api.RegistrySyncUtils; -import it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet; -import net.minecraft.client.item.TooltipType; import net.minecraft.component.ComponentType; import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.*; import net.minecraft.item.BlockPredicatesChecker; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.item.trim.ArmorTrim; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtElement; import net.minecraft.nbt.NbtOps; -import net.minecraft.registry.DynamicRegistryManager; import net.minecraft.registry.Registries; import net.minecraft.registry.RegistryOps; import net.minecraft.registry.RegistryWrapper; @@ -45,7 +43,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.function.Predicate; public final class PolymerItemUtils { @@ -117,7 +114,6 @@ public final class PolymerItemUtils { HideableTooltip.of(DataComponentTypes.CAN_BREAK, BlockPredicatesChecker::withShowInTooltip), HideableTooltip.of(DataComponentTypes.CAN_PLACE_ON, BlockPredicatesChecker::withShowInTooltip) ); - private static final Set> UNSYNCED_COMPONENTS = new ObjectOpenCustomHashSet<>(CommonImplUtils.IDENTITY_HASH); private PolymerItemUtils() { } @@ -287,12 +283,13 @@ public static boolean isPolymerServerItem(ItemStack itemStack, @Nullable ServerP if (itemStack.getItem() instanceof PolymerItem) { return true; } + var ctx = PacketContext.get(); + if (player != null && ctx.getPlayer() != player) { + ctx = PacketContext.of(player); + } for (var x : itemStack.getComponentChanges().entrySet()) { - if (x.getValue() != null && x.getValue().isPresent() - && x.getValue().get() instanceof PolymerItemComponent c && c.canSyncRawToClient(player)) { - return false; - } else if (isPolymerComponent(x.getKey())) { + if (!PolymerComponent.canSync(x.getKey(), x.getValue().orElse(null), ctx)) { return true; } else if (x.getValue() != null && x.getValue().isPresent() && x.getValue().get() instanceof TransformingDataComponent t @@ -312,28 +309,6 @@ public static boolean isPolymerServerItem(ItemStack itemStack, @Nullable ServerP return ITEM_CHECK.invoke((x) -> x.test(itemStack)); } - public static ItemStack createMinimalItemStack(ItemStack itemStack, @Nullable ServerPlayerEntity player) { - return createMinimalItemStack(itemStack, findLookupWrapper(player), player); - } - - private static RegistryWrapper.WrapperLookup findLookupWrapper(ServerPlayerEntity player) { - RegistryWrapper.WrapperLookup lookup; - if (player != null) { - lookup = player.getRegistryManager(); - } else { - lookup = PacketContext.get().getRegistryWrapperLookup(); - - if (lookup == null) { - lookup = PolymerImplUtils.WRAPPER_LOOKUP_PASSER.get(); - - if (lookup == null) { - lookup = PolymerImplUtils.FALLBACK_LOOKUP; - } - } - } - return lookup; - } - /** * This method creates minimal representation of ItemStack * @@ -385,13 +360,8 @@ public static int getSafeColor(int inputColor) { * @return Client side ItemStack */ - public static ItemStack createItemStack(ItemStack itemStack, @Nullable ServerPlayerEntity player) { - return createItemStack(itemStack, PolymerUtils.getTooltipType(player), player); - } - - - public static ItemStack createItemStack(ItemStack itemStack, TooltipType tooltipContext, @Nullable ServerPlayerEntity player) { - return createItemStack(itemStack, tooltipContext, findLookupWrapper(player), player); + public static ItemStack createItemStack(ItemStack itemStack, RegistryWrapper.WrapperLookup lookup, @Nullable ServerPlayerEntity player) { + return createItemStack(itemStack, PolymerUtils.getTooltipType(player), lookup, player); } /** @@ -545,15 +515,20 @@ public static ItemWithMetadata getItemSafely(PolymerItem item, ItemStack stack, return getItemSafely(item, stack, player, PolymerBlockUtils.NESTED_DEFAULT_DISTANCE); } + /** + * @deprecated Use {@link PolymerComponent#registerDataComponent(ComponentType[])} instead + */ + @Deprecated public static void markAsPolymer(ComponentType... types) { - for (var x : types) { - UNSYNCED_COMPONENTS.add(x); - RegistrySyncUtils.setServerEntry(Registries.DATA_COMPONENT_TYPE, x); - } + PolymerComponent.registerDataComponent(types); } - + + /** + * @deprecated Use {@link PolymerComponent#isPolymerComponent(ComponentType)} instead + */ + @Deprecated public static boolean isPolymerComponent(ComponentType type) { - return UNSYNCED_COMPONENTS.add(type); + return PolymerComponent.isPolymerComponent(type); } public static ItemStack getClientItemStack(ItemStack stack, ServerPlayerEntity player) { @@ -590,19 +565,4 @@ interface TooltipSetter { T setTooltip(T val, boolean value); } } - - @Deprecated(forRemoval = true) - public static ItemStack getRealItemStack(ItemStack itemStack) { - return getRealItemStack(itemStack, findLookupWrapper(null)); - } - - @Deprecated(forRemoval = true) - public static ItemStack getPolymerItemStack(ItemStack itemStack, @Nullable ServerPlayerEntity player) { - return getPolymerItemStack(itemStack, PolymerUtils.getTooltipType(player), player); - } - - @Deprecated(forRemoval = true) - public static ItemStack getPolymerItemStack(ItemStack itemStack, TooltipType tooltipContext, @Nullable ServerPlayerEntity player) { - return getPolymerItemStack(itemStack, tooltipContext, findLookupWrapper(player), player); - } } diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/api/other/PolymerComponent.java b/polymer-core/src/main/java/eu/pb4/polymer/core/api/other/PolymerComponent.java new file mode 100644 index 00000000..85278766 --- /dev/null +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/api/other/PolymerComponent.java @@ -0,0 +1,40 @@ +package eu.pb4.polymer.core.api.other; + +import eu.pb4.polymer.core.api.utils.PolymerObject; +import eu.pb4.polymer.core.impl.other.PolymerComponentImpl; +import eu.pb4.polymer.rsm.api.RegistrySyncUtils; +import net.minecraft.component.ComponentType; +import net.minecraft.registry.Registries; +import xyz.nucleoid.packettweaker.PacketContext; + +public interface PolymerComponent extends PolymerObject { + static void registerDataComponent(ComponentType... types) { + for (var type : types) { + RegistrySyncUtils.setServerEntry(Registries.DATA_COMPONENT_TYPE, type); + PolymerComponentImpl.UNSYNCED_COMPONENTS.add(type); + } + } + + static void registerEnchantmentEffectComponent(ComponentType... types) { + for (var type : types) { + RegistrySyncUtils.setServerEntry(Registries.ENCHANTMENT_EFFECT_COMPONENT_TYPE, type); + PolymerComponentImpl.UNSYNCED_COMPONENTS.add(type); + } + } + + static boolean isPolymerComponent(ComponentType type) { + return PolymerComponentImpl.UNSYNCED_COMPONENTS.contains(type); + } + + static boolean canSync(ComponentType key, Object entry, PacketContext context) { + if (entry instanceof PolymerComponent component && component.canSyncRawToClient(context)) { + return true; + } + + return !isPolymerComponent(key); + } + + default boolean canSyncRawToClient(PacketContext context) { + return false; + } +} diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/api/other/PolymerEnchantment.java b/polymer-core/src/main/java/eu/pb4/polymer/core/api/other/PolymerEnchantment.java deleted file mode 100644 index e9001a15..00000000 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/api/other/PolymerEnchantment.java +++ /dev/null @@ -1,17 +0,0 @@ -package eu.pb4.polymer.core.api.other; - -import eu.pb4.polymer.core.api.utils.PolymerSyncedObject; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.server.network.ServerPlayerEntity; -import org.jetbrains.annotations.Nullable; - -/** - * Defaulted interface for Enchantments - */ -public interface PolymerEnchantment extends PolymerSyncedObject { - @Nullable - @Override - default Enchantment getPolymerReplacement(ServerPlayerEntity player) { - return null; - } -} diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/api/other/PolymerStat.java b/polymer-core/src/main/java/eu/pb4/polymer/core/api/other/PolymerStat.java index 1dc3f5f4..eb509ea0 100644 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/api/other/PolymerStat.java +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/api/other/PolymerStat.java @@ -1,6 +1,7 @@ package eu.pb4.polymer.core.api.other; import eu.pb4.polymer.core.api.utils.PolymerObject; +import eu.pb4.polymer.rsm.api.RegistrySyncUtils; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; import net.minecraft.stat.StatFormatter; @@ -11,13 +12,9 @@ import java.util.HashMap; import java.util.Map; -public final class PolymerStat extends Identifier implements PolymerObject { +public final class PolymerStat { private static final Map NAMES = new HashMap<>(); - private PolymerStat(String namespace, String path) { - super(namespace, path); - } - /** * Register a custom server-compatible statistic. * Registering a {@link net.minecraft.stat.Stat} in the vanilla way will cause clients to disconnect when opening the statistics screen. @@ -41,11 +38,12 @@ public static Identifier registerStat(String id, StatFormatter formatter) { */ public static Identifier registerStat(String id, Text name, StatFormatter formatter) { var idx = Identifier.of(id); - PolymerStat identifier = new PolymerStat(idx.getNamespace(), idx.getPath()); - Registry.register(Registries.CUSTOM_STAT, id, identifier); - Stats.CUSTOM.getOrCreateStat(identifier, formatter); - NAMES.put(identifier, name); - return identifier; + Registry.register(Registries.CUSTOM_STAT, idx, idx); + Stats.CUSTOM.getOrCreateStat(idx, formatter); + //noinspection unchecked + RegistrySyncUtils.setServerEntry((Registry) (Object) Registries.CUSTOM_STAT, (Object) idx); + NAMES.put(idx, name); + return idx; } /** diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/api/utils/PolymerUtils.java b/polymer-core/src/main/java/eu/pb4/polymer/core/api/utils/PolymerUtils.java index ec7031d7..6d42be3e 100644 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/api/utils/PolymerUtils.java +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/api/utils/PolymerUtils.java @@ -14,15 +14,14 @@ import eu.pb4.polymer.core.impl.networking.PacketPatcher; import eu.pb4.polymer.core.mixin.block.packet.ServerChunkLoadingManagerAccessor; import eu.pb4.polymer.core.mixin.entity.ServerWorldAccessor; -import eu.pb4.polymer.rsm.api.RegistrySyncUtils; import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.client.item.TooltipType; import net.minecraft.component.ComponentType; import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.ProfileComponent; import net.minecraft.entity.EntityType; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.network.packet.Packet; import net.minecraft.network.packet.s2c.play.InventoryS2CPacket; import net.minecraft.potion.Potion; diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/impl/Commands.java b/polymer-core/src/main/java/eu/pb4/polymer/core/impl/Commands.java index 3a6d489d..2f8d3b30 100644 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/impl/Commands.java +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/impl/Commands.java @@ -365,7 +365,7 @@ private static int stats(CommandContext context) throws Com Text title; - if (statObj instanceof PolymerStat stat1) { + if (statObj instanceof Identifier stat1) { title = PolymerStat.getName(stat1); } else if (statObj instanceof Item item) { title = item.getName(); diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/impl/PolymerImplUtils.java b/polymer-core/src/main/java/eu/pb4/polymer/core/impl/PolymerImplUtils.java index 9845e384..90be947a 100644 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/impl/PolymerImplUtils.java +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/impl/PolymerImplUtils.java @@ -21,7 +21,7 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; -import net.minecraft.client.item.TooltipType; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.NbtComponent; import net.minecraft.entity.Entity; @@ -50,7 +50,6 @@ public class PolymerImplUtils { public static final ThreadLocal WRAPPER_LOOKUP_PASSER = new ThreadLocal<>(); public static final Collection POLYMER_STATES = ((PolymerIdList) Block.STATE_IDS).polymer$getPolymerEntries(); - public static final Object2BooleanOpenCustomHashMap> POLYMER_ITEM_CLASS_CACHE = new Object2BooleanOpenCustomHashMap<>(CommonImplUtils.IDENTITY_HASH); public static final RegistryWrapper.WrapperLookup FALLBACK_LOOKUP = DynamicRegistryManager.of(Registries.REGISTRIES); public static Identifier id(String path) { @@ -307,8 +306,4 @@ public static void pickEntity(ServerPlayerEntity player, Entity entity) { } } } - - static { - POLYMER_ITEM_CLASS_CACHE.defaultReturnValue(true); - } } diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/impl/PolymerMod.java b/polymer-core/src/main/java/eu/pb4/polymer/core/impl/PolymerMod.java index 61644315..43232802 100644 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/impl/PolymerMod.java +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/impl/PolymerMod.java @@ -12,7 +12,7 @@ import eu.pb4.polymer.core.impl.networking.PolymerServerProtocolHandler; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.ModInitializer; -import net.minecraft.client.item.TooltipType; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.item.ItemStack; import net.minecraft.registry.Registries; import net.minecraft.server.network.ServerPlayNetworkHandler; @@ -39,17 +39,6 @@ public void onInitialize() { if (PolymerImpl.FORCE_STRICT_UPDATES) { PolymerBlockUtils.requireStrictBlockUpdates(); } - - ImplPolymerRegistryEvent.iterateAndRegister(Registries.ITEM, item -> { - if (item instanceof PolymerItem x && !PolymerImplUtils.POLYMER_ITEM_CLASS_CACHE.containsKey(item.getClass())) { - try { - var method = item.getClass().getMethod("getPolymerItemStack", ItemStack.class, TooltipType.class, ServerPlayerEntity.class); - PolymerImplUtils.POLYMER_ITEM_CLASS_CACHE.put(x.getClass(), method.getDeclaringClass() != PolymerItem.class); - } catch (NoSuchMethodException e) { - PolymerImplUtils.POLYMER_ITEM_CLASS_CACHE.put(x.getClass(), false); - } - } - }); } @Override public void onInitializeClient() { diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/impl/client/VirtualClientItem.java b/polymer-core/src/main/java/eu/pb4/polymer/core/impl/client/VirtualClientItem.java index 3cb682a9..fc834c42 100644 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/impl/client/VirtualClientItem.java +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/impl/client/VirtualClientItem.java @@ -4,7 +4,7 @@ import eu.pb4.polymer.core.api.client.ClientPolymerItem; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.client.item.TooltipType; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.component.DataComponentTypes; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/impl/networking/PolymerServerProtocolHandler.java b/polymer-core/src/main/java/eu/pb4/polymer/core/impl/networking/PolymerServerProtocolHandler.java index dd3485f0..47069c69 100644 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/impl/networking/PolymerServerProtocolHandler.java +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/impl/networking/PolymerServerProtocolHandler.java @@ -37,7 +37,7 @@ public static void register() { }); ServerMetadataKeys.setup(); - S2CPackets.SYNC_ENCHANTMENT.getNamespace(); + S2CPackets.SYNC_BLOCK.getNamespace(); C2SPackets.WORLD_PICK_BLOCK.getNamespace(); } diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/impl/networking/S2CPackets.java b/polymer-core/src/main/java/eu/pb4/polymer/core/impl/networking/S2CPackets.java index cac0934f..f75e8623 100644 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/impl/networking/S2CPackets.java +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/impl/networking/S2CPackets.java @@ -24,7 +24,6 @@ public class S2CPackets { public static final Identifier SYNC_BLOCK_ENTITY = id("sync/block_entities"); public static final Identifier SYNC_ITEM = id("sync/items"); public static final Identifier SYNC_FLUID = id("sync/fluid"); - public static final Identifier SYNC_ENCHANTMENT = id("sync/enchantments"); public static final Identifier SYNC_ENTITY = id("sync/entities"); public static final Identifier SYNC_STATUS_EFFECT= id("sync/status_effect"); public static final Identifier SYNC_VILLAGER_PROFESSION= id("sync/villager_profession"); @@ -63,7 +62,6 @@ public static CustomPayload.Id> registerList(Id public static final CustomPayload.Id> SYNC_TAGS_ID; public static final CustomPayload.Id> DEBUG_VALIDATE_STATES_ID; public static final CustomPayload.Id> SYNC_FLUID_ID; - public static final CustomPayload.Id> SYNC_ENCHANTMENT_ID; public static final CustomPayload.Id> SYNC_VILLAGER_PROFESSION_ID; public static final CustomPayload.Id> SYNC_BLOCK_ENTITY_ID; public static final CustomPayload.Id> SYNC_STATUS_EFFECT_ID; @@ -73,28 +71,27 @@ public static CustomPayload.Id> registerList(Id register(SYNC_FINISHED, PolymerSyncFinishedS2CPayload::new, 6); register(SYNC_CLEAR, PolymerSyncClearS2CPayload::new, 6); - SYNC_BLOCK_ID = registerList(SYNC_BLOCK, PolymerBlockEntry.CODEC,6, 7); - SYNC_BLOCKSTATE_ID = registerList(SYNC_BLOCKSTATE, PolymerBlockStateEntry.CODEC, 6); - SYNC_ITEM_ID = registerList(SYNC_ITEM, PolymerItemEntry.CODEC, 6); - SYNC_ENTITY_ID = registerList(SYNC_ENTITY, PolymerEntityEntry.CODEC,6); - SYNC_TAGS_ID = registerList(SYNC_TAGS, PolymerTagEntry.CODEC, 6); + SYNC_BLOCK_ID = registerList(SYNC_BLOCK, PolymerBlockEntry.CODEC,8); + SYNC_BLOCKSTATE_ID = registerList(SYNC_BLOCKSTATE, PolymerBlockStateEntry.CODEC, 8); + SYNC_ITEM_ID = registerList(SYNC_ITEM, PolymerItemEntry.CODEC, 8); + SYNC_ENTITY_ID = registerList(SYNC_ENTITY, PolymerEntityEntry.CODEC,8); + SYNC_TAGS_ID = registerList(SYNC_TAGS, PolymerTagEntry.CODEC, 8); DEBUG_VALIDATE_STATES_ID = registerList(DEBUG_VALIDATE_STATES, DebugBlockStateEntry.CODEC, 6); - SYNC_FLUID_ID = registerList(SYNC_FLUID, IdValueEntry.CODEC, 6); - SYNC_ENCHANTMENT_ID = registerList(SYNC_ENCHANTMENT, IdValueEntry.CODEC, 6); - SYNC_VILLAGER_PROFESSION_ID = registerList(SYNC_VILLAGER_PROFESSION, IdValueEntry.CODEC, 6); - SYNC_BLOCK_ENTITY_ID = registerList(SYNC_BLOCK_ENTITY, IdValueEntry.CODEC, 6); - SYNC_STATUS_EFFECT_ID = registerList(SYNC_STATUS_EFFECT, IdValueEntry.CODEC, 6); + SYNC_FLUID_ID = registerList(SYNC_FLUID, IdValueEntry.CODEC, 8); + SYNC_VILLAGER_PROFESSION_ID = registerList(SYNC_VILLAGER_PROFESSION, IdValueEntry.CODEC, 8); + SYNC_BLOCK_ENTITY_ID = registerList(SYNC_BLOCK_ENTITY, IdValueEntry.CODEC, 8); + SYNC_STATUS_EFFECT_ID = registerList(SYNC_STATUS_EFFECT, IdValueEntry.CODEC, 8); - register(SYNC_ITEM_GROUP_DEFINE, PolymerItemGroupDefineS2CPayload.CODEC,6); - register(SYNC_ITEM_GROUP_CONTENTS_CLEAR, PolymerItemGroupContentClearS2CPayload.CODEC, 6); - register(SYNC_ITEM_GROUP_REMOVE, PolymerItemGroupRemoveS2CPayload.CODEC,6); - register(SYNC_ITEM_GROUP_CONTENTS_ADD, PolymerItemGroupContentAddS2CPayload.CODEC,6); - register(SYNC_ITEM_GROUP_APPLY_UPDATE, PolymerItemGroupApplyUpdateS2CPayload::new, 6); + register(SYNC_ITEM_GROUP_DEFINE, PolymerItemGroupDefineS2CPayload.CODEC,8); + register(SYNC_ITEM_GROUP_CONTENTS_CLEAR, PolymerItemGroupContentClearS2CPayload.CODEC, 8); + register(SYNC_ITEM_GROUP_REMOVE, PolymerItemGroupRemoveS2CPayload.CODEC,8); + register(SYNC_ITEM_GROUP_CONTENTS_ADD, PolymerItemGroupContentAddS2CPayload.CODEC,8); + register(SYNC_ITEM_GROUP_APPLY_UPDATE, PolymerItemGroupApplyUpdateS2CPayload::new, 8); - register(WORLD_SET_BLOCK_UPDATE, PolymerBlockUpdateS2CPayload.CODEC,6); - register(WORLD_CHUNK_SECTION_UPDATE, PolymerSectionUpdateS2CPayload.CODEC, 6); - register(WORLD_ENTITY, PolymerEntityS2CPayload.CODEC, 6); + register(WORLD_SET_BLOCK_UPDATE, PolymerBlockUpdateS2CPayload.CODEC,8); + register(WORLD_CHUNK_SECTION_UPDATE, PolymerSectionUpdateS2CPayload.CODEC, 8); + register(WORLD_ENTITY, PolymerEntityS2CPayload.CODEC, 8); } } diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/impl/other/PolymerComponentImpl.java b/polymer-core/src/main/java/eu/pb4/polymer/core/impl/other/PolymerComponentImpl.java new file mode 100644 index 00000000..58c1300c --- /dev/null +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/impl/other/PolymerComponentImpl.java @@ -0,0 +1,11 @@ +package eu.pb4.polymer.core.impl.other; + +import eu.pb4.polymer.common.impl.CommonImplUtils; +import it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet; +import net.minecraft.component.ComponentType; + +import java.util.Set; + +public class PolymerComponentImpl { + public static final Set> UNSYNCED_COMPONENTS = new ObjectOpenCustomHashSet<>(CommonImplUtils.IDENTITY_HASH); +} diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/impl/other/PolymerTooltipType.java b/polymer-core/src/main/java/eu/pb4/polymer/core/impl/other/PolymerTooltipType.java index 70fe9533..00b59d7c 100644 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/impl/other/PolymerTooltipType.java +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/impl/other/PolymerTooltipType.java @@ -1,7 +1,7 @@ package eu.pb4.polymer.core.impl.other; -import net.minecraft.client.item.TooltipType; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.component.type.MapIdComponent; import net.minecraft.item.Item; import net.minecraft.item.map.MapState; diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/client/compat/emi_ItemStackMixin.java b/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/client/compat/emi_ItemStackMixin.java index 050206c5..46f711c5 100644 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/client/compat/emi_ItemStackMixin.java +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/client/compat/emi_ItemStackMixin.java @@ -8,7 +8,7 @@ import eu.pb4.polymer.core.impl.client.compat.CompatUtils; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.client.item.TooltipType; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.component.ComponentType; import net.minecraft.component.DataComponentTypes; import net.minecraft.entity.player.PlayerEntity; diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/client/item/ItemGroupMixin.java b/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/client/item/ItemGroupMixin.java index 9bf2926d..f63ef398 100644 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/client/item/ItemGroupMixin.java +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/client/item/ItemGroupMixin.java @@ -40,7 +40,6 @@ public abstract class ItemGroupMixin implements ClientItemGroupExtension { @Mutable @Shadow @Final private int column; - @Shadow public abstract void reloadSearchProvider(); @Unique private final List polymer$itemsGroup = new ArrayList<>(); @Unique private final List polymer$itemsSearch = new ArrayList<>(); @@ -51,8 +50,8 @@ public abstract class ItemGroupMixin implements ClientItemGroupExtension { private Object polymerCore$bypassServerSide(Object entry) { return entry instanceof InternalClientItemGroup ? ItemGroups.getDefaultTab() : entry; } - - @Inject(method = "updateEntries", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemGroup;reloadSearchProvider()V", shift = At.Shift.BEFORE), cancellable = true) + // todo fix + /*@Inject(method = "updateEntries", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemGroup;reloadSearchProvider()V", shift = At.Shift.BEFORE), cancellable = true) private void polymer$injectEntriesDynamic(ItemGroup.DisplayContext displayContext, CallbackInfo ci) { if (((Object) this) instanceof InternalClientItemGroup) { this.displayStacks.addAll(this.polymer$itemsGroup); @@ -60,9 +59,9 @@ public abstract class ItemGroupMixin implements ClientItemGroupExtension { this.reloadSearchProvider(); ci.cancel(); } - } + }*/ - @Inject(method = "updateEntries", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemGroup;reloadSearchProvider()V")) + @Inject(method = "updateEntries", at = @At("TAIL")) private void polymer$injectEntriesVanilla(ItemGroup.DisplayContext arg, CallbackInfo ci) { if (this.type == ItemGroup.Type.CATEGORY && ClientUtils.isClientThread()) { this.displayStacks.removeIf(PolymerImplUtils::removeFromItemGroup); @@ -73,13 +72,6 @@ public abstract class ItemGroupMixin implements ClientItemGroupExtension { } } - @Inject(method = "getIcon", at = @At(value = "INVOKE_ASSIGN", target = "Ljava/util/function/Supplier;get()Ljava/lang/Object;", shift = At.Shift.AFTER)) - private void polymer$wrapIcon(CallbackInfoReturnable cir) { - if (this.icon != null && this.icon.getItem() instanceof PolymerItem && !PolymerClientDecoded.checkDecode(this.icon.getItem())) { - this.icon = PolymerItemUtils.getPolymerItemStack(this.icon, PolymerTooltipType.BASIC, ClientUtils.getPlayer()); - } - } - @Override public void polymer$addStackGroup(ItemStack stack) { this.polymer$itemsGroup.add(stack); diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/client/rendering/BlockModelsMixin.java b/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/client/rendering/BlockModelsMixin.java index 03563577..1eca6aeb 100644 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/client/rendering/BlockModelsMixin.java +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/client/rendering/BlockModelsMixin.java @@ -8,6 +8,7 @@ import net.minecraft.block.Blocks; import net.minecraft.client.render.block.BlockModels; import net.minecraft.client.util.ModelIdentifier; +import net.minecraft.util.Identifier; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -20,7 +21,7 @@ public class BlockModelsMixin { @Inject(method = "getModelId(Lnet/minecraft/block/BlockState;)Lnet/minecraft/client/util/ModelIdentifier;", at = @At("HEAD"), cancellable = true, require = 0) private static void polymer$skipModels(BlockState state, CallbackInfoReturnable cir) { if (PolymerKeepModel.useServerModel(state.getBlock())) { - cir.setReturnValue(new ModelIdentifier("minecraft", "air", "")); + cir.setReturnValue(new ModelIdentifier(Identifier.of("minecraft", "air"), "")); } } diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/entity/EntitySpawnS2CPacketMixin.java b/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/entity/EntitySpawnS2CPacketMixin.java index 4bf5026a..09e605ce 100644 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/entity/EntitySpawnS2CPacketMixin.java +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/entity/EntitySpawnS2CPacketMixin.java @@ -14,6 +14,7 @@ import net.minecraft.entity.EntityType; import net.minecraft.network.PacketByteBuf; import net.minecraft.network.packet.s2c.play.EntitySpawnS2CPacket; +import net.minecraft.server.network.EntityTrackerEntry; import net.minecraft.util.collection.IndexedIterable; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; @@ -71,15 +72,15 @@ public class EntitySpawnS2CPacketMixin { return data; } - @Inject(method = "(Lnet/minecraft/entity/Entity;I)V", at = @At("TAIL")) - private void polymer$changePosition(Entity entity, int entityData, CallbackInfo ci) { + @Inject(method = "(Lnet/minecraft/entity/Entity;Lnet/minecraft/server/network/EntityTrackerEntry;I)V", at = @At("TAIL")) + private void polymer$changePosition(Entity entity, EntityTrackerEntry entityTrackerEntry, int entityData, CallbackInfo ci) { if (entity instanceof PolymerEntity virtualEntity) { - Vec3d vec3d = virtualEntity.getClientSidePosition(entity.getPos()); + Vec3d vec3d = virtualEntity.getClientSidePosition(entityTrackerEntry.getPos()); this.x = vec3d.x; this.y = vec3d.y; this.z = vec3d.z; - this.yaw = (byte)((int)(virtualEntity.getClientSideYaw(entity.getYaw()) * 256.0F / 360.0F)); - this.pitch = (byte)((int)(virtualEntity.getClientSidePitch(entity.getPitch()) * 256.0F / 360.0F)); + this.yaw = (byte)((int)(virtualEntity.getClientSideYaw(entityTrackerEntry.getYaw()) * 256.0F / 360.0F)); + this.pitch = (byte)((int)(virtualEntity.getClientSidePitch(entityTrackerEntry.getPitch()) * 256.0F / 360.0F)); } } diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/entity/EntityTrackerEntryMixin.java b/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/entity/EntityTrackerEntryMixin.java index 0c50d6f6..eb829d5c 100644 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/entity/EntityTrackerEntryMixin.java +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/entity/EntityTrackerEntryMixin.java @@ -56,7 +56,7 @@ public abstract class EntityTrackerEntryMixin { return obj; } - @Inject(method = "sendPackets", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;createSpawnPacket()Lnet/minecraft/network/packet/Packet;")) + @Inject(method = "sendPackets", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;createSpawnPacket(Lnet/minecraft/server/network/EntityTrackerEntry;)Lnet/minecraft/network/packet/Packet;")) private void polymer$sendPacketsBeforeSpawning(ServerPlayerEntity player, Consumer> sender, CallbackInfo ci) { if (this.entity instanceof PolymerEntity virtualEntity) { try { diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/item/ItemStackMixin.java b/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/item/ItemStackMixin.java index ed7b8f1e..9508b968 100644 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/item/ItemStackMixin.java +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/item/ItemStackMixin.java @@ -3,7 +3,7 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.llamalad7.mixinextras.sugar.Local; import eu.pb4.polymer.core.impl.other.PolymerTooltipType; -import net.minecraft.client.item.TooltipType; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -18,7 +18,7 @@ @Mixin(ItemStack.class) public class ItemStackMixin { - @ModifyExpressionValue(method = "getTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/item/TooltipType;isAdvanced()Z")) + @ModifyExpressionValue(method = "getTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/tooltip/TooltipType;isAdvanced()Z")) private boolean removeAdvanced(boolean original, @Local(ordinal = 0) TooltipType type) { return original && !(type instanceof PolymerTooltipType); } diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/item/StonecutterScreenHandlerMixin.java b/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/item/StonecutterScreenHandlerMixin.java index 259c7802..ec6ae00a 100644 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/item/StonecutterScreenHandlerMixin.java +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/item/StonecutterScreenHandlerMixin.java @@ -38,11 +38,11 @@ public class StonecutterScreenHandlerMixin { @Inject(method = "updateInput", at = @At("TAIL")) private void polymerCore$fixOrdering(Inventory input, ItemStack stack, CallbackInfo ci) { - if (!stack.isEmpty()) { + if (!stack.isEmpty() && this.polymerCore$player != null) { var list = new ArrayList<>(this.availableRecipes); list.sort(Comparator.comparing( - (recipe) -> PolymerItemUtils.getPolymerItemStack(recipe.value().getResult(this.world.getRegistryManager()), this.polymerCore$player).getTranslationKey() + (recipe) -> PolymerItemUtils.getPolymerItemStack(recipe.value().getResult(this.world.getRegistryManager()), this.world.getRegistryManager(), this.polymerCore$player).getTranslationKey() )); this.availableRecipes = list; } diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/other/ComponentMapMixin.java b/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/other/ComponentMapMixin.java new file mode 100644 index 00000000..8283bcfd --- /dev/null +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/other/ComponentMapMixin.java @@ -0,0 +1,47 @@ +package eu.pb4.polymer.core.mixin.other; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.serialization.Codec; +import eu.pb4.polymer.common.api.PolymerCommonUtils; +import eu.pb4.polymer.core.api.entity.PolymerEntityUtils; +import eu.pb4.polymer.core.api.item.PolymerItemUtils; +import eu.pb4.polymer.core.api.other.PolymerComponent; +import eu.pb4.polymer.core.impl.PolymerImplUtils; +import net.minecraft.component.ComponentMap; +import net.minecraft.component.ComponentType; +import net.minecraft.text.HoverEvent; +import net.minecraft.text.Text; +import net.minecraft.text.Texts; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyVariable; +import xyz.nucleoid.packettweaker.PacketContext; + +import java.util.IdentityHashMap; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; + +@Mixin(ComponentMap.class) +public abstract class ComponentMapMixin { + @ModifyVariable(method = "createCodecFromValueMap", at = @At("HEAD"), argsOnly = true) + private static Codec, Object>> patchCodec(Codec, Object>> codec) { + return codec.xmap(Function.identity(), content -> { // Encode + if (PolymerCommonUtils.isServerNetworkingThread()) { + var player = PacketContext.get(); + + var map = new IdentityHashMap, Object>(); + for (var key : content.keySet()) { + var entry = content.get(key); + if (PolymerComponent.canSync(key, entry, player)) { + map.put(key, entry); + } + } + + return map; + } + return content; + }); + } +} diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/other/ServerConfigurationNetworkHandlerMixin.java b/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/other/ServerConfigurationNetworkHandlerMixin.java index 060588fb..846edb43 100644 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/other/ServerConfigurationNetworkHandlerMixin.java +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/other/ServerConfigurationNetworkHandlerMixin.java @@ -3,8 +3,12 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import eu.pb4.polymer.common.api.PolymerCommonUtils; +import net.minecraft.network.ClientConnection; import net.minecraft.network.packet.Packet; import net.minecraft.registry.VersionedIdentifier; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.network.ConnectedClientData; +import net.minecraft.server.network.ServerCommonNetworkHandler; import net.minecraft.server.network.ServerConfigurationNetworkHandler; import net.minecraft.server.network.SynchronizeRegistriesTask; import org.spongepowered.asm.mixin.Mixin; @@ -14,10 +18,14 @@ import java.util.function.Consumer; @Mixin(ServerConfigurationNetworkHandler.class) -public class ServerConfigurationNetworkHandlerMixin { +public abstract class ServerConfigurationNetworkHandlerMixin extends ServerCommonNetworkHandler { + public ServerConfigurationNetworkHandlerMixin(MinecraftServer server, ClientConnection connection, ConnectedClientData clientData) { + super(server, connection, clientData); + } + @WrapOperation(method = "onSelectKnownPacks", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/network/SynchronizeRegistriesTask;onSelectKnownPacks(Ljava/util/List;Ljava/util/function/Consumer;)V")) private void wrapWithContext(SynchronizeRegistriesTask instance, List clientKnownPacks, Consumer> sender, Operation original) { - PolymerCommonUtils.executeWithNetworkingLogic(() -> { + PolymerCommonUtils.executeWithNetworkingLogic(this, () -> { original.call(instance, clientKnownPacks, sender); }); } diff --git a/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/other/StatisticsS2CPacketMixin.java b/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/other/StatisticsS2CPacketMixin.java index 18efe7a8..c144c9c6 100644 --- a/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/other/StatisticsS2CPacketMixin.java +++ b/polymer-core/src/main/java/eu/pb4/polymer/core/mixin/other/StatisticsS2CPacketMixin.java @@ -1,9 +1,11 @@ package eu.pb4.polymer.core.mixin.other; import eu.pb4.polymer.core.api.utils.PolymerObject; +import eu.pb4.polymer.rsm.api.RegistrySyncUtils; import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import net.minecraft.network.packet.s2c.play.StatisticsS2CPacket; +import net.minecraft.registry.Registry; import net.minecraft.stat.Stat; import net.minecraft.stat.Stats; import net.minecraft.util.Identifier; @@ -16,19 +18,19 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(StatisticsS2CPacket.class) -public class StatisticsS2CPacketMixin { +public abstract class StatisticsS2CPacketMixin { @Mutable @Shadow @Final private Object2IntMap> stats; + @Shadow public abstract boolean equals(Object par1); + @Inject(method = "(Lit/unimi/dsi/fastutil/objects/Object2IntMap;)V", at = @At("TAIL")) public void polymer$onWrite(Object2IntMap> stats, CallbackInfo ci) { + //noinspection RedundantSuppression this.stats = stats.object2IntEntrySet().stream().filter(statEntry -> { - if (statEntry.getKey().getType() == Stats.CUSTOM) { - Identifier key = (Identifier) statEntry.getKey().getValue(); - return !(key instanceof PolymerObject); - } - return true; + //noinspection unchecked,rawtypes + return !RegistrySyncUtils.isServerEntry((Registry) statEntry.getKey().getType().getRegistry(), statEntry.getKey().getValue()); }).collect(Object2IntOpenHashMap::new, (map, statEntry) -> map.addTo(statEntry.getKey(), statEntry.getIntValue()), Object2IntOpenHashMap::putAll); } } diff --git a/polymer-core/src/testmod/java/eu/pb4/polymertest/TestEntity3.java b/polymer-core/src/testmod/java/eu/pb4/polymertest/TestEntity3.java index c419b2ab..927d5473 100644 --- a/polymer-core/src/testmod/java/eu/pb4/polymertest/TestEntity3.java +++ b/polymer-core/src/testmod/java/eu/pb4/polymertest/TestEntity3.java @@ -146,11 +146,6 @@ public EntityType getPolymerEntityType(ServerPlayerEntity player) { return EntityType.ARMOR_STAND; } - @Override - public Packet createSpawnPacket() { - return new EntitySpawnS2CPacket(this); - } - @Override public void onEntityPacketSent(Consumer> consumer, Packet packet) { if (packet instanceof EntityPassengersSetS2CPacket passengersSetS2CPacket) { diff --git a/polymer-core/src/testmod/java/eu/pb4/polymertest/TestHelmetItem.java b/polymer-core/src/testmod/java/eu/pb4/polymertest/TestHelmetItem.java index e66d4bd7..d5271833 100644 --- a/polymer-core/src/testmod/java/eu/pb4/polymertest/TestHelmetItem.java +++ b/polymer-core/src/testmod/java/eu/pb4/polymertest/TestHelmetItem.java @@ -1,11 +1,12 @@ package eu.pb4.polymertest; import eu.pb4.polymer.core.api.item.PolymerItem; -import net.minecraft.client.item.TooltipType; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.component.DataComponentTypes; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.*; +import net.minecraft.registry.RegistryWrapper; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.Text; import net.minecraft.util.Hand; @@ -25,8 +26,8 @@ public Item getPolymerItem(ItemStack stack, ServerPlayerEntity player) { } @Override - public ItemStack getPolymerItemStack(ItemStack itemStack, TooltipType tooltipType, @Nullable ServerPlayerEntity player) { - var x = PolymerItem.super.getPolymerItemStack(itemStack, tooltipType, player); + public ItemStack getPolymerItemStack(ItemStack itemStack, TooltipType tooltipType, RegistryWrapper.WrapperLookup lookup, @Nullable ServerPlayerEntity player) { + var x = PolymerItem.super.getPolymerItemStack(itemStack, tooltipType, lookup, player); x.set(DataComponentTypes.RARITY, Rarity.EPIC); return x; } diff --git a/polymer-core/src/testmod/java/eu/pb4/polymertest/TestItem.java b/polymer-core/src/testmod/java/eu/pb4/polymertest/TestItem.java index 2824af3c..62c61ab0 100644 --- a/polymer-core/src/testmod/java/eu/pb4/polymertest/TestItem.java +++ b/polymer-core/src/testmod/java/eu/pb4/polymertest/TestItem.java @@ -2,7 +2,7 @@ import eu.pb4.polymer.core.api.item.PolymerItem; import eu.pb4.polymer.core.api.item.SimplePolymerItem; -import net.minecraft.client.item.TooltipType; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.component.DataComponentTypes; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; diff --git a/polymer-core/src/testmod/java/eu/pb4/polymertest/TestMod.java b/polymer-core/src/testmod/java/eu/pb4/polymertest/TestMod.java index 490bda6d..0b4c5f7a 100644 --- a/polymer-core/src/testmod/java/eu/pb4/polymertest/TestMod.java +++ b/polymer-core/src/testmod/java/eu/pb4/polymertest/TestMod.java @@ -509,14 +509,14 @@ public void onInitialize() { x.setPose(EntityPose.SLEEPING); x.networkHandler.sendPacket(new EntityTrackerUpdateS2CPacket(x.getId(), List.of(DataTracker.SerializedEntry.of(EntityTrackedData.POSE, EntityPose.SLEEPING)))); } else if (i.isOf(Items.CREEPER_HEAD)) { - var l = new ArrayList>(); + /*var l = new ArrayList>(); creep.setPos(x.getX(), x.getY() - 255, x.getZ()); - l.add(new EntitySpawnS2CPacket(creep)); + //l.add(new EntitySpawnS2CPacket(creep)); l.add(new SetCameraEntityS2CPacket(creep)); l.add(new EntitiesDestroyS2CPacket(creep.getId())); l.add(new PlayerRespawnS2CPacket(x.createCommonPlayerSpawnInfo(x.getServerWorld()), PlayerRespawnS2CPacket.KEEP_ALL)); - x.networkHandler.sendPacket(new BundleS2CPacket(l)); + x.networkHandler.sendPacket(new BundleS2CPacket(l));*/ } }); Thread.sleep(5); diff --git a/polymer-core/src/testmod/resources/data/minecraft/tags/blocks/wall_post_override.json b/polymer-core/src/testmod/resources/data/minecraft/tags/block/wall_post_override.json similarity index 100% rename from polymer-core/src/testmod/resources/data/minecraft/tags/blocks/wall_post_override.json rename to polymer-core/src/testmod/resources/data/minecraft/tags/block/wall_post_override.json diff --git a/polymer-core/src/testmod/resources/data/minecraft/tags/fluids/water.json b/polymer-core/src/testmod/resources/data/minecraft/tags/fluid/water.json similarity index 100% rename from polymer-core/src/testmod/resources/data/minecraft/tags/fluids/water.json rename to polymer-core/src/testmod/resources/data/minecraft/tags/fluid/water.json diff --git a/polymer-core/src/testmod/resources/data/minecraft/tags/items/enchantable/armor.json b/polymer-core/src/testmod/resources/data/minecraft/tags/item/enchantable/armor.json similarity index 100% rename from polymer-core/src/testmod/resources/data/minecraft/tags/items/enchantable/armor.json rename to polymer-core/src/testmod/resources/data/minecraft/tags/item/enchantable/armor.json diff --git a/polymer-core/src/testmod/resources/data/minecraft/tags/items/pickaxes.json b/polymer-core/src/testmod/resources/data/minecraft/tags/item/pickaxes.json similarity index 100% rename from polymer-core/src/testmod/resources/data/minecraft/tags/items/pickaxes.json rename to polymer-core/src/testmod/resources/data/minecraft/tags/item/pickaxes.json diff --git a/polymer-core/src/testmod/resources/data/minecraft/tags/items/trim_materials.json b/polymer-core/src/testmod/resources/data/minecraft/tags/item/trim_materials.json similarity index 100% rename from polymer-core/src/testmod/resources/data/minecraft/tags/items/trim_materials.json rename to polymer-core/src/testmod/resources/data/minecraft/tags/item/trim_materials.json diff --git a/polymer-core/src/testmod/resources/data/minecraft/tags/items/trimmable_armor.json b/polymer-core/src/testmod/resources/data/minecraft/tags/item/trimmable_armor.json similarity index 100% rename from polymer-core/src/testmod/resources/data/minecraft/tags/items/trimmable_armor.json rename to polymer-core/src/testmod/resources/data/minecraft/tags/item/trimmable_armor.json diff --git a/polymer-core/src/testmod/resources/data/polymertest/recipes/regular_test.json b/polymer-core/src/testmod/resources/data/polymertest/recipe/regular_test.json similarity index 100% rename from polymer-core/src/testmod/resources/data/polymertest/recipes/regular_test.json rename to polymer-core/src/testmod/resources/data/polymertest/recipe/regular_test.json diff --git a/polymer-core/src/testmod/resources/data/polymertest/recipes/regular_test2.json b/polymer-core/src/testmod/resources/data/polymertest/recipe/regular_test2.json similarity index 100% rename from polymer-core/src/testmod/resources/data/polymertest/recipes/regular_test2.json rename to polymer-core/src/testmod/resources/data/polymertest/recipe/regular_test2.json diff --git a/polymer-core/src/testmod/resources/data/polymertest/recipes/stone_slab_from_stone_stonecutting.json b/polymer-core/src/testmod/resources/data/polymertest/recipe/stone_slab_from_stone_stonecutting.json similarity index 100% rename from polymer-core/src/testmod/resources/data/polymertest/recipes/stone_slab_from_stone_stonecutting.json rename to polymer-core/src/testmod/resources/data/polymertest/recipe/stone_slab_from_stone_stonecutting.json diff --git a/polymer-core/src/testmod/resources/data/polymertest/recipes/tater.json b/polymer-core/src/testmod/resources/data/polymertest/recipe/tater.json similarity index 100% rename from polymer-core/src/testmod/resources/data/polymertest/recipes/tater.json rename to polymer-core/src/testmod/resources/data/polymertest/recipe/tater.json diff --git a/polymer-core/src/testmod/resources/data/polymertest/recipes/test.json b/polymer-core/src/testmod/resources/data/polymertest/recipe/test.json similarity index 100% rename from polymer-core/src/testmod/resources/data/polymertest/recipes/test.json rename to polymer-core/src/testmod/resources/data/polymertest/recipe/test.json diff --git a/polymer-virtual-entity/src/main/java/eu/pb4/polymer/virtualentity/api/attachment/ManualAttachment.java b/polymer-virtual-entity/src/main/java/eu/pb4/polymer/virtualentity/api/attachment/ManualAttachment.java index e9912632..6f121663 100644 --- a/polymer-virtual-entity/src/main/java/eu/pb4/polymer/virtualentity/api/attachment/ManualAttachment.java +++ b/polymer-virtual-entity/src/main/java/eu/pb4/polymer/virtualentity/api/attachment/ManualAttachment.java @@ -9,6 +9,11 @@ import java.util.function.Supplier; public record ManualAttachment(ElementHolder holder, ServerWorld world, Supplier posSupplier) implements HolderAttachment { + + public ManualAttachment { + holder.setAttachment(this); + } + @Override public void destroy() { if (this.holder.getAttachment() == this) { @@ -23,7 +28,7 @@ public Vec3d getPos() { @Override public ServerWorld getWorld() { - return null; + return this.world; } @Override