From afe820b70432cebf1bdef013181b6a380e94eb14 Mon Sep 17 00:00:00 2001 From: Sollace Date: Thu, 21 Jan 2021 10:41:28 +0200 Subject: [PATCH] Fixed issues whilst running on a dedicated server --- .../unicopia/item/toxin/Toxics.java | 2 +- .../unicopia/mixin/MixinItem.java | 11 --------- .../unicopia/mixin/MixinItems.java | 6 +++-- .../unicopia/mixin/client/MixinItem.java | 24 +++++++++++++++++++ .../unicopia/network/Channel.java | 17 +++++++++++-- .../unicopia/network/MsgPlayerAbility.java | 2 +- src/main/resources/unicopia.mixin.json | 1 + 7 files changed, 46 insertions(+), 17 deletions(-) create mode 100644 src/main/java/com/minelittlepony/unicopia/mixin/client/MixinItem.java diff --git a/src/main/java/com/minelittlepony/unicopia/item/toxin/Toxics.java b/src/main/java/com/minelittlepony/unicopia/item/toxin/Toxics.java index 32581f7b..c0729687 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/toxin/Toxics.java +++ b/src/main/java/com/minelittlepony/unicopia/item/toxin/Toxics.java @@ -51,7 +51,7 @@ public interface Toxics { Toxic toxic = new Toxic(action, type, lowerBound, upperbound); ToxicHolder holder = (ToxicHolder)target; holder.setToxic(toxic); - holder.setFood(Objects.requireNonNull(food, target.getName().toString() + " food")); + holder.setFood(Objects.requireNonNull(food, target.getTranslationKey() + " food")); return toxic; } diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinItem.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinItem.java index 534b5f59..6ad7ff4a 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinItem.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinItem.java @@ -1,26 +1,20 @@ package com.minelittlepony.unicopia.mixin; -import java.util.List; import java.util.Optional; -import javax.annotation.Nullable; - import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import com.minelittlepony.unicopia.item.toxin.Toxic; import com.minelittlepony.unicopia.item.toxin.ToxicHolder; -import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.LivingEntity; import net.minecraft.item.FoodComponent; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.text.Text; import net.minecraft.world.World; @Mixin(Item.class) @@ -42,11 +36,6 @@ abstract class MixinItem implements ToxicHolder { return toxic; } - @Inject(method = "appendTooltip", at = @At("RETURN")) - private void onAppendTooltip(ItemStack stack, @Nullable World world, List tooltip, TooltipContext context, CallbackInfo into) { - toxic.ifPresent(t -> tooltip.add(t.getTooltip(stack))); - } - @Inject(method = "finishUsing", at = @At("HEAD"), cancellable = true) private void finishUsing(ItemStack stack, World world, LivingEntity entity, CallbackInfoReturnable info) { if (getToxic().isPresent()) { diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinItems.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinItems.java index 938c9b0c..74a54b4f 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinItems.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinItems.java @@ -17,8 +17,10 @@ abstract class MixinItems { index = 1, argsOnly = true) private static Item modifyItem(Item item, Identifier id, Item itemAlso) { - if (VanillaOverrides.REGISTRY.containsId(id)) { - return VanillaOverrides.REGISTRY.get(id); + // Registry#containsId is client-only :thonkjang: + Item replacement = VanillaOverrides.REGISTRY.get(id); + if (replacement != null) { + return replacement; } return item; } diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinItem.java b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinItem.java new file mode 100644 index 00000000..dc202dca --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinItem.java @@ -0,0 +1,24 @@ +package com.minelittlepony.unicopia.mixin.client; + +import java.util.List; +import javax.annotation.Nullable; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import com.minelittlepony.unicopia.item.toxin.ToxicHolder; + +import net.minecraft.client.item.TooltipContext; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.text.Text; +import net.minecraft.world.World; + +@Mixin(Item.class) +abstract class MixinItem implements ToxicHolder { + @Inject(method = "appendTooltip", at = @At("RETURN")) + private void onAppendTooltip(ItemStack stack, @Nullable World world, List tooltip, TooltipContext context, CallbackInfo into) { + getToxic().ifPresent(t -> tooltip.add(t.getTooltip(stack))); + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/network/Channel.java b/src/main/java/com/minelittlepony/unicopia/network/Channel.java index dbcbb887..90ade34c 100644 --- a/src/main/java/com/minelittlepony/unicopia/network/Channel.java +++ b/src/main/java/com/minelittlepony/unicopia/network/Channel.java @@ -3,9 +3,11 @@ package com.minelittlepony.unicopia.network; import java.util.function.Function; import io.netty.buffer.Unpooled; +import net.fabricmc.api.EnvType; import net.fabricmc.fabric.api.network.ClientSidePacketRegistry; import net.fabricmc.fabric.api.network.PacketContext; import net.fabricmc.fabric.api.network.ServerSidePacketRegistry; +import net.fabricmc.loader.api.FabricLoader; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.util.Identifier; import net.minecraft.network.PacketByteBuf; @@ -14,6 +16,7 @@ public interface Channel { SPacketType> CLIENT_PLAYER_ABILITY = clientToServer(new Identifier("unicopia", "player_ability"), MsgPlayerAbility::new); SPacketType CLIENT_REQUEST_CAPABILITIES = clientToServer(new Identifier("unicopia", "request_capabilities"), MsgRequestCapabilities::new); + CPacketType SERVER_PLAYER_CAPABILITIES = serverToClient(new Identifier("unicopia", "player_capabilities"), MsgPlayerCapabilities::new); MPacketType SERVER_OTHER_PLAYER_CAPABILITIES = serverToClients(new Identifier("unicopia", "other_player_capabilities"), MsgOtherPlayerCapabilities::new); CPacketType SERVER_SPAWN_PROJECTILE = serverToClient(new Identifier("unicopia", "projectile_entity"), MsgSpawnProjectile::new); @@ -26,12 +29,16 @@ public interface Channel { } static MPacketType serverToClients(Identifier id, Function factory) { - ClientSidePacketRegistry.INSTANCE.register(id, (context, buffer) -> factory.apply(buffer).handleOnMain(context)); + if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) { + ClientSidePacketRegistry.INSTANCE.register(id, (context, buffer) -> factory.apply(buffer).handleOnMain(context)); + } return () -> id; } static CPacketType serverToClient(Identifier id, Function factory) { - ClientSidePacketRegistry.INSTANCE.register(id, (context, buffer) -> factory.apply(buffer).handleOnMain(context)); + if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) { + ClientSidePacketRegistry.INSTANCE.register(id, (context, buffer) -> factory.apply(buffer).handleOnMain(context)); + } return () -> id; } @@ -67,10 +74,16 @@ public interface Channel { Identifier getId(); default void send(T packet) { + if (FabricLoader.getInstance().getEnvironmentType() != EnvType.CLIENT) { + throw new RuntimeException("Client packet send called by the server"); + } ClientSidePacketRegistry.INSTANCE.sendToServer(getId(), packet.toBuffer()); } default net.minecraft.network.Packet toPacket(T packet) { + if (FabricLoader.getInstance().getEnvironmentType() != EnvType.CLIENT) { + throw new RuntimeException("Client packet send called by the server"); + } return ClientSidePacketRegistry.INSTANCE.toPacket(getId(), packet.toBuffer()); } } diff --git a/src/main/java/com/minelittlepony/unicopia/network/MsgPlayerAbility.java b/src/main/java/com/minelittlepony/unicopia/network/MsgPlayerAbility.java index 59d80b6f..d256a3a2 100644 --- a/src/main/java/com/minelittlepony/unicopia/network/MsgPlayerAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/network/MsgPlayerAbility.java @@ -17,7 +17,7 @@ public class MsgPlayerAbility implements Channel.Packet { @SuppressWarnings("unchecked") MsgPlayerAbility(PacketByteBuf buffer) { - power = (Ability) Abilities.REGISTRY.get(new Identifier(buffer.readString())); + power = (Ability) Abilities.REGISTRY.get(new Identifier(buffer.readString(32767))); data = power.getSerializer().fromBuffer(buffer); } diff --git a/src/main/resources/unicopia.mixin.json b/src/main/resources/unicopia.mixin.json index 53ec08a3..d1a43078 100644 --- a/src/main/resources/unicopia.mixin.json +++ b/src/main/resources/unicopia.mixin.json @@ -27,6 +27,7 @@ "client.MixinEntityRenderDispatcher", "client.MixinGameRenderer", "client.MixinInGameHud", + "client.MixinItem", "client.MixinItemModels", "client.MixinKeyboardInput", "client.MixinLightmapTextureManager",