Jump to content

GenElectrovise

Members
  • Posts

    132
  • Joined

  • Last visited

Posts posted by GenElectrovise

  1. Hi all. I'm trying to get the age of a patch of vanilla potatoes from a tile entity, but I can't seem to find a way to do it. I've already seen this post regarding this in v1.10 but the code examples don't quite have enough info in them for me (an almost semi-experienced modder) to be able to replicate it and they examples aren't explained in detail. I have also read and mostly understand the concept of blockstates (painful but useful :) ) from this forge readthedocs page.
    I have tried adding logging code and can get the properties as a PropertyInteger:

    Spoiler
    
    Properties{PropertyInteger{name=age, clazz=class java.lang.Integer, values=[0, 1, 2, 3, 4, 5, 6, 7]}=2}
    Property keys[PropertyInteger{name=age, clazz=class java.lang.Integer, values=[0, 1, 2, 3, 4, 5, 6, 7]}]

     

    from the potatoes but can't get the actual value of age from it. It says it at the end of the first one (from printing out the results of the world.getBlockState(blockPos).getProperties() method where the blockPos is that of the potatoes), but I don't know how to retrieve that value. I've looked at the possible methods I can use and none seem to help.

    -----------------------------

    My tile entity class -- relevant methods at the bottom. It should break potatoes/ replace them with air and spawn a EntityItem of an Amethyst Potato at the broken block's BlockPos (can break blocks but doesn't spawn entity but that's a separate issue -- right now it just doesn't get through the check for the crop's age)

    -----------------------------

    Spoiler
    
    package com.magiksmostevile.tileentity;
    
    import java.util.Iterator;
    
    import com.google.common.collect.ImmutableMap;
    import com.magiksmostevile.EvileLog;
    import com.magiksmostevile.init.EvileItems;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.BlockCrops;
    import net.minecraft.block.BlockPotato;
    import net.minecraft.block.material.Material;
    import net.minecraft.block.properties.IProperty;
    import net.minecraft.block.properties.PropertyInteger;
    import net.minecraft.block.state.BlockStateContainer;
    import net.minecraft.block.state.IBlockState;
    import net.minecraft.entity.item.EntityItem;
    import net.minecraft.init.Blocks;
    import net.minecraft.item.ItemStack;
    import net.minecraft.nbt.NBTTagCompound;
    import net.minecraft.server.MinecraftServer;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.util.ITickable;
    import net.minecraft.util.math.BlockPos;
    import net.minecraft.world.IBlockAccess;
    import net.minecraft.world.World;
    import net.minecraftforge.common.DimensionManager;
    
    public class TileEntityAmethystCrystal extends TileEntity implements ITickable {
    
        private String customName;
        private World world;
    
        public TileEntityAmethystCrystal() {
    	super();
    	EvileLog.logText(true, 1, "Constructing crystal tile entity (Not called previously - added by me)");
        }
    
        private String getName() {
    	return this.hasCustomName() ? this.customName : "te.tile_entity_amethyst_crystal";
        }
    
        private boolean hasCustomName() {
    	return this.customName != null && !this.customName.isEmpty();
        }
    
        private void setCustomName(String customNameIn) {
    	this.customName = customNameIn;
        }
    
        @Override
        public void readFromNBT(NBTTagCompound compound) {
    	super.readFromNBT(compound);
        }
    
        @Override
        public NBTTagCompound writeToNBT(NBTTagCompound compound) {
    	return super.writeToNBT(compound);
        }
    
        @Override
        public void onLoad() { // HELPFUL POST FOR GETTING WORLD>>> https://www.minecraftforge.net/forum/topic/41640-world-and-position-empty-in-tile-entity/
    	this.world = this.getWorld();
        }
    
        @Override
        public void update() {
    	int posX = this.getPos().getX();
    	int posY = this.getPos().getY();
    	int posZ = this.getPos().getZ();
    	int i = posX;
    	int j = posY;
    	int k = posZ;
    
    	EvileLog.logText(false, 1, "tile entity coords are: " + posX + ":" + posY + ":" + posZ);
    
    	try {
    	    for (i = posX - 2; i < posX + 3; i++) {
    		for (j = posY - 1; j < posY + 1; j++) {
    		    for (k = posZ - 2; k < posZ + 3; k++) {
    			BlockPos blockPos = new BlockPos(i, j, k);
    			Block block = world.getBlockState(blockPos).getBlock();
    			EvileLog.logText(false, 1, "for loop 3; world is: " + world + "; blockPos is: " + blockPos
    				+ "; block is: " + block);
    			doBlockReplacement(block, blockPos);
    		    }
    
    		}
    	    }
    	} catch (NullPointerException e) {
    	    System.out.println("NullPointerException! world.getBlockState(blockPos).getBlock() returned null? ");
    	    e.printStackTrace();
    	} catch (Exception e) {
    	    e.printStackTrace();
    	}
    
        }
    
        private void doBlockReplacement(Block block, BlockPos blockPos) {
    	if (block instanceof BlockPotato) {
    	    BlockPotato blockCrop = (BlockPotato) block;
    	    System.out.println("Properties" + world.getBlockState(blockPos).getProperties());
    	    System.out.println("Property keys" + world.getBlockState(blockPos).getPropertyKeys());
    	    
    	    /*
    	    if (AGE > 7 OR CROP IS AT MAX AGE) {
    		doReplacementAndSpawning(block, blockPos);
    	    }
    	    */
    	}
        }
    
        private void doReplacementAndSpawning(Block block, BlockPos blockPos) {
    	// System.out.println(block.getBlockState().getProperties());
    	System.out.println("Properties" + world.getBlockState(blockPos).getProperties());
    	System.out.println("Property keys" + world.getBlockState(blockPos).getPropertyKeys());
    	IBlockState air = Blocks.AIR.getDefaultState();
    	world.setBlockState(blockPos, air);
    	EntityItem toDrop = new EntityItem(world, blockPos.getX(), blockPos.getY(), blockPos.getZ(),
    		new ItemStack(EvileItems.AMETHYST_POTATO, 1));
        }
        
        /*
         * LATEST ATTEMPT FROM LINKED v1.10 ISSUE PAGE -- DON'T KNOW WHAT 'e' IS IN THE CODE
        private void getAge(??????????? e) {
    	int age = -1;
    	int maxAge = -1;
    	for (IProperty<?> p : e.getState().getPropertyNames())
    	{
    		if (p.getName().toLowerCase() == "age")
    		{
    			if (p instanceof PropertyInteger)
    			{
    				PropertyInteger ageProp = (PropertyInteger) p;
    				age = e.getState().getValue(ageProp).intValue();
    				maxAge = ageProp.getAllowedValues().size() - 1;
    			}
    		}
    	}
        }
        */
    }

     

    Anyway! Wow that's a lot of text! Any help welcome I don't know what else I can try!

    Thanks!

×
×
  • Create New...

Important Information

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