Jump to content

xxTFxx

Members
  • Posts

    15
  • Joined

  • Last visited

Recent Profile Visitors

1054 profile views

xxTFxx's Achievements

Tree Puncher

Tree Puncher (2/8)

0

Reputation

  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. The thing is I wanted to do it for the vanilla sapling.
  14. 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.