Jump to content

xxTFxx

Members
  • Posts

    15
  • Joined

  • Last visited

Everything posted by xxTFxx

  1. Thanks, that did actually helped.
  2. Ok, I've tested it and it also works only when I'm looking at the TE.
  3. Is there something I can do to make this work? It renders properly even if I'm not looking at the TE, but only when I'm in the same chunk as TE. My code: I know it's not well optimised, but for now I'm just trying to make this work.
  4. INFINITE_EXTENT_AABB seems to work, but only when I'm within the same chunk as the TE.
  5. When I do that it gives NullPointerException.
  6. That makes sense, but the problem is that TESR doesn't render the cable if I'm not looking at the TileEntity.
  7. Can I do something, so the TileEntity renders the cable when I don't look at the TileEntity? Or do I need to render the cables twice from each end.
  8. So I managed to render a line using RenderWorldLastEvent, but I have no idea how to store the TileEntities on client side.
  9. I need to render a line kind of like the Immersive Engineering cables. I tried to use Minecraft's RenderFish class as example, but I had no luck doing it.
  10. I meant that GUI shows energy and fuel as 0
  11. I got the button working, but now the GUI doesn't see the TileEntity's values. MessageOnButtonPressed MessageXYZ MessageBase TileEntity PacketHandler
  12. I've tried to make a portable generator, that turns on when you press the button. But when I add to update() function if(isTurned) then the tile seems to update fuel and energy only in gui, everthing else sees tile's energy and fuel as 0. TileEntity package com.xxTFxx.siberianadv.tileentity; import javax.annotation.Nullable; import com.xxTFxx.siberianadv.energy.CustomEnergyStorage; import com.xxTFxx.siberianadv.gui.GUIPortableGenerator; import com.xxTFxx.siberianadv.init.FluidInit; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.play.server.SPacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.ITickable; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.energy.CapabilityEnergy; import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.ItemStackHandler; public class TileEntityPortableGenerator extends TileEntity implements ITickable { public ItemStackHandler handler = new ItemStackHandler(2) { protected void onContentsChanged(int slot) { TileEntityPortableGenerator.this.markDirty(); }; }; private CustomEnergyStorage storage = new CustomEnergyStorage(40000); private FluidTank tank = new FluidTank(FluidInit.PETROLEUM_FLUID, 0, 5000); private int FLUID_DRAIN = 5; private int ENERGY_GAIN = 100; private boolean isTurned = false; @Override public void update() { if(isTurned) { if(tank.getFluidAmount() >= FLUID_DRAIN && storage.getEnergyStored() + ENERGY_GAIN <= storage.getMaxEnergyStored()) { markDirty(); tank.drain(FLUID_DRAIN, true); storage.addEnergy(ENERGY_GAIN); } } } public void turnOffOn() { this.isTurned = !this.isTurned; } public boolean isWorking() { return this.isTurned; } public int getMaxEnergyStored() { return this.storage.getMaxEnergyStored(); } public int getEnergyStored() { return this.storage.getEnergyStored(); } public int getFluidAmount() { return this.tank.getFluidAmount(); } public int getMaxFluidAmount() { return this.tank.getCapacity(); } public void setEnergy(int energy) { this.storage.setEnergy(energy); } public boolean canFillTank(int fluid) { if(this.tank.getFluidAmount() + fluid <= this.tank.getCapacity()) { return true; } return false; } @Override public <T> T getCapability(Capability<T> capability, EnumFacing facing) { if(capability == CapabilityEnergy.ENERGY) { return (T)this.storage; } if(capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { return (T)this.tank; } if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { return (T)this.handler; } return super.getCapability(capability, facing); } @Override public boolean hasCapability(Capability<?> capability, EnumFacing facing) { if(capability == CapabilityEnergy.ENERGY) { return true; } if(capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { return true; } if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { return true; } return super.hasCapability(capability, facing); } @Override public NBTTagCompound writeToNBT(NBTTagCompound compound) { compound.setTag("Inventory", this.handler.serializeNBT()); compound.setBoolean("Working", this.isTurned); this.storage.writeToNBT(compound); this.tank.writeToNBT(compound); super.writeToNBT(compound); return compound; } @Override public void readFromNBT(NBTTagCompound compound) { super.readFromNBT(compound); this.handler.deserializeNBT(compound.getCompoundTag("Inventory")); this.isTurned = compound.getBoolean("Working"); this.storage.readFromNBT(compound); this.tank.readFromNBT(compound); } public boolean isUsableByPlayer(EntityPlayer player) { return this.world.getTileEntity(this.pos) != this ? false : player.getDistanceSq((double)this.pos.getX() + 0.5D, (double)this.pos.getY() + 0.5D, (double)this.pos.getZ() + 0.5D) <= 64.0D; } @Override @Nullable public SPacketUpdateTileEntity getUpdatePacket() { return new SPacketUpdateTileEntity(this.pos, 3, this.getUpdateTag()); } @Override public NBTTagCompound getUpdateTag() { return this.writeToNBT(new NBTTagCompound()); } @Override public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) { super.onDataPacket(net, pkt); handleUpdateTag(pkt.getNbtCompound()); } } GUI package com.xxTFxx.siberianadv.gui; import com.xxTFxx.siberianadv.Main; import com.xxTFxx.siberianadv.container.ContainerPortableGenerator; import com.xxTFxx.siberianadv.tileentity.TileEntityPortableGenerator; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.ResourceLocation; public class GUIPortableGenerator extends GuiContainer { private static final ResourceLocation TEXTURES = new ResourceLocation(Main.MOD_ID + ":textures/gui/portable_generator.png"); private final TileEntityPortableGenerator tileentity; private final InventoryPlayer player; public GUIPortableGenerator(InventoryPlayer player , TileEntityPortableGenerator tileentity) { super(new ContainerPortableGenerator(player, tileentity)); this.tileentity = tileentity; this.player = player; } public void drawScreen(int mouseX, int mouseY, float partialTicks) { this.drawDefaultBackground(); super.drawScreen(mouseX, mouseY, partialTicks); this.renderHoveredToolTip(mouseX, mouseY); } @Override public void initGui() { super.initGui(); this.buttonList.add(new GuiButton(0, this.guiLeft + 20, this.guiTop + 20 , 30 , 20 , this.setButtonText())); } private String setButtonText() { if(this.tileentity.isWorking()) { return "OFF"; } else return "ON"; } @Override protected void actionPerformed(GuiButton button) { if(this.tileentity.isWorking()) { this.tileentity.turnOffOn(); this.selectedButton.displayString = "ON"; } else { this.tileentity.turnOffOn(); this.selectedButton.displayString = "OFF"; } } @Override protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { if(mouseX > this.guiLeft + 150 && mouseY > this.guiTop + 5 && mouseX < this.guiLeft + 169 && mouseY < this.guiTop + 80) { this.drawHoveringText(Integer.toString(this.tileentity.getEnergyStored()), mouseX - this.guiLeft, mouseY - this.guiTop); } if(mouseX > this.guiLeft + 128 && mouseY > this.guiTop + 5 && mouseX < this.guiLeft + 147 && mouseY < this.guiTop + 80) { this.drawHoveringText(Integer.toString(this.tileentity.getFluidAmount()), mouseX - this.guiLeft, mouseY - this.guiTop); } } @Override protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) { GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); this.mc.getTextureManager().bindTexture(TEXTURES); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize); int k = this.getEnergyStoredScaled(75); this.drawTexturedModalRect(this.guiLeft + 152, this.guiTop + 7, 176, 32, 16, 75 - k); int l = this.getFluidStored(75); this.drawTexturedModalRect(this.guiLeft + 130, this.guiTop + 7, 176, 32, 16, 75 - l); } private int getEnergyStoredScaled(int pixels) { int i = this.tileentity.getEnergyStored(); int j = this.tileentity.getMaxEnergyStored(); return i != 0 && j != 0 ? i * pixels / j : 0; } private int getFluidStored(int pixels) { int i = this.tileentity.getFluidAmount(); int j = this.tileentity.getMaxFluidAmount(); return i != 0 && j != 0 ? i * pixels / j : 0; } } Container package com.xxTFxx.siberianadv.container; import com.xxTFxx.siberianadv.tileentity.TileEntityPortableGenerator; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.SlotItemHandler; public class ContainerPortableGenerator extends Container { private final TileEntityPortableGenerator tile; public ContainerPortableGenerator(InventoryPlayer player , TileEntityPortableGenerator tile) { this.tile = tile; IItemHandler handler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); this.addSlotToContainer(new SlotItemHandler(handler, 0, 105, 13)); this.addSlotToContainer(new SlotItemHandler(handler, 1, 105, 56)); for(int y = 0; y < 3; y++) { for(int x = 0; x < 9; x++) { this.addSlotToContainer(new Slot(player, x + y*9 + 9, 8 + x*18, 84 + y*18)); } } for(int x = 0; x < 9; x++) { this.addSlotToContainer(new Slot(player, x, 8 + x * 18, 142)); } } @Override public boolean canInteractWith(EntityPlayer playerIn) { return this.tile.isUsableByPlayer(playerIn); } } Block package com.xxTFxx.siberianadv.block.machines; import com.xxTFxx.siberianadv.Main; import com.xxTFxx.siberianadv.block.RotBlock; import com.xxTFxx.siberianadv.init.FluidInit; import com.xxTFxx.siberianadv.init.ModBlocks; import com.xxTFxx.siberianadv.tabs.ModTab; import com.xxTFxx.siberianadv.tileentity.TileEntityPortableGenerator; import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.properties.PropertyDirection; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.energy.CapabilityEnergy; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidUtil; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; public class PortableGenerator extends Block{ //public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); public PortableGenerator(String name) { super(Material.IRON); setUnlocalizedName(Main.MOD_ID + "." + name); setRegistryName(name); setCreativeTab(ModTab.Mod_Tab); setHardness(0.5F); ModBlocks.blocks.add(this); } @Override public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { IFluidHandler handler = worldIn.getTileEntity(pos).getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null); TileEntityPortableGenerator tile = (TileEntityPortableGenerator)worldIn.getTileEntity(pos); if(playerIn.getHeldItemMainhand().getItem() == FluidUtil.getFilledBucket(new FluidStack(FluidInit.PETROLEUM_FLUID, Fluid.BUCKET_VOLUME)).getItem() && tile.canFillTank(1000)) if(playerIn.isCreative()) { handler.fill(new FluidStack(FluidInit.PETROLEUM_FLUID, 1000), true); } else { handler.fill(new FluidStack(FluidInit.PETROLEUM_FLUID, 1000), true); playerIn.getHeldItemMainhand().shrink(1); playerIn.addItemStackToInventory(new ItemStack(Items.BUCKET)); } else if(!worldIn.isRemote) { playerIn.openGui(Main.MOD_ID, Main.GUI_PORTABLE_GENERATOR, worldIn, pos.getX(), pos.getY(), pos.getZ()); System.out.println(tile.getEnergyStored()); System.out.println(tile.getFluidAmount()); } return true; } @Override public boolean hasTileEntity(IBlockState state) { return true; } @Override public TileEntity createTileEntity(World world, IBlockState state) { return new TileEntityPortableGenerator(); } public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) { } @Override public void breakBlock(World worldIn, BlockPos pos, IBlockState state) { TileEntity tileentity = worldIn.getTileEntity(pos); if(tileentity instanceof TileEntityPortableGenerator) { TileEntityPortableGenerator tileEntityPortableGenerator = (TileEntityPortableGenerator)tileentity; ItemStack itemstack = new ItemStack(Item.getItemFromBlock(this)); NBTTagCompound nbttagcompound = new NBTTagCompound(); nbttagcompound.setInteger("Energy", tileEntityPortableGenerator.getEnergyStored()); nbttagcompound.setInteger("Fuel", tileEntityPortableGenerator.getFluidAmount()); itemstack.setTagCompound(nbttagcompound); spawnAsEntity(worldIn, pos, itemstack); } super.breakBlock(worldIn, pos, state); } @Override public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) { NBTTagCompound nbt = stack.getTagCompound(); if(nbt != null) { TileEntityPortableGenerator tileGenerator = (TileEntityPortableGenerator)worldIn.getTileEntity(pos); tileGenerator.setEnergy(nbt.getInteger("Energy")); tileGenerator.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).fill(new FluidStack(FluidInit.PETROLEUM_FLUID, nbt.getInteger("Fuel")), true); } super.onBlockPlacedBy(worldIn, pos, state, placer, stack); } }
  13. Thank you! That worked.
  14. The thing is I wanted to do it for the vanilla sapling.
  15. I'm trying to make saplings placeable on snow. I know the is canSustainPlant() method in Block class, but is there any way to modify it in BlockSnowBlock class?
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.