Fixed Kill Ability for Multiplayer

This commit is contained in:
Timo Ley 2019-05-19 00:26:11 +02:00
parent 6545a45f52
commit 713a2a47c7
6 changed files with 124 additions and 23 deletions

View file

@ -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);
}

View file

@ -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;
}

View file

@ -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<PackageReq, IMessage> {
@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;
}
}

View file

@ -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<PackageKillAbility, IMessage> {
@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;
}
}

View file

@ -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());
}
}

View file

@ -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) {
}
}