Skip to content

Commit

Permalink
Refactor packets (#59)
Browse files Browse the repository at this point in the history
  • Loading branch information
Lyfts authored Jan 27, 2025
1 parent 8fc5639 commit 3eecde0
Show file tree
Hide file tree
Showing 19 changed files with 169 additions and 329 deletions.
2 changes: 1 addition & 1 deletion dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
* For more details, see https://docs.gradle.org/8.0.1/userguide/java_library_plugin.html#sec:java_library_configurations_graph
*/
dependencies {
api("com.github.GTNewHorizons:GTNHLib:0.6.3:dev")
api("com.github.GTNewHorizons:GTNHLib:0.6.5:dev")
compileOnly("com.github.GTNewHorizons:TinkersConstruct:1.13.4-GTNH:dev")
runtimeOnlyNonPublishable("com.github.GTNewHorizons:NotEnoughItems:2.7.23-GTNH:dev")
compileOnly("com.github.GTNewHorizons:inventory-tweaks:1.7.0:dev")
Expand Down
6 changes: 2 additions & 4 deletions src/main/java/xonin/backhand/Backhand.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
modid = Backhand.MODID,
name = "Backhand",
version = Tags.VERSION,
dependencies = "required-after:gtnhlib@[0.6.3,)")
dependencies = "required-after:gtnhlib@[0.6.5,)")
public class Backhand {

public static final String MODID = "backhand";
Expand All @@ -33,7 +33,6 @@ public class Backhand {

@SidedProxy(clientSide = "xonin.backhand.client.ClientProxy", serverSide = "xonin.backhand.CommonProxy")
public static CommonProxy proxy;
public static BackhandPacketHandler packetHandler;

@Mod.EventHandler
public void load(FMLPreInitializationEvent event) {
Expand All @@ -49,8 +48,7 @@ public void load(FMLPreInitializationEvent event) {

@Mod.EventHandler
public void init(FMLInitializationEvent event) {
packetHandler = new BackhandPacketHandler();
packetHandler.register();
BackhandPacketHandler.init();
}

public static MinecraftServer getServer() {
Expand Down
31 changes: 21 additions & 10 deletions src/main/java/xonin/backhand/CommonProxy.java
Original file line number Diff line number Diff line change
@@ -1,23 +1,27 @@
package xonin.backhand;

import javax.annotation.Nullable;

import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.FakePlayer;

import org.lwjgl.input.Keyboard;

import com.gtnewhorizon.gtnhlib.eventbus.EventBusSubscriber;
import com.gtnewhorizon.gtnhlib.keybind.SyncedKeybind;

import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.PlayerEvent;
import xonin.backhand.api.core.BackhandUtils;
import xonin.backhand.packet.BackhandPacketHandler;
import xonin.backhand.packet.OffhandSyncItemPacket;

@EventBusSubscriber
public class CommonProxy {

public static final SyncedKeybind SWAP_KEY = SyncedKeybind
.createConfigurable("backhand.swap_offhand", "key.categories.gameplay", Keyboard.KEY_F)
.registerGlobalListener(CommonProxy::swapOffhand);

public void load() {}

@SubscribeEvent
Expand All @@ -36,14 +40,21 @@ public static void onPlayerJoin(PlayerEvent.PlayerLoggedInEvent event) {

@SubscribeEvent
public static void addTracking(net.minecraftforge.event.entity.player.PlayerEvent.StartTracking event) {
if (event.entityPlayer instanceof EntityPlayerMP playerMP && isValidPlayer(event.target)) {
Backhand.packetHandler
.sendPacketToPlayer(new OffhandSyncItemPacket((EntityPlayer) event.target).generatePacket(), playerMP);
if (BackhandUtils.isValidPlayer(event.entityPlayer) && BackhandUtils.isValidPlayer(event.target)) {
BackhandPacketHandler
.sendPacketToPlayer(new OffhandSyncItemPacket((EntityPlayer) event.target), event.entityPlayer);
}
}

private static boolean isValidPlayer(@Nullable Entity entity) {
return entity instanceof EntityPlayerMP playerMP
&& !(entity instanceof FakePlayer || playerMP.playerNetServerHandler == null);
private static void swapOffhand(EntityPlayerMP player, SyncedKeybind keybind) {
ItemStack offhandItem = BackhandUtils.getOffhandItem(player);
if (Backhand.isOffhandBlacklisted(player.getCurrentEquippedItem())
|| Backhand.isOffhandBlacklisted(offhandItem)) {
return;
}

BackhandUtils.setPlayerOffhandItem(player, player.getCurrentEquippedItem());
player.setCurrentItemOrArmor(0, offhandItem);
player.inventoryContainer.detectAndSendChanges();
}
}
14 changes: 8 additions & 6 deletions src/main/java/xonin/backhand/api/core/BackhandUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,11 @@
import javax.annotation.ParametersAreNonnullByDefault;

import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.FakePlayer;

/**
* Store commonly used method, mostly for the {@link EntityPlayer} {@link ItemStack}s management
Expand All @@ -19,12 +22,6 @@ public final class BackhandUtils {

public static final List<Class<?>> offhandPriorityItems = new ArrayList<>();

public static void swapOffhandItem(EntityPlayer player) {
ItemStack mainHand = player.getCurrentEquippedItem();
player.setCurrentItemOrArmor(0, BackhandUtils.getOffhandItem(player));
BackhandUtils.setPlayerOffhandItem(player, mainHand);
}

public static void setPlayerOffhandItem(EntityPlayer player, @Nullable ItemStack stack) {
((IOffhandInventory) player.inventory).backhand$setOffhandItem(stack);
}
Expand Down Expand Up @@ -73,4 +70,9 @@ public static int getOffhandSlot(EntityPlayer player) {
public static void addOffhandPriorityItem(Class<?> itemClass) {
offhandPriorityItems.add(itemClass);
}

public static boolean isValidPlayer(@Nullable Entity entity) {
return entity instanceof EntityPlayerMP playerMP
&& !(entity instanceof FakePlayer || playerMP.playerNetServerHandler == null);
}
}
11 changes: 2 additions & 9 deletions src/main/java/xonin/backhand/client/ClientEventHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import static xonin.backhand.utils.Mods.DOUBLE_WIDE_SURPRISE;

import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityClientPlayerMP;
import net.minecraft.client.gui.GuiIngame;
import net.minecraft.client.model.ModelBiped;
import net.minecraft.client.renderer.RenderHelper;
Expand All @@ -18,7 +17,6 @@
import net.minecraftforge.client.event.RenderLivingEvent;
import net.minecraftforge.client.event.RenderPlayerEvent;

import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;

Expand All @@ -30,9 +28,9 @@
import cpw.mods.fml.common.gameevent.TickEvent;
import cpw.mods.fml.relauncher.Side;
import invtweaks.InvTweaks;
import xonin.backhand.CommonProxy;
import xonin.backhand.api.core.BackhandUtils;
import xonin.backhand.client.utils.BackhandRenderHelper;
import xonin.backhand.packet.OffhandSwapPacket;
import xonin.backhand.utils.BackhandConfig;
import xonin.backhand.utils.Mods;

Expand All @@ -43,7 +41,6 @@ public class ClientEventHandler {
public static boolean prevInvTweaksBreakRefill;

public static int invTweaksDelay;
public static boolean allowSwap = true;

public static int renderPass;

Expand All @@ -62,12 +59,8 @@ public static void renderHotbarOverlay(RenderGameOverlayEvent event) {
@SubscribeEvent
public static void onKeyInputEvent(InputEvent.KeyInputEvent event) {
Minecraft mc = Minecraft.getMinecraft();
EntityClientPlayerMP player = mc.thePlayer;

if (ClientProxy.swapOffhand.getIsKeyPressed() && Keyboard.isKeyDown(Keyboard.getEventKey()) && allowSwap) {
allowSwap = false;
if (mc.currentScreen == null && CommonProxy.SWAP_KEY.isKeyDown(mc.thePlayer)) {
invTweaksSwapPatch();
player.sendQueue.addToSendQueue(new OffhandSwapPacket(player).generatePacket());
}
}

Expand Down
15 changes: 0 additions & 15 deletions src/main/java/xonin/backhand/client/ClientProxy.java
Original file line number Diff line number Diff line change
@@ -1,22 +1,7 @@
package xonin.backhand.client;

import net.minecraft.client.settings.KeyBinding;

import org.lwjgl.input.Keyboard;

import cpw.mods.fml.client.registry.ClientRegistry;
import xonin.backhand.CommonProxy;

public class ClientProxy extends CommonProxy {

public static final KeyBinding swapOffhand = new KeyBinding(
"Swap Offhand",
Keyboard.KEY_F,
"key.categories.gameplay");

@Override
public void load() {
super.load();
ClientRegistry.registerKeyBinding(swapOffhand);
}
}
11 changes: 9 additions & 2 deletions src/main/java/xonin/backhand/compat/TConstructCompat.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,11 @@

import com.gtnewhorizon.gtnhlib.eventbus.EventBusSubscriber;

import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.eventhandler.EventPriority;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import tconstruct.library.tools.HarvestTool;
import tconstruct.library.weaponry.IWindup;
import tconstruct.tools.TinkerToolEvents;
Expand All @@ -36,8 +39,11 @@ public static boolean register() {
if (Mods.TINKERS_CONSTRUCT.isLoaded()) {
try {
// Gotta hide those NEW instructions from the JVM
crosshairHandler = CrosshairHandler.class.getConstructor()
.newInstance();
if (FMLCommonHandler.instance()
.getSide() == Side.CLIENT) {
crosshairHandler = CrosshairHandler.class.getConstructor()
.newInstance();
}
// These need to be MethodHandles since the compiler complains about Mobs-Info not being present
// otherwise
onHurt = MethodHandles.publicLookup()
Expand Down Expand Up @@ -91,6 +97,7 @@ public static void onAttack(LivingAttackEvent event) {
}
}

@SideOnly(Side.CLIENT)
@SubscribeEvent(priority = EventPriority.LOWEST)
public static void onRenderOverlay(RenderGameOverlayEvent.Pre event) {
if (event.type != RenderGameOverlayEvent.ElementType.CROSSHAIRS) return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@

import com.llamalad7.mixinextras.sugar.Local;

import xonin.backhand.Backhand;
import xonin.backhand.api.core.BackhandUtils;
import xonin.backhand.packet.BackhandPacketHandler;
import xonin.backhand.packet.OffhandSyncItemPacket;

@Mixin(EntityLivingBase.class)
Expand All @@ -39,6 +39,6 @@ public MixinEntityLivingBase(World worldIn) {
ItemStack offhand = BackhandUtils.getOffhandItem(player);
if (ItemStack.areItemStacksEqual(backhand$previousOffhandStack, offhand)) return;
backhand$previousOffhandStack = offhand;
Backhand.packetHandler.sendPacketToAllTracking(player, new OffhandSyncItemPacket(player).generatePacket());
BackhandPacketHandler.sendPacketToAllTracking(player, new OffhandSyncItemPacket(player));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,8 @@
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.EnumAction;
import net.minecraft.item.ItemStack;
import net.minecraft.network.play.server.S0BPacketAnimation;
import net.minecraft.util.RegistrySimple;
import net.minecraft.world.World;
import net.minecraft.world.WorldServer;

import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
Expand All @@ -25,10 +23,11 @@
import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;

import xonin.backhand.Backhand;
import xonin.backhand.api.core.BackhandUtils;
import xonin.backhand.api.core.IBackhandPlayer;
import xonin.backhand.api.core.IOffhandInventory;
import xonin.backhand.packet.BackhandPacketHandler;
import xonin.backhand.packet.OffhandAnimationPacket;
import xonin.backhand.packet.OffhandSyncOffhandUse;

@Mixin(EntityPlayer.class)
Expand Down Expand Up @@ -139,8 +138,7 @@ private MixinEntityPlayer(World p_i1594_1_) {
setOffhandItemInUse(state);

if (!worldObj.isRemote) {
Backhand.packetHandler
.sendPacketToAllTracking(player, new OffhandSyncOffhandUse(player, state).generatePacket());
BackhandPacketHandler.sendPacketToAllTracking(player, new OffhandSyncOffhandUse(player, state));
}
}

Expand Down Expand Up @@ -172,9 +170,8 @@ public void swingOffItem() {
this.backhand$offHandSwingProgressInt = -1;
this.backhand$isOffHandSwingInProgress = true;

if (worldObj instanceof WorldServer world) {
world.getEntityTracker()
.func_151247_a(this, new S0BPacketAnimation(this, 99));
if (!worldObj.isRemote) {
BackhandPacketHandler.sendPacketToAllTracking(player, new OffhandAnimationPacket(player));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
Expand All @@ -20,9 +19,6 @@
@Mixin(EntityPlayer.class)
public abstract class MixinEntityPlayerClient extends EntityLivingBase implements IBackhandPlayer {

@Shadow
public InventoryPlayer inventory;

@Shadow
private ItemStack itemInUse;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,13 @@

import net.minecraft.client.Minecraft;
import net.minecraft.client.network.NetHandlerPlayClient;
import net.minecraft.entity.Entity;
import net.minecraft.network.play.server.S0BPacketAnimation;

import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import com.llamalad7.mixinextras.sugar.Local;

import xonin.backhand.api.core.IBackhandPlayer;
import xonin.backhand.api.core.IOffhandInventory;

@Mixin(NetHandlerPlayClient.class)
Expand All @@ -33,14 +27,4 @@ public abstract class MixinNetHandlerPlayClient {
// return a valid int e.g. between 0 and < 9
return IOffhandInventory.isValidSwitch(original, gameController.thePlayer) ? 0 : -1;
}

@Inject(
method = "handleAnimation",
at = @At(value = "INVOKE", target = "Lnet/minecraft/network/play/server/S0BPacketAnimation;func_148977_d()I"))
private void backhand$handleOffhandSwing(S0BPacketAnimation packetIn, CallbackInfo ci, @Local Entity entity) {
if (!(entity instanceof IBackhandPlayer player)) return;
if (packetIn.func_148978_c() == 99) {
player.swingOffItem();
}
}
}
27 changes: 0 additions & 27 deletions src/main/java/xonin/backhand/packet/AbstractPacket.java

This file was deleted.

Loading

0 comments on commit 3eecde0

Please sign in to comment.