Scripting now works on Servers

This commit is contained in:
Tschipp 2017-10-07 18:16:47 +02:00
parent b42d538049
commit ecfe850a99
15 changed files with 207 additions and 68 deletions

View File

@ -65,13 +65,6 @@ public class CarryOn {
}
public static File getMcDir()
{
if (FMLCommonHandler.instance().getMinecraftServerInstance() != null && FMLCommonHandler.instance().getMinecraftServerInstance().isDedicatedServer())
{
return new File(".");
}
return Minecraft.getMinecraft().mcDataDir;
}
}

View File

@ -352,7 +352,7 @@ public class RenderEntityEvents
if (nbttag != null)
newEntity.readFromNBT(nbttag);
entity = newEntity;
entity.setPosition(d0, d1, d2);
entity.setPosition(c0, c1, c2);
entity.rotationYaw = 0.0f;
entity.prevRotationYaw = 0.0f;
entity.setRotationYawHead(0.0f);

View File

@ -17,6 +17,8 @@ import tschipp.carryon.common.handler.RegistrationHandler;
import tschipp.carryon.common.scripting.ScriptReader;
import tschipp.carryon.network.client.CarrySlotPacket;
import tschipp.carryon.network.client.CarrySlotPacketHandler;
import tschipp.carryon.network.client.ScriptReloadPacket;
import tschipp.carryon.network.client.ScriptReloadPacketHandler;
import tschipp.carryon.network.server.SyncKeybindPacket;
import tschipp.carryon.network.server.SyncKeybindPacketHandler;
@ -32,6 +34,7 @@ public class CommonProxy
CarryOn.network.registerMessage(SyncKeybindPacketHandler.class, SyncKeybindPacket.class, 0, Side.SERVER);
CarryOn.network.registerMessage(CarrySlotPacketHandler.class, CarrySlotPacket.class, 1, Side.CLIENT);
CarryOn.network.registerMessage(ScriptReloadPacketHandler.class, ScriptReloadPacket.class, 2, Side.CLIENT);
RegistrationHandler.regItems();
RegistrationHandler.regCommonEvents();

View File

@ -77,7 +77,7 @@ public class CommandCarryOn extends CommandBase implements ICommand
cleared += player.inventory.clearMatchingItems(RegistrationHandler.itemTile, 0, 64, null);
cleared += player.inventory.clearMatchingItems(RegistrationHandler.itemEntity, 0, 64, null);
CarryOn.network.sendToAllAround(new CarrySlotPacket(9), new TargetPoint(player.world.provider.getDimension(), player.posX, player.posY, player.posZ, 256));
CarryOn.network.sendTo(new CarrySlotPacket(9, player.getEntityId()), (EntityPlayerMP) player);
if (cleared != 1)
player.sendMessage(new TextComponentString("Cleared " + cleared + " Items!"));

View File

@ -6,12 +6,13 @@ import java.util.List;
import net.minecraft.command.CommandBase;
import net.minecraft.command.CommandException;
import net.minecraft.command.ICommandSender;
import net.minecraft.command.WrongUsageException;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextComponentString;
import tschipp.carryon.CarryOn;
import tschipp.carryon.common.config.CarryOnConfig;
import tschipp.carryon.common.scripting.ScriptReader;
import tschipp.carryon.network.client.ScriptReloadPacket;
public class CommandCarryOnReload extends CommandBase
{
@ -23,6 +24,7 @@ public class CommandCarryOnReload extends CommandBase
if (CarryOnConfig.settings.useScripts)
{
ScriptReader.reloadScripts();
CarryOn.network.sendToAll(new ScriptReloadPacket());
sender.sendMessage(new TextComponentString("Successfully reloaded scripts!"));
}
else

View File

@ -106,7 +106,7 @@ public class ItemEntityEvents
if (override != null)
overrideHash = override.hashCode();
CarryOn.network.sendToAllAround(new CarrySlotPacket(player.inventory.currentItem, overrideHash), new TargetPoint(world.provider.getDimension(), player.posX, player.posY, player.posZ, 256));
CarryOn.network.sendToAllAround(new CarrySlotPacket(player.inventory.currentItem, player.getEntityId(), overrideHash), new TargetPoint(world.provider.getDimension(), player.posX, player.posY, player.posZ, 256));
entity.setDead();
player.setHeldItem(EnumHand.MAIN_HAND, stack);
event.setCanceled(true);

View File

@ -2,6 +2,7 @@ package tschipp.carryon.common.event;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
@ -19,15 +20,18 @@ import net.minecraft.util.text.event.ClickEvent;
import net.minecraft.util.text.event.ClickEvent.Action;
import net.minecraft.world.World;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
import net.minecraftforge.event.entity.player.PlayerEvent.StartTracking;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.fml.common.eventhandler.Event.Result;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent;
import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint;
import tschipp.carryon.CarryOn;
import tschipp.carryon.client.keybinds.CarryOnKeybinds;
import tschipp.carryon.common.handler.PickupHandler;
import tschipp.carryon.common.handler.RegistrationHandler;
import tschipp.carryon.common.item.ItemEntity;
import tschipp.carryon.common.item.ItemTile;
import tschipp.carryon.common.scripting.CarryOnOverride;
import tschipp.carryon.common.scripting.ScriptChecker;
@ -87,6 +91,75 @@ public class ItemEvents
eitem.setEntityItemStack(ItemStack.EMPTY);
}
}
}
@SubscribeEvent
public void onPlayerLogin(PlayerLoggedInEvent event)
{
if (event.player instanceof EntityPlayer)
{
EntityPlayer player = (EntityPlayer) event.player;
World world = player.getEntityWorld();
ItemStack carried = player.getHeldItemMainhand();
if (!carried.isEmpty() && carried.getItem() == RegistrationHandler.itemTile || carried.getItem() == RegistrationHandler.itemEntity)
{
if (carried.getItem() == RegistrationHandler.itemTile)
{
CarryOnOverride override = ScriptChecker.inspectBlock(((ItemTile) carried.getItem()).getBlockState(carried), world, player.getPosition(), ((ItemTile) carried.getItem()).getTileData(carried));
if (override != null)
CarryOn.network.sendTo(new CarrySlotPacket(player.inventory.currentItem, player.getEntityId(), override.hashCode()), (EntityPlayerMP) player);
else
CarryOn.network.sendTo(new CarrySlotPacket(player.inventory.currentItem, player.getEntityId()), (EntityPlayerMP) player);
}
else
{
CarryOnOverride override = ScriptChecker.inspectEntity(((ItemEntity) carried.getItem()).getEntity(carried, world));
if (override != null)
CarryOn.network.sendTo(new CarrySlotPacket(player.inventory.currentItem, player.getEntityId(), override.hashCode()), (EntityPlayerMP) player);
else
CarryOn.network.sendTo(new CarrySlotPacket(player.inventory.currentItem, player.getEntityId()), (EntityPlayerMP) player);
}
}
}
}
@SubscribeEvent
public void onEntityStartTracking(StartTracking event)
{
Entity e = event.getTarget();
EntityPlayer tracker = event.getEntityPlayer();
if (e instanceof EntityPlayer && tracker instanceof EntityPlayerMP)
{
EntityPlayer player = (EntityPlayer) e;
World world = player.getEntityWorld();
ItemStack carried = player.getHeldItemMainhand();
if (!carried.isEmpty() && carried.getItem() == RegistrationHandler.itemTile || carried.getItem() == RegistrationHandler.itemEntity)
{
if (carried.getItem() == RegistrationHandler.itemTile)
{
CarryOnOverride override = ScriptChecker.inspectBlock(((ItemTile) carried.getItem()).getBlockState(carried), world, player.getPosition(), ((ItemTile) carried.getItem()).getTileData(carried));
if (override != null)
CarryOn.network.sendTo(new CarrySlotPacket(player.inventory.currentItem, player.getEntityId(), override.hashCode()), (EntityPlayerMP) tracker);
else
CarryOn.network.sendTo(new CarrySlotPacket(player.inventory.currentItem, player.getEntityId()), (EntityPlayerMP) tracker);
}
else
{
CarryOnOverride override = ScriptChecker.inspectEntity(((ItemEntity) carried.getItem()).getEntity(carried, world));
if (override != null)
CarryOn.network.sendTo(new CarrySlotPacket(player.inventory.currentItem, player.getEntityId(), override.hashCode()), (EntityPlayerMP) tracker);
else
CarryOn.network.sendTo(new CarrySlotPacket(player.inventory.currentItem, player.getEntityId()), (EntityPlayerMP) tracker);
}
}
}
}
@SubscribeEvent
@ -118,12 +191,12 @@ public class ItemEvents
tag = world.getTileEntity(pos) != null ? world.getTileEntity(pos).writeToNBT(tag) : new NBTTagCompound();
CarryOnOverride override = ScriptChecker.inspectBlock(state, world, pos, tag);
int overrideHash = 0;
if(override != null)
if (override != null)
overrideHash = override.hashCode();
try
{
CarryOn.network.sendToAllAround(new CarrySlotPacket(player.inventory.currentItem, overrideHash), new TargetPoint(world.provider.getDimension(), player.posX, player.posY, player.posZ, 256));
CarryOn.network.sendToAllAround(new CarrySlotPacket(player.inventory.currentItem, player.getEntityId(), overrideHash), new TargetPoint(world.provider.getDimension(), player.posX, player.posY, player.posZ, 256));
world.removeTileEntity(pos);
world.setBlockToAir(pos);
player.setHeldItem(EnumHand.MAIN_HAND, stack);
@ -132,7 +205,7 @@ public class ItemEvents
}
catch (Exception e)
{
CarryOn.network.sendToAllAround(new CarrySlotPacket(9), new TargetPoint(world.provider.getDimension(), player.posX, player.posY, player.posZ, 256));
CarryOn.network.sendToAllAround(new CarrySlotPacket(9, player.getEntityId()), new TargetPoint(world.provider.getDimension(), player.posX, player.posY, player.posZ, 256));
world.setBlockState(pos, statee);
if (!tag.hasNoTags())
TileEntity.create(world, tag);

View File

@ -20,9 +20,11 @@ import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.translation.I18n;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint;
import net.minecraftforge.fml.common.registry.GameRegistry;
import tschipp.carryon.CarryOn;
import tschipp.carryon.common.config.CarryOnConfig;
import tschipp.carryon.network.client.CarrySlotPacket;
public class ItemEntity extends Item
{
@ -109,6 +111,7 @@ public class ItemEntity extends Item
}
clearEntityData(stack);
player.setHeldItem(hand, ItemStack.EMPTY);
CarryOn.network.sendToAllAround(new CarrySlotPacket(9, player.getEntityId()), new TargetPoint(world.provider.getDimension(), player.posX, player.posY, player.posZ, 256));
}
player.getEntityData().removeTag("overrideKey");
return EnumActionResult.SUCCESS;

View File

@ -33,11 +33,13 @@ import net.minecraft.util.text.event.ClickEvent;
import net.minecraft.util.text.event.ClickEvent.Action;
import net.minecraft.util.text.translation.I18n;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint;
import net.minecraftforge.fml.common.registry.GameRegistry;
import tschipp.carryon.CarryOn;
import tschipp.carryon.common.config.CarryOnConfig;
import tschipp.carryon.common.handler.CustomPickupOverrideHandler;
import tschipp.carryon.common.handler.ModelOverridesHandler;
import tschipp.carryon.network.client.CarrySlotPacket;
public class ItemTile extends Item
{
@ -142,6 +144,7 @@ public class ItemTile extends Item
player.playSound(containedblock.getSoundType().getPlaceSound(), 1.0f, 0.5f);
player.setHeldItem(hand, ItemStack.EMPTY);
player.getEntityData().removeTag("overrideKey");
CarryOn.network.sendToAllAround(new CarrySlotPacket(9, player.getEntityId()), new TargetPoint(world.provider.getDimension(), player.posX, player.posY, player.posZ, 256));
return EnumActionResult.SUCCESS;
}

View File

@ -37,13 +37,19 @@ public class CarryOnOverride
private String renderScale;
private String renderRotationLeftArm;
private String renderRotationRightArm;
private boolean isBlock;
private boolean isEntity;
private boolean renderLeftArm = true;
private boolean renderRightArm = true;
private boolean isBlock;
private boolean isEntity;
private final String path;
public CarryOnOverride(String path)
{
this.path = path;
}
public String getRenderRotationLeftArm()
{
return renderRotationLeftArm;
@ -89,38 +95,15 @@ public class CarryOnOverride
{
final int prime = 31;
int result = 1;
result = prime * result + ((conditionAchievement == null) ? 0 : conditionAchievement.hashCode());
result = prime * result + ((conditionGamemode == null) ? 0 : conditionGamemode.hashCode());
result = prime * result + ((conditionGamestage == null) ? 0 : conditionGamestage.hashCode());
result = prime * result + ((conditionPosition == null) ? 0 : conditionPosition.hashCode());
result = prime * result + ((conditionScoreboard == null) ? 0 : conditionScoreboard.hashCode());
result = prime * result + ((conditionXp == null) ? 0 : conditionXp.hashCode());
result = prime * result + (isBlock ? 1231 : 1237);
result = prime * result + (isEntity ? 1231 : 1237);
result = prime * result + (renderLeftArm ? 1231 : 1237);
result = prime * result + (renderRightArm ? 1231 : 1237);
result = prime * result + renderMeta;
result = prime * result + ((renderNBT == null) ? 0 : renderNBT.hashCode());
result = prime * result + ((renderNameBlock == null) ? 0 : renderNameBlock.hashCode());
result = prime * result + ((renderNameEntity == null) ? 0 : renderNameEntity.hashCode());
result = prime * result + ((renderRotation == null) ? 0 : renderRotation.hashCode());
result = prime * result + ((renderRotationLeftArm == null) ? 0 : renderRotationLeftArm.hashCode());
result = prime * result + ((renderRotationRightArm == null) ? 0 : renderRotationRightArm.hashCode());
result = prime * result + ((renderScale == null) ? 0 : renderScale.hashCode());
result = prime * result + ((renderTranslation == null) ? 0 : renderTranslation.hashCode());
result = prime * result + ((typeBlockTag == null) ? 0 : typeBlockTag.hashCode());
result = prime * result + ((typeEntityTag == null) ? 0 : typeEntityTag.hashCode());
result = prime * result + ((typeHardness == null) ? 0 : typeHardness.hashCode());
result = prime * result + ((typeHealth == null) ? 0 : typeHealth.hashCode());
result = prime * result + ((typeHeight == null) ? 0 : typeHeight.hashCode());
result = prime * result + ((typeMaterial == null) ? 0 : typeMaterial.hashCode());
result = prime * result + ((typeMeta == null) ? 0 : typeMeta.hashCode());
result = prime * result + ((typeNameBlock == null) ? 0 : typeNameBlock.hashCode());
result = prime * result + ((typeNameEntity == null) ? 0 : typeNameEntity.hashCode());
result = prime * result + ((typeResistance == null) ? 0 : typeResistance.hashCode());
result = prime * result + ((typeWidth == null) ? 0 : typeWidth.hashCode());
result = prime * result + ((path == null) ? 0 : path.hashCode());
return result;
}
@Override
public String toString()
{
return "Code: " + this.hashCode();
}
@Override
public boolean equals(Object obj)

View File

@ -67,7 +67,7 @@ public class ScriptReader
if (!errored)
{
CarryOnOverride override = new CarryOnOverride();
CarryOnOverride override = new CarryOnOverride(file.getAbsolutePath());
if (block != null)
{

View File

@ -9,20 +9,25 @@ public class CarrySlotPacket implements IMessage
{
public int slot;
public int carryOverride = 0;
public int entityid;
public CarrySlotPacket()
{
this.slot = 9;
this.entityid = 0;
}
public CarrySlotPacket(int slot)
public CarrySlotPacket(int slot, int entityid)
{
this.slot = slot;
this.entityid = entityid;
}
public CarrySlotPacket(int slot, int carryOverride)
public CarrySlotPacket(int slot, int entityid, int carryOverride)
{
this.slot = slot;
this.carryOverride = carryOverride;
this.entityid = entityid;
}
@Override
@ -32,6 +37,7 @@ public class CarrySlotPacket implements IMessage
this.slot = tag.getInteger("slot");
this.carryOverride = tag.getInteger("override");
this.entityid = tag.getInteger("entityid");
}
@Override
@ -40,6 +46,7 @@ public class CarrySlotPacket implements IMessage
NBTTagCompound tag = new NBTTagCompound();
tag.setInteger("slot", slot);
tag.setInteger("override", carryOverride);
tag.setInteger("entityid", entityid);
ByteBufUtils.writeTag(buf, tag);
}

View File

@ -1,12 +1,14 @@
package tschipp.carryon.network.client;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.multiplayer.WorldClient;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.IThreadListener;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import tschipp.carryon.client.keybinds.CarryOnKeybinds;
import tschipp.carryon.common.scripting.ScriptChecker;
public class CarrySlotPacketHandler implements IMessageHandler<CarrySlotPacket, IMessage>
@ -19,25 +21,34 @@ public class CarrySlotPacketHandler implements IMessageHandler<CarrySlotPacket,
mainThread.addScheduledTask(new Runnable()
{
EntityPlayerSP player = Minecraft.getMinecraft().player;
World world = Minecraft.getMinecraft().world;
@Override
public void run()
{
if (message.slot >= 9)
if (world != null)
{
player.getEntityData().removeTag("carrySlot");
player.getEntityData().removeTag("overrideKey");
Entity e = world.getEntityByID(message.entityid);
if (e != null && e instanceof EntityPlayer)
{
EntityPlayer player = (EntityPlayer) e;
if (message.slot >= 9)
{
player.getEntityData().removeTag("carrySlot");
player.getEntityData().removeTag("overrideKey");
}
else
{
player.getEntityData().setInteger("carrySlot", message.slot);
if (message.carryOverride != 0)
ScriptChecker.setCarryOnOverride(player, message.carryOverride);
}
}
}
else
{
player.getEntityData().setInteger("carrySlot", message.slot);
if(message.carryOverride != 0)
ScriptChecker.setCarryOnOverride(player, message.carryOverride);
}
}
});

View File

@ -0,0 +1,26 @@
package tschipp.carryon.network.client;
import io.netty.buffer.ByteBuf;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
public class ScriptReloadPacket implements IMessage
{
public ScriptReloadPacket()
{
}
@Override
public void fromBytes(ByteBuf buf)
{
}
@Override
public void toBytes(ByteBuf buf)
{
}
}

View File

@ -0,0 +1,35 @@
package tschipp.carryon.network.client;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.util.IThreadListener;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import tschipp.carryon.common.scripting.ScriptReader;
public class ScriptReloadPacketHandler implements IMessageHandler<ScriptReloadPacket, IMessage>
{
@Override
public IMessage onMessage(ScriptReloadPacket message, MessageContext ctx)
{
IThreadListener mainThread = Minecraft.getMinecraft();
mainThread.addScheduledTask(new Runnable()
{
EntityPlayerSP player = Minecraft.getMinecraft().player;
@Override
public void run()
{
if(player != null)
ScriptReader.reloadScripts();
}
});
return null;
}
}