From 713a2a47c71f27d764dcdffac9e17c9d58157b94 Mon Sep 17 00:00:00 2001 From: Timo Ley Date: Sun, 19 May 2019 00:26:11 +0200 Subject: [PATCH] Fixed Kill Ability for Multiplayer --- src/main/java/anvil/infinity/Infinity.java | 13 ++++++ .../anvil/infinity/abilities/AbilityKill.java | 31 ++++---------- .../networking/KillAbilityPackageHandler.java | 23 ++++++++++ .../KillAbilityReturnPackageHandler.java | 21 ++++++++++ .../networking/PackageKillAbility.java | 42 +++++++++++++++++++ .../anvil/infinity/networking/PackageReq.java | 17 ++++++++ 6 files changed, 124 insertions(+), 23 deletions(-) create mode 100644 src/main/java/anvil/infinity/networking/KillAbilityPackageHandler.java create mode 100644 src/main/java/anvil/infinity/networking/KillAbilityReturnPackageHandler.java create mode 100644 src/main/java/anvil/infinity/networking/PackageKillAbility.java create mode 100644 src/main/java/anvil/infinity/networking/PackageReq.java diff --git a/src/main/java/anvil/infinity/Infinity.java b/src/main/java/anvil/infinity/Infinity.java index 8a38727..ea4bae8 100644 --- a/src/main/java/anvil/infinity/Infinity.java +++ b/src/main/java/anvil/infinity/Infinity.java @@ -2,7 +2,12 @@ package anvil.infinity; import anvil.infinity.compat.CompatHandler; import anvil.infinity.config.ConfigHandler; +import anvil.infinity.networking.KillAbilityPackageHandler; +import anvil.infinity.networking.KillAbilityReturnPackageHandler; +import anvil.infinity.networking.PackageKillAbility; +import anvil.infinity.networking.PackageReq; import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.fml.common.event.FMLInitializationEvent; @@ -10,7 +15,11 @@ import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper; import net.minecraftforge.fml.common.registry.GameRegistry; +import net.minecraftforge.fml.relauncher.Side; //Test @@ -26,6 +35,7 @@ public class Infinity { public static final String MOD_NAME = "Infinityraft"; public static final String VERSION = "1.3"; public static final String DEPENDENCIES = "required-after:lucraftcore@[1.12.2-2.4.0,)"; + public static final SimpleNetworkWrapper NETWORK_WRAPPER = NetworkRegistry.INSTANCE.newSimpleChannel(MOD_ID); /** * This is the instance of your mod as created by Forge. It will never be null. @@ -41,6 +51,9 @@ public class Infinity { public void preinit(FMLPreInitializationEvent event) { ConfigHandler.refreshConfig(event.getSuggestedConfigurationFile()); CompatHandler.check(); + int netID = 0; + NETWORK_WRAPPER.registerMessage(KillAbilityReturnPackageHandler.class, PackageKillAbility.class, netID++, Side.SERVER); + NETWORK_WRAPPER.registerMessage(KillAbilityPackageHandler.class, PackageReq.class, netID++, Side.CLIENT); } diff --git a/src/main/java/anvil/infinity/abilities/AbilityKill.java b/src/main/java/anvil/infinity/abilities/AbilityKill.java index 071804f..b868f0f 100644 --- a/src/main/java/anvil/infinity/abilities/AbilityKill.java +++ b/src/main/java/anvil/infinity/abilities/AbilityKill.java @@ -1,18 +1,13 @@ package anvil.infinity.abilities; +import anvil.infinity.Infinity; import anvil.infinity.conditions.ICondition; -import anvil.infinity.registry.Effects; +import anvil.infinity.networking.PackageReq; +import io.netty.buffer.ByteBuf; import lucraft.mods.lucraftcore.superpowers.abilities.AbilityAction; -import net.minecraft.client.Minecraft; -import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.FMLCommonHandler; -import net.minecraftforge.fml.relauncher.Side; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; public class AbilityKill extends AbilityAction { @@ -35,19 +30,9 @@ public class AbilityKill extends AbilityAction { @Override public boolean action() { - if (condition.isFulfilled(entity)) { - if (FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER) { - World w = FMLCommonHandler.instance().getMinecraftServerInstance().getEntityWorld(); - RayTraceResult result = Minecraft.getMinecraft().objectMouseOver; - System.out.println(result.typeOfHit); - if (result.typeOfHit == RayTraceResult.Type.ENTITY) { - Entity e = w.getEntityByID(result.entityHit.getEntityId()); - if (e instanceof EntityLivingBase) { - ((EntityLivingBase) e).addPotionEffect(new PotionEffect(Effects.snapEffect, 1)); - return true; - } - } - } + if (condition.isFulfilled(entity) && entity instanceof EntityPlayerMP) { + Infinity.NETWORK_WRAPPER.sendTo(new PackageReq(), (EntityPlayerMP) entity); + return true; } return false; } diff --git a/src/main/java/anvil/infinity/networking/KillAbilityPackageHandler.java b/src/main/java/anvil/infinity/networking/KillAbilityPackageHandler.java new file mode 100644 index 0000000..3d02f4c --- /dev/null +++ b/src/main/java/anvil/infinity/networking/KillAbilityPackageHandler.java @@ -0,0 +1,23 @@ +package anvil.infinity.networking; + +import anvil.infinity.Infinity; +import net.minecraft.client.Minecraft; +import net.minecraft.util.math.RayTraceResult; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; + +public class KillAbilityPackageHandler implements IMessageHandler { + + @Override + public IMessage onMessage(PackageReq message, MessageContext ctx) { + RayTraceResult result = Minecraft.getMinecraft().objectMouseOver; + if (result.typeOfHit == RayTraceResult.Type.ENTITY) { + PackageKillAbility pack = new PackageKillAbility(); + pack.entity = result.entityHit; + Infinity.NETWORK_WRAPPER.sendToServer(pack); + } + + return null; + } +} diff --git a/src/main/java/anvil/infinity/networking/KillAbilityReturnPackageHandler.java b/src/main/java/anvil/infinity/networking/KillAbilityReturnPackageHandler.java new file mode 100644 index 0000000..b141ab0 --- /dev/null +++ b/src/main/java/anvil/infinity/networking/KillAbilityReturnPackageHandler.java @@ -0,0 +1,21 @@ +package anvil.infinity.networking; + +import anvil.infinity.registry.Effects; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.potion.PotionEffect; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; + +public class KillAbilityReturnPackageHandler implements IMessageHandler { + + @Override + public IMessage onMessage(PackageKillAbility message, MessageContext ctx) { + Entity e = message.entity; + if (e instanceof EntityLivingBase) { + ((EntityLivingBase) e).addPotionEffect(new PotionEffect(Effects.snapEffect, 1)); + } + return null; + } +} diff --git a/src/main/java/anvil/infinity/networking/PackageKillAbility.java b/src/main/java/anvil/infinity/networking/PackageKillAbility.java new file mode 100644 index 0000000..029b1cf --- /dev/null +++ b/src/main/java/anvil/infinity/networking/PackageKillAbility.java @@ -0,0 +1,42 @@ +package anvil.infinity.networking; + +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.Entity; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.common.network.ByteBufUtils; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; + +public class PackageKillAbility implements IMessage { + + Entity entity; + + public PackageKillAbility(Entity entity) { + super(); + this.entity = entity; + } + + public PackageKillAbility() { + super(); + } + + + @Override + public void fromBytes(ByteBuf buf) { + + String input = ByteBufUtils.readUTF8String(buf); + String[] inputs = input.split(":"); + int dim = Integer.parseInt(inputs[0]); + int id = Integer.parseInt(inputs[1]); + World world = FMLCommonHandler.instance().getMinecraftServerInstance().getWorld(dim); + entity = world.getEntityByID(id); + + } + + @Override + public void toBytes(ByteBuf buf) { + + ByteBufUtils.writeUTF8String(buf, entity.dimension + ":" + entity.getEntityId()); + + } +} diff --git a/src/main/java/anvil/infinity/networking/PackageReq.java b/src/main/java/anvil/infinity/networking/PackageReq.java new file mode 100644 index 0000000..4718f3d --- /dev/null +++ b/src/main/java/anvil/infinity/networking/PackageReq.java @@ -0,0 +1,17 @@ +package anvil.infinity.networking; + +import io.netty.buffer.ByteBuf; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; + +public class PackageReq implements IMessage { + + @Override + public void fromBytes(ByteBuf buf) { + + } + + @Override + public void toBytes(ByteBuf buf) { + + } +}