Skip to content

Commit

Permalink
refactor packets & use gtnhlib SyncedKeybind
Browse files Browse the repository at this point in the history
  • Loading branch information
Lyfts committed Jan 26, 2025
1 parent 8fc5639 commit 8a52501
Show file tree
Hide file tree
Showing 15 changed files with 108 additions and 295 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
4 changes: 1 addition & 3 deletions src/main/java/xonin/backhand/Backhand.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
24 changes: 18 additions & 6 deletions src/main/java/xonin/backhand/CommonProxy.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,21 @@
import net.minecraftforge.common.util.FakePlayer;

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", 33)
.registerGlobalListener(CommonProxy::swapOffhand);

public void load() {}

@SubscribeEvent
Expand All @@ -36,14 +42,20 @@ 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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

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 +40,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 @@ -29,6 +29,7 @@
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.OffhandSyncOffhandUse;

@Mixin(EntityPlayer.class)
Expand Down Expand Up @@ -139,8 +140,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
27 changes: 0 additions & 27 deletions src/main/java/xonin/backhand/packet/AbstractPacket.java

This file was deleted.

91 changes: 21 additions & 70 deletions src/main/java/xonin/backhand/packet/BackhandPacketHandler.java
Original file line number Diff line number Diff line change
@@ -1,92 +1,43 @@
package xonin.backhand.packet;

import java.util.Hashtable;
import java.util.Map;
import java.util.Set;

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.network.NetHandlerPlayServer;
import net.minecraft.world.WorldServer;

import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.network.FMLEventChannel;
import cpw.mods.fml.common.network.FMLNetworkEvent;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.network.internal.FMLProxyPacket;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import xonin.backhand.Backhand;
import xonin.backhand.api.core.BackhandUtils;

public final class BackhandPacketHandler {

public Map<String, AbstractPacket> map = new Hashtable<>();
public Map<String, FMLEventChannel> channels = new Hashtable<>();
public static final SimpleNetworkWrapper NETWORK = NetworkRegistry.INSTANCE.newSimpleChannel(Backhand.MODID);

public BackhandPacketHandler() {
map.put(OffhandSyncItemPacket.packetName, new OffhandSyncItemPacket());
map.put(OffhandSwapPacket.packetName, new OffhandSwapPacket());
map.put(OffhandSwapClientPacket.packetName, new OffhandSwapClientPacket());
map.put(OffhandSyncOffhandUse.packetName, new OffhandSyncOffhandUse());
public static void init() {
NETWORK.registerMessage(OffhandSyncItemPacket.Handler.class, OffhandSyncItemPacket.class, 0, Side.CLIENT);
NETWORK.registerMessage(OffhandSyncOffhandUse.Handler.class, OffhandSyncOffhandUse.class, 1, Side.CLIENT);
}

public void register() {
FMLEventChannel eventChannel;
for (String channel : map.keySet()) {
eventChannel = NetworkRegistry.INSTANCE.newEventDrivenChannel(channel);
eventChannel.register(this);
channels.put(channel, eventChannel);
public static void sendPacketToPlayer(IMessage packet, EntityPlayer player) {
if (player instanceof EntityPlayerMP playerMP) {
NETWORK.sendTo(packet, playerMP);
}
}

@SubscribeEvent
public void onServerPacket(FMLNetworkEvent.ServerCustomPacketEvent event) {
map.get(event.packet.channel())
.process(event.packet.payload(), ((NetHandlerPlayServer) event.handler).playerEntity);
}

@SubscribeEvent
@SideOnly(Side.CLIENT)
public void onClientPacket(FMLNetworkEvent.ClientCustomPacketEvent event) {
map.get(event.packet.channel())
.process(event.packet.payload(), Minecraft.getMinecraft().thePlayer);
}
public static void sendPacketToAllTracking(Entity entity, IMessage packet) {
if (!(entity.worldObj instanceof WorldServer world) || !BackhandUtils.isValidPlayer(entity)) return;
Set<EntityPlayer> trackingPlayer = world.getEntityTracker()
.getTrackingPlayers(entity);

public void sendPacketToPlayer(FMLProxyPacket packet, EntityPlayerMP player) {
if (FMLCommonHandler.instance()
.getEffectiveSide() == Side.SERVER) {
channels.get(packet.channel())
.sendTo(packet, player);
for (EntityPlayer player : trackingPlayer) {
if (BackhandUtils.isValidPlayer(player)) {
sendPacketToPlayer(packet, player);
}
}
}

public void sendPacketToServer(FMLProxyPacket packet) {
packet.setTarget(Side.SERVER);
channels.get(packet.channel())
.sendToServer(packet);
}

public void sendPacketAround(Entity entity, double range, FMLProxyPacket packet) {
if (FMLCommonHandler.instance()
.getEffectiveSide() == Side.SERVER) {
channels.get(packet.channel())
.sendToAllAround(
packet,
new NetworkRegistry.TargetPoint(entity.dimension, entity.posX, entity.posY, entity.posZ, range));
}
}

public void sendPacketToAll(FMLProxyPacket packet) {
if (FMLCommonHandler.instance()
.getEffectiveSide() == Side.SERVER) {
channels.get(packet.channel())
.sendToAll(packet);
}
}

public void sendPacketToAllTracking(Entity entity, FMLProxyPacket packet) {
if (!(entity.worldObj instanceof WorldServer world)) return;
world.getEntityTracker()
.func_151247_a(entity, packet);
}
}
Loading

0 comments on commit 8a52501

Please sign in to comment.