From 193be50df8dfa5d6294c3b1a93dbe5cad1895a36 Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Sat, 19 Nov 2022 18:01:22 +0000 Subject: [PATCH] Remove a mixin. --- .../src/main/java/reborncore/RebornCore.java | 3 + .../common/screen/BuiltScreenHandler.java | 6 +- ...ServerPlayerEntityScreenHandlerHelper.java | 59 +++++++++++++++++++ .../mixin/common/MixinServerPlayerEntity.java | 18 ------ .../ServerPlayerEntityScreenHandler.java | 8 --- .../resources/reborncore.common.mixins.json | 3 +- 6 files changed, 65 insertions(+), 32 deletions(-) create mode 100644 RebornCore/src/main/java/reborncore/common/screen/ServerPlayerEntityScreenHandlerHelper.java delete mode 100644 RebornCore/src/main/java/reborncore/mixin/common/MixinServerPlayerEntity.java delete mode 100644 RebornCore/src/main/java/reborncore/mixin/ifaces/ServerPlayerEntityScreenHandler.java diff --git a/RebornCore/src/main/java/reborncore/RebornCore.java b/RebornCore/src/main/java/reborncore/RebornCore.java index b44401b48..0c3a64333 100644 --- a/RebornCore/src/main/java/reborncore/RebornCore.java +++ b/RebornCore/src/main/java/reborncore/RebornCore.java @@ -55,6 +55,7 @@ import reborncore.common.network.ServerBoundPackets; import reborncore.common.powerSystem.PowerAcceptorBlockEntity; import reborncore.common.powerSystem.PowerSystem; import reborncore.common.recipes.PaddedShapedRecipe; +import reborncore.common.screen.ServerPlayerEntityScreenHandlerHelper; import reborncore.common.util.CalenderUtils; import reborncore.common.util.GenericWrenchHelper; import team.reborn.energy.api.EnergyStorage; @@ -135,6 +136,8 @@ public class RebornCore implements ModInitializer { } return null; }); + + ServerPlayerEntityScreenHandlerHelper.class.getName(); } public static EnvType getSide() { diff --git a/RebornCore/src/main/java/reborncore/common/screen/BuiltScreenHandler.java b/RebornCore/src/main/java/reborncore/common/screen/BuiltScreenHandler.java index 89d92074e..eca558171 100644 --- a/RebornCore/src/main/java/reborncore/common/screen/BuiltScreenHandler.java +++ b/RebornCore/src/main/java/reborncore/common/screen/BuiltScreenHandler.java @@ -44,7 +44,6 @@ import reborncore.common.network.ClientBoundPackets; import reborncore.common.network.NetworkManager; import reborncore.common.util.ItemUtils; import reborncore.common.util.RangeUtil; -import reborncore.mixin.ifaces.ServerPlayerEntityScreenHandler; import java.util.HashMap; import java.util.List; @@ -161,9 +160,8 @@ public class BuiltScreenHandler extends ScreenHandler { return; } - if (screenHandlerListener instanceof ServerPlayerEntityScreenHandler serverPlayerEntityScreenHandler) { - NetworkManager.sendToPlayer(ClientBoundPackets.createPacketSendObject(screenHandler, updatedValues), serverPlayerEntityScreenHandler.rc_getServerPlayerEntity()); - } + ServerPlayerEntityScreenHandlerHelper.getServerPlayerEntity(screenHandlerListener) + .ifPresent(serverPlayerEntity -> NetworkManager.sendToPlayer(ClientBoundPackets.createPacketSendObject(screenHandler, updatedValues), serverPlayerEntity)); } @Override diff --git a/RebornCore/src/main/java/reborncore/common/screen/ServerPlayerEntityScreenHandlerHelper.java b/RebornCore/src/main/java/reborncore/common/screen/ServerPlayerEntityScreenHandlerHelper.java new file mode 100644 index 000000000..dedba3ebb --- /dev/null +++ b/RebornCore/src/main/java/reborncore/common/screen/ServerPlayerEntityScreenHandlerHelper.java @@ -0,0 +1,59 @@ +/* + * This file is part of RebornCore, licensed under the MIT License (MIT). + * + * Copyright (c) 2021 TeamReborn + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package reborncore.common.screen; + +import net.minecraft.screen.ScreenHandlerListener; +import net.minecraft.server.network.ServerPlayerEntity; + +import java.lang.invoke.MethodHandles; +import java.lang.invoke.VarHandle; +import java.util.Optional; + +// Helper to access the ServerPlayerEntity instance from a ScreenHandlerListener +public class ServerPlayerEntityScreenHandlerHelper { + private static final String CLASS_NAME = ServerPlayerEntity.class.getName() + "$2"; + private static final String FIELD_NAME = "field_29183"; + + private static final Class CLAZZ; + private static final VarHandle VAR_HANDLE; + + static { + try { + CLAZZ = Class.forName(CLASS_NAME); + VAR_HANDLE = MethodHandles.privateLookupIn(CLAZZ, MethodHandles.lookup()) + .findVarHandle(CLAZZ, FIELD_NAME, ServerPlayerEntity.class); + } catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException e) { + throw new ExceptionInInitializerError(e); + } + } + + public static Optional getServerPlayerEntity(ScreenHandlerListener screenHandlerListener) { + if (screenHandlerListener.getClass() == CLAZZ) { + return Optional.of((ServerPlayerEntity) VAR_HANDLE.get(screenHandlerListener)); + } + + return Optional.empty(); + } +} diff --git a/RebornCore/src/main/java/reborncore/mixin/common/MixinServerPlayerEntity.java b/RebornCore/src/main/java/reborncore/mixin/common/MixinServerPlayerEntity.java deleted file mode 100644 index e3663fd1f..000000000 --- a/RebornCore/src/main/java/reborncore/mixin/common/MixinServerPlayerEntity.java +++ /dev/null @@ -1,18 +0,0 @@ -package reborncore.mixin.common; - -import net.minecraft.server.network.ServerPlayerEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import reborncore.mixin.ifaces.ServerPlayerEntityScreenHandler; - -@Mixin(targets = "net.minecraft.server.network.ServerPlayerEntity$2") -public class MixinServerPlayerEntity implements ServerPlayerEntityScreenHandler { - - @Shadow - ServerPlayerEntity field_29183; - - @Override - public ServerPlayerEntity rc_getServerPlayerEntity() { - return field_29183; - } -} diff --git a/RebornCore/src/main/java/reborncore/mixin/ifaces/ServerPlayerEntityScreenHandler.java b/RebornCore/src/main/java/reborncore/mixin/ifaces/ServerPlayerEntityScreenHandler.java deleted file mode 100644 index 74a828931..000000000 --- a/RebornCore/src/main/java/reborncore/mixin/ifaces/ServerPlayerEntityScreenHandler.java +++ /dev/null @@ -1,8 +0,0 @@ -package reborncore.mixin.ifaces; - -import net.minecraft.server.network.ServerPlayerEntity; - -public interface ServerPlayerEntityScreenHandler { - - ServerPlayerEntity rc_getServerPlayerEntity(); -} diff --git a/RebornCore/src/main/resources/reborncore.common.mixins.json b/RebornCore/src/main/resources/reborncore.common.mixins.json index c4a184058..a2343fc9c 100644 --- a/RebornCore/src/main/resources/reborncore.common.mixins.json +++ b/RebornCore/src/main/resources/reborncore.common.mixins.json @@ -7,8 +7,7 @@ "MixinCraftingResultSlot", "MixinItemEntity", "MixinLivingEntity", - "MixinPlayerEntity", - "MixinServerPlayerEntity" + "MixinPlayerEntity" ], "injectors": { "defaultRequire": 1