Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

STEENBRINK

Members
  • Joined

  • Last visited

Everything posted by STEENBRINK

  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?

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.