Jump to content

STEENBRINK

Members
  • Posts

    6
  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

STEENBRINK's Achievements

Tree Puncher

Tree Puncher (2/8)

0

Reputation

  1. So yeah, it returns false only in the randomDisplayTick, which is client side. How do I get the correct value to the client then? I have no experience with this, sorry
  2. I have made a very basic tile entity with a boolean and a getter function. But for some reason it always returns false, even though it really shouldn't. Tile Entity code: public class TileEntityForge extends TileEntity implements ITickable { private boolean isWorking = false; private int smeltingTime = 1200; private int progress = 0; /* * Done S T save the progress */ private ItemStackHandler inventory = new ItemStackHandler(1); @Override public NBTTagCompound writeToNBT(NBTTagCompound compound) { compound.setTag("inventory", inventory.serializeNBT()); compound.setInteger("progress", progress); return super.writeToNBT(compound); } @Override public void readFromNBT(NBTTagCompound compound) { inventory.deserializeNBT(compound.getCompoundTag("inventory")); this.progress = compound.getInteger("progress"); if(this.progress > 0){ this.isWorking = true; } super.readFromNBT(compound); } @Override public boolean hasCapability(Capability<?> capability, @Nullable EnumFacing facing) { return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); } @Nullable @Override public <T> T getCapability(Capability<T> capability, @Nullable EnumFacing facing) { return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY ? (T)inventory : super.getCapability(capability, facing); } /* * Updates the block every tick * Converts bronze alloys into bronze ingots */ @Override public void update() { //Checks if the Item in the slot is a bronze alloy if(inventory.getStackInSlot(0).getItem() == ModItems.bronze_alloy){ //Checks if the forge is processing already if(this.isWorking){ //Checks if finished, if so set the inventory to 4 bronze ingots and resets if(this.progress < 1){ inventory.setStackInSlot(0, new ItemStack(ModItems.bronze_ingot, 4)); this.isWorking = false; this.progress = 0; ExtraTools.logger.debug("finished!"); //else progresses }else { this.progress--; //this.spawnParticles(world, pos); } //else starting the progress }else{ this.isWorking = true; this.progress = this.smeltingTime; ExtraTools.logger.debug("start!"); } //resets if there is no item and progress is being made } else if (this.isWorking) { this.isWorking = false; this.progress = 0; } } @SideOnly(Side.CLIENT) private void spawnParticles(World world, BlockPos pos){ Random random = world.rand; Minecraft mc = Minecraft.getMinecraft(); double d1 = (double) ((float) pos.getX() + random.nextFloat() / 2 + 0.25); double d2 = (double) ((float) pos.getY() + random.nextFloat()); double d3 = (double) ((float) pos.getZ() + random.nextFloat() / 2 + 0.25); mc.world.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d1, d2, d3, 0.0D, 0.0D, 0.0D, new int[0]); } //public function to check if the tile is busy public boolean isWorking(){ ExtraTools.logger.error("TILE: " + this.isWorking); return this.isWorking; } } Block code: public class BlockForge extends BlockTileEntity<TileEntityForge> { // 0 = north false // | // V // 7 = west true public static final String PROPERTY_NAME = "facing_active"; public static final PropertyInteger PROPERTY = PropertyInteger.create(PROPERTY_NAME, 0, 7); public BlockForge(){ super(Material.ROCK, Names.Blocks.FORGE); this.setTickRandomly(true); this.setDefaultState(this.getBlockState().getBaseState().withProperty(PROPERTY, 1)); } /* * written on 17-01-19 by Axel and Bram on version 0.1 * * this function triggers when you click on the block * * */ /* * Done S T lock the inventory while working * Done S T lock the inventory to one bronze alloy * Done A T give a message when clicked while working or wrong item */ @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { //checks if the world is local or not if (!world.isRemote) { //gets the tile entity from the world position TileEntityForge tile = getTileEntity(world, pos); //checks if the tile is capable of handling items IItemHandler itemHandler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side); ExtraTools.logger.debug(itemHandler.getStackInSlot(0).getUnlocalizedName()); ExtraTools.logger.debug(Names.Items.BRONZE_ALLOY); //checks if the player is sneaking if (!player.isSneaking()) { if(!tile.isWorking()) { //checks if the players hand is empty if (player.getHeldItem(hand).isEmpty()) { //if player hand is empty and the player is not sneaking: gets the items from the tile and puts in in the hand of the player player.setHeldItem(hand, itemHandler.extractItem(0, 64, false)); } else { //checks if held items is bronze alloy if (player.getHeldItem(hand).getItem() == ModItems.bronze_alloy) { //if player hand is not empty, contains bronze alloy and the player is not sneaking: puts the item from the hand into the tile itemHandler.insertItem(0, player.getHeldItem(hand).splitStack(1), false); }else { player.sendMessage(new TextComponentString("This machine only accepts bronze alloys.")); } } //makes sure the block is updated tile.markDirty(); } else { player.sendMessage(new TextComponentString("This forge is currently in use!")); } } else { //get the stack from the tileEntity ItemStack stack = itemHandler.getStackInSlot(0); //if the stack is not empty if (!stack.isEmpty()) { //if player is sneaking and the stack is not empty: converts the name of the item and displays it in the chat String localized = ExtraTools.proxy.localize(stack.getUnlocalizedName() + ".name"); player.sendMessage(new TextComponentString(stack.getCount() + "x " + localized)); } else { //if player is sneaking and the stack is empty: display Empty in the chat player.sendMessage(new TextComponentString("Empty")); } } } return true; } /* * Made by Axel and Bram on 17-01-19 version 0.1 * * On block Broken Drop Items * */ @Override public void breakBlock(World world, BlockPos pos, IBlockState state) { //gets the tileEntity from the world TileEntityForge tile = getTileEntity(world, pos); //checks if the tile is capable of handling items IItemHandler itemHandler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.NORTH); //gets the item from the tile ItemStack stack = itemHandler.getStackInSlot(0); //checks if the itemstack from the tile is not empty if (!stack.isEmpty()) { //if itemstack is not empty: drop new Item on the ground with same data EntityItem item = new EntityItem(world, pos.getX(), pos.getY(), pos.getZ(), stack); world.spawnEntity(item); } //breaks the block on pos super.breakBlock(world, pos, state); } @Override public Class<TileEntityForge> getTileEntityClass() { return TileEntityForge.class; } @Nullable @Override public TileEntityForge createTileEntity(World world, IBlockState state) { return new TileEntityForge(); } @Override protected BlockStateContainer createBlockState() { return new BlockStateContainer(this, PROPERTY); } @Override public int getMetaFromState(IBlockState state) { return state.getValue(PROPERTY); } @Override public IBlockState getStateFromMeta(int meta) { return this.getDefaultState().withProperty(PROPERTY, meta); } @Override public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) { EnumFacing entityFacing = placer.getHorizontalFacing(); int facing = 0; if(!world.isRemote) { if(entityFacing == EnumFacing.NORTH) { //south facing = 2; } else if(entityFacing == EnumFacing.EAST) { //west facing = 3; } else if(entityFacing == EnumFacing.SOUTH) { //north facing = 0; } else if(entityFacing == EnumFacing.WEST) { //east facing = 1; } world.setBlockState(pos, state.withProperty(PROPERTY, facing), 2); } } @Override public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) { TileEntityForge tile = (TileEntityForge) worldIn.getTileEntity(pos); int facing = worldIn.getBlockState(pos).getValue(PROPERTY); if(rand.nextInt(2) == 0) { ExtraTools.logger.error(tile.isWorking()); } if(rand.nextInt(8) == 0) { if (tile.isWorking()) { ExtraTools.logger.error("Working!"); if (facing < 4) { ExtraTools.logger.error("<4"); worldIn.setBlockState(pos, stateIn.withProperty(PROPERTY, facing + 4)); } //worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, pos.getX() + 0.5D, pos.getY() + 1.0D, pos.getZ() + 0.5D, 0.0D, 0.1D, 0.0D, new int[0]); //worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, pos.getX() + 0.5D, pos.getY() + 1.0D, pos.getZ() + 0.5D, 0.0D, 0.1D, 0.0D, new int[0]); //worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, pos.getX() + 0.5D, pos.getY() + 1.0D, pos.getZ() + 0.5D, 0.0D, 0.1D, 0.0D, new int[0]); } else if (facing > 3) { worldIn.setBlockState(pos, stateIn.withProperty(PROPERTY, facing - 4)); } } } @Override public boolean isTopSolid(IBlockState state) { return super.isTopSolid(state); } } SC: https://github.com/axel-wessels/ExtraTools Forge version: 1.12.2-14.23.5.2768 Am I just stupid or is something going on here?
  3. I have a barrel TileEntity, the idea is that you mix two fluids in there and it makes a third. The way that is done, is by having a intermediate fluid, the so called CraftingFluid. Here is the recepe handler for that (from 1.7.10): https://github.com/STEENBRINK/Kaasmod-2-1.7.10/blob/master/src/main/java/nl/steenbrink/kaasmod/init/RecipesBarrel.java The way I render this CraftingFluid in the barrel is by taking the texture from the first added fluid (or primary fluid) by using nbt on the fluidstack. Now there used to be a way to get the IIcon from the FluidStack. (full code here: https://github.com/STEENBRINK/Kaasmod-2-1.7.10/blob/master/src/main/java/nl/steenbrink/kaasmod/fluid/FluidCrafting.java) My question is if there is a way to "set" the texture outside the constructor, because it changes every time I make a new craftingfluid. Otherwise I will have to rewrite the whole crafting thingamagic. I hope this clears it up a bit.
  4. I know that... I say that in the post: "That is not working anymore, obviously"
  5. So I am updating my mod from 1.7.2 (haven't had time for a while). In that mod I used a crafting fluid for a crafting part of my mod. I rendered the crafting fluid with the mbt tags of the fluids that went in like this: That is not working anymore, obviously, but I can not figure out a way to do this now, since the resourcelocations are set in the constructor and cannot be eddited in any way, as far as I know. Is there a way to accomplish this now?
×
×
  • Create New...

Important Information

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