package noppes.npcs.scripted; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagString; import net.minecraft.server.MinecraftServer; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import noppes.npcs.NoppesUtilServer; import noppes.npcs.api.ITileEntity; import noppes.npcs.api.ITimers; import noppes.npcs.api.block.IBlockScripted; import noppes.npcs.api.block.ITextPlane; import noppes.npcs.api.item.IItemStack; import noppes.npcs.blocks.tiles.TileScripted; import java.util.Set; public class BlockScriptedWrapper extends ScriptBlock implements IBlockScripted{ private TileScripted tile; public BlockScriptedWrapper(World world, Block block, int x, int y, int z) { super(world, block, new BlockPos(x,y,z)); tile = (TileScripted) super.tile.getMCTileEntity(); } @Override public void setModel(IItemStack item){ if(item == null) tile.setItemModel(null, null); else tile.setItemModel(item.getMCItemStack(), Block.getBlockFromItem(item.getMCItemStack().getItem())); } @Override public void setModel(String name){ if(name == null) tile.setItemModel(null, null); else{ Block block = Block.getBlockFromName(name); if(block!=null) { tile.setItemModel(new ItemStack(Item.getItemFromBlock(block)), block); }else{ if(Item.itemRegistry.containsKey(name)) { tile.setItemModel(new ItemStack((Item) Item.itemRegistry.getObject(name)), null); }else{ tile.setItemModel(null, null); } } } } @Override public IItemStack getModel(){ return NpcAPI.Instance().getIItemStack(tile.itemModel); } @Override public void setRedstonePower(int strength){ tile.setRedstonePower(strength); } @Override public int getRedstonePower(){ return tile.powering; } @Override public void setIsLadder(boolean bo){ tile.isLadder = bo; tile.needsClientUpdate = true; } @Override public boolean getIsLadder(){ return tile.isLadder; } @Override public void setIsPassible(boolean bo){ setIsPassable(bo); } @Override public boolean getIsPassible(){ return getIsPassable(); } @Override public void setIsPassable(boolean bo){ tile.isPassible = bo; tile.needsClientUpdate = true; } @Override public boolean getIsPassable(){ if(tile == null) return false; return tile.isPassible; } @Override public void setLight(int value){ tile.setLightValue(value); } @Override public int getLight(){ if(tile == null) return 0; return tile.lightValue; } @Override public void setScale(float x, float y, float z){ tile.setScale(x, y, z); } @Override public float getScaleX(){ return tile.scaleX; } @Override public float getScaleY(){ return tile.scaleY; } @Override public float getScaleZ(){ return tile.scaleZ; } @Override public void setRotation(int x, int y, int z){ tile.setRotation(x % 360, y % 360, z % 360); } @Override public int getRotationX(){ return tile.rotationX; } @Override public int getRotationY(){ return tile.rotationY; } @Override public int getRotationZ(){ return tile.rotationZ; } @Override public float getHardness() { return tile.blockHardness; } @Override public void setHardness(float hardness) { tile.blockHardness = hardness; } @Override public float getResistance() { return tile.blockResistance; } @Override public void setResistance(float resistance) { tile.blockResistance = resistance; } @Override public void executeCommand(String command){ if(!MinecraftServer.getServer().isCommandBlockEnabled()) throw new CustomNPCsException("Command blocks need to be enabled to executeCommands"); NoppesUtilServer.runCommand(world.getMCWorld(), "ScriptedBlock", command); } @Override public ITextPlane getTextPlane() { return tile.text1; } @Override public ITextPlane getTextPlane2() { return tile.text2; } @Override public ITextPlane getTextPlane3() { return tile.text3; } @Override public ITextPlane getTextPlane4() { return tile.text4; } @Override public ITextPlane getTextPlane5() { return tile.text5; } @Override public ITextPlane getTextPlane6() { return tile.text6; } @Override public ITimers getTimers() { return tile.timers; } @Override public void setTileEntity(ITileEntity tile){ this.tile = (TileScripted) tile; super.setTileEntity(tile); } private NBTTagCompound getNBT(){ if(tile == null) return null; NBTTagCompound compound = tile.getTileData().getCompoundTag("CustomNPCsData"); if(compound.hasNoTags() && !tile.getTileData().hasKey("CustomNPCsData")){ tile.getTileData().setTag("CustomNPCsData", compound); } return compound; } @Override public void setStoredData(String key, Object value) { NBTTagCompound compound = getNBT(); if(compound == null) return; if(value instanceof Number) compound.setDouble(key, ((Number) value).doubleValue()); else if(value instanceof String) compound.setString(key, (String)value); } @Override public Object getStoredData(String key) { NBTTagCompound compound = getNBT(); if(compound == null) return null; if(!compound.hasKey(key)) return null; NBTBase base = compound.getTag(key); if(base instanceof NBTBase.NBTPrimitive) return ((NBTBase.NBTPrimitive)base).func_150286_g(); return ((NBTTagString)base).func_150285_a_(); } @Override public void removeStoredData(String key) { NBTTagCompound compound = getNBT(); if(compound == null) return; compound.removeTag(key); } @Override public boolean hasStoredData(String key) { NBTTagCompound compound = getNBT(); if(compound == null) return false; return compound.hasKey(key); } @Override public void clearStoredData() { if(tile == null) return; tile.getTileData().setTag("CustomNPCsData", new NBTTagCompound()); } @Override public String[] getStoredDataKeys() { NBTTagCompound compound = getNBT(); if(compound == null) return new String[0]; return ((Set)compound.func_150296_c()).toArray(new String[0]); } @Override public void removeTempData(String key) { if(tile == null) return; tile.tempData.remove(key); } @Override public void setTempData(String key, Object value) { if(tile == null) return; tile.tempData.put(key, value); } @Override public boolean hasTempData(String key) { if(tile == null) return false; return tile.tempData.containsKey(key); } @Override public Object getTempData(String key) { if(tile == null) return null; return tile.tempData.get(key); } @Override public void clearTempData() { if(tile == null) return; tile.tempData.clear(); } @Override public String[] getTempDataKeys() { return tile.tempData.keySet().toArray(new String[tile.tempData.size()]); } }