Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[UNSOLVED]Strange things happen with my energysystem[1.8]


ItsAMysteriousYT
 Share

Recommended Posts

Im working on an energysystem in my mod atm and a really weird bug accurd - when i connect the blocks with each other (using a variable in IEEP), then at some point the tileentity they are connected to is the same for all of them and sometimes even a tileentity that is not in the circuit. I don't know if the bug is positioned in the saving of the coordinates or somewhere else. Hopefully someone can help me fix this. Here are the classes i use:

TileEntity_Electric:

 

 

package itsamysterious.mods.reallifemod.core.blocks.tiles;

 

import itsamysterious.mods.reallifemod.core.tiles.RLMTileEntity;

import net.minecraft.nbt.NBTTagCompound;

import net.minecraft.server.gui.IUpdatePlayerListBox;

import net.minecraft.tileentity.TileEntity;

import net.minecraft.util.BlockPos;

 

public class TileEntity_Electric extends RLMTileEntity implements IUpdatePlayerListBox{

public TileEntity_Electric from;

private float voltage;

private int age;

private boolean isConnected;

 

public TileEntity_Electric(String string) {

super(string);

 

}

 

public TileEntity_Electric(String string, int i) {

this(string);

this.rotation=i;

}

 

@Override

public void update() {

    if(from!=null){

    voltage = from.getVoltageValue();

    isConnected=true;

    }else{

    isConnected=false;

    }

   

}

 

 

    @Override

    public void writeToNBT(NBTTagCompound compound){

    NBTTagCompound tag=new NBTTagCompound();

    compound.setTag("RLMElectrizityTag", tag);

    if(from!=null){

    BlockPos pto = from.getPos();

    tag.setIntArray("ConectedTo", new int[]{pto.getX(),pto.getY(),pto.getZ()});

    }

    super.writeToNBT(compound);

 

    }

   

    @Override

    public void readFromNBT(NBTTagCompound compound) {

    super.readFromNBT(compound);

    NBTTagCompound rlmtag = compound.getCompoundTag("RLMTileTag");

    NBTTagCompound tag=rlmtag.getCompoundTag("RLMElectrizityTag");

    int[] i = tag.getIntArray("ConectedTo");

    if(i.length==3){

    //if(worldObj.isRemote&&worldObj.getTileEntity(new BlockPos(i[0],i[1],i[2])) instanceof TileEntity_Electric){

        //this.connectTo((TileEntity_Electric)worldObj.getTileEntity(new BlockPos(i[0],i[1],i[2])));

    // }

    }

worldObj.markBlockForUpdate(getPos());

    this.rotation=tag.getFloat("Rotation");

    }

 

public void connectTo(TileEntity_Electric t){

this.from = t;

}

 

public float getVoltageValue() {

float value=voltage;

this.voltage=0;

return value;

}

 

public float getVoltage() {

return voltage;

}

 

public void setVoltage(float voltage) {

this.voltage = voltage;

}

 

}

 

 

 

 

ItemCable(Connects the BLocks up):

 

 

package itsamysterious.mods.reallifemod.core.items;

 

import itsamysterious.mods.reallifemod.core.RealLifeMod_Blocks;

import itsamysterious.mods.reallifemod.core.blocks.tiles.TileEntity_Electric;

import itsamysterious.mods.reallifemod.core.lifesystem.RLMPlayerProps;

import net.minecraft.block.BlockAir;

import net.minecraft.client.Minecraft;

import net.minecraft.entity.Entity;

import net.minecraft.entity.player.EntityPlayer;

import net.minecraft.item.Item;

import net.minecraft.item.ItemStack;

import net.minecraft.util.BlockPos;

import net.minecraft.util.ChatComponentText;

import net.minecraft.util.EnumChatFormatting;

import net.minecraft.world.World;

import net.minecraftforge.fml.common.registry.GameRegistry;

 

public class ItemCable extends Item{

 

public ItemCable() {

setUnlocalizedName("ItemCable");

GameRegistry.registerItem(this, getUnlocalizedName().substring(5));

}

 

@Override

public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {

BlockPos pos = Minecraft.getMinecraft().objectMouseOver.getBlockPos();

RLMPlayerProps props = RLMPlayerProps.get(player);

if(world.getTileEntity(pos) instanceof TileEntity_Electric){

TileEntity_Electric toConnectTile = (TileEntity_Electric) world.getTileEntity(pos);

if(props.lastTile!=null&&props.lastTile!=toConnectTile){

toConnectTile.connectTo(props.lastTile);

props.lastTile=toConnectTile;

}

else{

player.addChatMessage(new ChatComponentText("Now in "+EnumChatFormatting.GREEN+"Connection Mode"+EnumChatFormatting.RESET+"To stop connecting, hold SHIFT+RIGHTCLICK! "));

props.lastTile = toConnectTile;

}

 

}else

{

if(world.getBlockState(pos).getBlock() instanceof BlockAir){

player.addChatMessage(new ChatComponentText("Stopped "+EnumChatFormatting.RED+"Connection Mode"));

props.lastTile=null;

}else

{

world.setBlockState(pos, RealLifeMod_Blocks.cable.getDefaultState());

}

 

}

return stack;

}

 

}

 

 

 

 

and some tileentities that extend TileEntity_Electric-perhaps the bug is in here:

LanternTileEntity

 

 

package itsamysterious.mods.reallifemod.core.blocks.tiles;

 

import itsamysterious.mods.reallifemod.core.tiles.RLMTileEntity;

import net.minecraft.block.state.IBlockState;

import net.minecraft.client.Minecraft;

import net.minecraft.nbt.NBTTagCompound;

import net.minecraft.network.NetworkManager;

import net.minecraft.network.Packet;

import net.minecraft.network.play.server.S35PacketUpdateTileEntity;

import net.minecraft.util.AxisAlignedBB;

import net.minecraft.util.BlockPos;

import net.minecraft.world.World;

 

public class TileEntity_Lantern extends TileEntity_Electric {

public float rotation;

public boolean isActive;

 

public TileEntity_Lantern() {

super("LanternTileentity");

}

 

public TileEntity_Lantern(int i) {

super("LanternTileentity");

float rot = i*90;

System.out.println(i);

this.rotation=rot;

}

 

    @Override

    public void writeToNBT(NBTTagCompound compound){

    NBTTagCompound tag=new NBTTagCompound();

    tag.setBoolean("IsActive", isActive);

    tag.setFloat("Rotation", rotation);

    compound.setTag("LanternTag", tag);

    super.writeToNBT(compound);

 

    }

   

    @Override

    public void readFromNBT(NBTTagCompound compound) {

    super.readFromNBT(compound);

    NBTTagCompound tag=compound.getCompoundTag("LanternTag");

    this.isActive=tag.getBoolean("IsActive");

    this.rotation=tag.getFloat("Rotation");

    }

 

    @Override

    public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt)

    {

      NBTTagCompound tag = pkt.getNbtCompound();

      readFromNBT(tag);

    }

   

    public Packet getDescriptionPacket()

    {

      NBTTagCompound tag = new NBTTagCompound();

      writeToNBT(tag);

      return new S35PacketUpdateTileEntity(getPos(), 1, tag);

    }

   

    @Override

    public void update(){

    super.update();

    if(getVoltage()>0){

    isActive=true;

    }else

    isActive=false;

   

    if(isActive){

    worldObj.getBlockState(getPos()).getBlock().setLightLevel(100.0f);

    }else

    {

    worldObj.getBlockState(getPos()).getBlock().setLightLevel(0);

    }

   

    }

   

    public AxisAlignedBB getRenderBoundingBox(){

return super.getRenderBoundingBox();

    }

}

 

 

 

 

TileEntity_Powerline:

 

 

public float rotation;

public boolean isActive;

int[] p;

 

public TileEntity_PowerLine() {

super("PowerLineTileEntity");

}

 

@Override

public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newState) {

return (oldState.getBlock() != newState.getBlock());

}

 

public TileEntity_PowerLine(int i) {

this();

float rot = i*90;

System.out.println(i);

this.rotation=rot;

}

 

@Override

public void updateContainingBlockInfo() {

super.updateContainingBlockInfo();

 

}

 

    @Override

    public void writeToNBT(NBTTagCompound compound){

    NBTTagCompound tag=new NBTTagCompound();

    tag.setBoolean("IsActive", isActive);

    tag.setFloat("Rotation", rotation);

    compound.setTag("PowerLineTag", tag);

    super.writeToNBT(compound);

 

    }

   

    @Override

    public void readFromNBT(NBTTagCompound compound) {

    super.readFromNBT(compound);

    NBTTagCompound tag=compound.getCompoundTag("PowerLineTag");

    this.isActive=tag.getBoolean("IsActive");

    this.rotation=tag.getFloat("Rotation");

    p=tag.getIntArray("TilePos");

    }

 

    @Override

    public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt)

    {

      NBTTagCompound tag = pkt.getNbtCompound();

      readFromNBT(tag);

    }

   

    public Packet getDescriptionPacket()

    {

      NBTTagCompound tag = new NBTTagCompound();

      writeToNBT(tag);

      return new S35PacketUpdateTileEntity(getPos(), 1, tag);

    }

   

    public AxisAlignedBB getRenderBoundingBox(){

return super.getRenderBoundingBox().expand(1000, 1000, 1000);

    }

   

    @Override

    public void update() {

    super.update();

    }

   

    @Override

    public float getVoltageValue() {

    return this.getVoltage();

    }

 

}

 

 

 

Link to comment
Share on other sites

  • Replies 99
  • Created
  • Last Reply

Top Posters In This Topic

public class ItemCable extends Item{
private static TileEntity_Electric lastTile;

 

i told you this already in two other posts. DONT USE STATIC if you have NO idea what it is doing. Dont save variables in the item classs u need to use NBT if u want them to save data

Link to comment
Share on other sites

Yes, i updated all my tiles so that the rotation is being set in OnBlockPlaced by and is initially set too zero. No i only have one constructor that looks like this:

 

public TileEntityElectric(){

  super("TileEntityElectric");

}

 

OH - maybe i can solve the problem if i register TileEntityElectric? Cuz its just a class that is never use as itself - only as extended class?

Link to comment
Share on other sites

Nah didn't solved it. I reworked some of the methods and classes but now some of the tileentities immediatly disappear after placing. I think it is caused by wrong saving to NBT. Here is the baseclass and the not working subclssses:

 

Baseclass:

 

 

package itsamysterious.mods.reallifemod.core.blocks.tiles;

 

import itsamysterious.mods.reallifemod.core.tiles.RLMTileEntity;

import net.minecraft.nbt.NBTTagCompound;

import net.minecraft.server.gui.IUpdatePlayerListBox;

import net.minecraft.util.BlockPos;

import net.minecraft.world.World;

 

public abstract class TileEntity_Electric extends RLMTileEntity implements IUpdatePlayerListBox{

public TileEntity_Electric to;

private float voltage;

private int age;

 

public TileEntity_Electric(String string) {

super(string);

}

 

@Override

public void update() {

if (!this.hasWorldObj()) return;

World world = this.getWorld();

if (world.isRemote) return; 

 

 

    if(to!=null){

    to.setVoltage(onPowered(voltage));

    }   

worldObj.markBlockForUpdate(getPos());

}

 

 

    @Override

    public void writeToNBT(NBTTagCompound compound){

    NBTTagCompound tag=new NBTTagCompound();

    if(to!=null){

    BlockPos pto = to.getPos();

    NBTTagCompound blockPosNBT = new NBTTagCompound();       

    blockPosNBT.setInteger("x", pto.getX());

    blockPosNBT.setInteger("y", pto.getY());

    blockPosNBT.setInteger("z", pto.getZ());

    compound.setTag("connectedBlock", blockPosNBT);   

    }

    compound.setTag("RLMElectrizityTag", tag);

    }

   

    @Override

    public void readFromNBT(NBTTagCompound compound) {

    super.readFromNBT(compound);

 

    final int NBT_INT_ID = 3;

 

    NBTTagCompound tag=compound.getCompoundTag("RLMElectrizityTag");

   

    NBTTagCompound blockPosNBT = compound.getCompoundTag("connectedBlock");

BlockPos readBlockPos = null;

if (blockPosNBT.hasKey("x", NBT_INT_ID) && blockPosNBT.hasKey("y", NBT_INT_ID) && blockPosNBT.hasKey("z", NBT_INT_ID) ) {

readBlockPos = new BlockPos(blockPosNBT.getInteger("x"), blockPosNBT.getInteger("y"), blockPosNBT.getInteger("z"));

}

if (readBlockPos == null ) {

System.err.println("testBlockPos mismatch:" + readBlockPos);

}

if(readBlockPos!=null&&worldObj.getTileEntity(readBlockPos) instanceof TileEntity_Electric){

this.to = (TileEntity_Electric) worldObj.getTileEntity(readBlockPos);

}

    }

 

public void connectTo(TileEntity_Electric t){

this.to = t;

}

 

public float getVoltageValue() {

return voltage;

}

 

public float getVoltage() {

return voltage;

}

 

public void setVoltage(float voltage) {

this.voltage = voltage;

}

 

public float onPowered(float f){

worldObj.markBlockForUpdate(getPos());

return f;

}

 

}

 

 

 

 

Subclass:

 

 

package itsamysterious.mods.reallifemod.core.blocks.tiles;

 

import net.minecraft.nbt.NBTTagCompound;

import net.minecraft.network.NetworkManager;

import net.minecraft.network.Packet;

import net.minecraft.network.play.server.S35PacketUpdateTileEntity;

import net.minecraft.util.AxisAlignedBB;

import scala.collection.generic.VolatileAbort;

 

public class TileEntity_Lantern extends TileEntity_Electric {

public boolean isActive;

 

public TileEntity_Lantern() {

super("LanternTileentity");

}

 

    @Override

    public void writeToNBT(NBTTagCompound compound){

    super.writeToNBT(compound);

    NBTTagCompound tag=new NBTTagCompound();

    tag.setBoolean("IsActive", isActive);

    compound.setTag("LanternTag", tag);

 

    }

   

    @Override

    public void readFromNBT(NBTTagCompound compound) {

    super.readFromNBT(compound);

    NBTTagCompound tag=compound.getCompoundTag("LanternTag");

    this.isActive=tag.getBoolean("IsActive");

    }

 

    @Override

    public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt)

    {

      NBTTagCompound tag = pkt.getNbtCompound();

      readFromNBT(tag);

    }

   

    public Packet getDescriptionPacket()

    {

      NBTTagCompound tag = new NBTTagCompound();

      writeToNBT(tag);

      return new S35PacketUpdateTileEntity(getPos(), 1, tag);

    }

   

    @Override

    public void update(){

    super.update();

    if(getVoltage()>0){

    isActive=true;

    }else

    isActive=false;

   

    if(isActive){

    worldObj.getBlockState(getPos()).getBlock().setLightLevel(100.0f);

    }else

    {

    worldObj.getBlockState(getPos()).getBlock().setLightLevel(0);

    }

   

    }

   

    public AxisAlignedBB getRenderBoundingBox(){

return super.getRenderBoundingBox();

    }

 

@Override

public float onPowered(float f) {

    if(isActive){

    worldObj.getBlockState(getPos()).getBlock().setLightLevel(100.0f);

    }else

    {

    worldObj.getBlockState(getPos()).getBlock().setLightLevel(0);

    }

this.setVoltage(f);

return f;

}

 

}

 

 

 

 

Subclass 2:

 

 

package itsamysterious.mods.reallifemod.core.blocks.tiles;

 

import itsamysterious.mods.reallifemod.core.blocks.electrisity.BlockPowerLine;

import itsamysterious.mods.reallifemod.core.tiles.RLMTileEntity;

import net.minecraft.block.state.IBlockState;

import net.minecraft.client.Minecraft;

import net.minecraft.entity.player.EntityPlayer;

import net.minecraft.nbt.NBTTagCompound;

import net.minecraft.network.NetworkManager;

import net.minecraft.network.Packet;

import net.minecraft.network.play.server.S35PacketUpdateTileEntity;

import net.minecraft.tileentity.TileEntity;

import net.minecraft.util.AxisAlignedBB;

import net.minecraft.util.BlockPos;

import net.minecraft.world.World;

 

public class TileEntity_PowerLine extends TileEntity_Electric{

 

public TileEntity_PowerLine() {

super("PowerLineTileEntity");

}

 

@Override

public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newState) {

return (oldState.getBlock() != newState.getBlock());

}

 

    @Override

    public void writeToNBT(NBTTagCompound compound){

    super.writeToNBT(compound);

    }

   

    @Override

    public void readFromNBT(NBTTagCompound compound) {

    super.readFromNBT(compound);

    }

 

    @Override

    public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt)

    {

      NBTTagCompound tag = pkt.getNbtCompound();

      readFromNBT(tag);

    }

   

    public Packet getDescriptionPacket()

    {

      NBTTagCompound tag = new NBTTagCompound();

      writeToNBT(tag);

      return new S35PacketUpdateTileEntity(getPos(), 1, tag);

    }

   

    public AxisAlignedBB getRenderBoundingBox(){

return super.getRenderBoundingBox();

    }

   

    @Override

    public void update() {

    super.update();

    }

   

@Override

public float onPowered(float f) {

return f;

}

 

}

 

 

 

Link to comment
Share on other sites

OMG - MY stupidness solved the disappearing - i forgot to do super.writeToNBT() in TileENtity_Electric witch caused that all entities without NBT were okay and those with NBT where removed. But now the saving of the connected tile won't work. I try writing the BlockPos of the tile to NBT like this:

 

 

 

    @Override

    public void writeToNBT(NBTTagCompound compound){

    super.writeToNBT(compound);

    NBTTagCompound tag=new NBTTagCompound();

    if(to!=null){

    BlockPos pto = to.getPos();

    NBTTagCompound blockPosNBT = new NBTTagCompound();       

    blockPosNBT.setInteger("x", pto.getX());

    blockPosNBT.setInteger("y", pto.getY());

    blockPosNBT.setInteger("z", pto.getZ());

    compound.setTag("connectedBlock", blockPosNBT);   

    }

    compound.setTag("RLMElectrizityTag", tag);

    }

   

    @Override

    public void readFromNBT(NBTTagCompound compound) {

    super.readFromNBT(compound);

 

    final int NBT_INT_ID = 3;

 

    NBTTagCompound tag=compound.getCompoundTag("RLMElectrizityTag");

   

    NBTTagCompound blockPosNBT = compound.getCompoundTag("connectedBlock");

BlockPos readBlockPos = null;

if (blockPosNBT.hasKey("x", NBT_INT_ID) && blockPosNBT.hasKey("y", NBT_INT_ID) && blockPosNBT.hasKey("z", NBT_INT_ID) ) {

readBlockPos = new BlockPos(blockPosNBT.getInteger("x"), blockPosNBT.getInteger("y"), blockPosNBT.getInteger("z"));

}

if(worldObj!=null&&readBlockPos!=null&&worldObj.getTileEntity(readBlockPos) instanceof TileEntity_Electric){

to = (TileEntity_Electric) worldObj.getTileEntity(readBlockPos);

}

    }

 

 

 

But when i close the world and open it again, the 'to' variable isn't set.

 

Link to comment
Share on other sites

There is no world yet in

readFromNBT

.

 

So what im doing there atm will work in the future ? Cuz you say there is no fututre Yet. Also - the onBlockPlacedBy method i tried isn't working. Do i have to put it in the subclasses to?

 

public abstract class RLMBlockContainer extends Block implements ITileEntityProvider{

public RLMBlockContainer(Material materialIn) {
	super(materialIn);
}

@Override
public abstract TileEntity createNewTileEntity(World worldIn, int meta);

    public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) {
    	super.onBlockPlacedBy(worldIn, pos, state, placer, stack);
    	 TileEntity tileentity = worldIn.getTileEntity(pos);
         if (tileentity instanceof RLMTileEntity){
        	 RLMTileEntity tile = (RLMTileEntity)tileentity;
        	 tile.rotation = 90 * MathHelper.floor_double((double)(placer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
        	 worldIn.markBlockForUpdate(pos);
             System.out.println("Succesfully rotated "+tile.getName());
         }
    }
    
    @SideOnly(Side.CLIENT)
    public EnumWorldBlockLayer getBlockLayer()
    {
      return EnumWorldBlockLayer.SOLID;
    }
    
    @Override
    public boolean isFullCube() {
    	return true;
    }

Link to comment
Share on other sites

only read the position and access the tileentity when you need it

 

But i need to load it up immediatly, so the electrizity is being cast when player joines in world. So can i just set a global variable and in the update method put something like that:

 

if(to==null&&toCoords!=null){
  this.to=(TileEntity_Electric)worldObj.getTileEntity(toCoords);
}

Link to comment
Share on other sites

I have no idea what you are trying to say with the "no future yet" stuff. Are you attempting time travel?

 

About the TE, use lazy initialization. And keeping a strong reference to the other TE is a bad idea, it will cause memory leaks.

Oh HAHA no :P Must have been thinking of something else and wrote future :) What i wanted to ask is if there will be a world in readFromNBT later.

And for the tile - what you mean with lazy initialization? And also the tile need to know where to send the signal to or not im not connecting the two blocks with redstone or simillar blocklike structurs but just with cables that are rendered in the TESR if the tile. Thats why i need the 'to' variable in the class (if you mean that with strong reference :P)

Link to comment
Share on other sites

I don't care if you think that you "need" the reference to the TE. Keeping it there is a bad idea. If the other chunk unloads you will keep the TE instance alive and you have created a memory leak. If the chunk is then loaded again the next problem arises: You now have a reference to the wrong (dead) TE instance.

 

For lazy initialization: Google.

Link to comment
Share on other sites

This is how my TileEntity_Electric looks now - please tell me how i have to fix it im so lost on this i have absolutly no idea what im doing wrong :'(

I read that lazy initalization stuff but i do not understand the use of it e an also - how should i pass over the energy to the connected tile when i do not have a field.

 

MAN -IM SO LOST

 

Diesieben07 what you mean? How do i have to use that lazy stuff ?

 

package itsamysterious.mods.reallifemod.core.blocks.tiles;

import java.util.Random;

import itsamysterious.mods.reallifemod.core.tiles.RLMTileEntity;
import net.minecraft.client.Minecraft;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraft.server.gui.IUpdatePlayerListBox;
import net.minecraft.util.BlockPos;
import net.minecraft.util.EnumParticleTypes;
import net.minecraft.world.World;

public abstract class TileEntity_Electric extends RLMTileEntity implements IUpdatePlayerListBox{
private float voltage;
private boolean isUsuable;
private int age;
public BlockPos storedPos;
private TileEntity_Electric to;

public TileEntity_Electric getTo() {
	return to;
}

public TileEntity_Electric(String string) {
	super(string);
	isUsuable=true;
}

@Override
public void update() {
	if (!this.hasWorldObj()) return;
	World world = this.getWorld();

	if(worldObj.isRemote){
		Random rand = new Random();
		if(!isUsuable){
			if(Minecraft.getMinecraft().thePlayer.ticksExisted%3==0)
			worldObj.spawnParticle(EnumParticleTypes.CLOUD, pos.getX()+0.5, pos.getY()+1, pos.getZ()+0.5, -0.025+rand.nextFloat()/10,rand.nextDouble()/5, -0.025+rand.nextFloat()/10);
		}
	}else
	{

		if(storedPos!=null){
			if(world.getTileEntity(storedPos)instanceof TileEntity_Electric){
				to=(TileEntity_Electric)world.getTileEntity(storedPos);
			}
		}

		if(voltage>getMaxVoltage()){
			isUsuable=false;
		}

    	if(to!=null){
    		to.setVoltage(onPowered(this.voltage));
			world.markBlockForUpdate(storedPos);
    	}   
    	if(storedPos!=null&&worldObj.getTileEntity(storedPos)==null){
    		to=null;
    		storedPos=null;
    	}
	}
}


    @Override
    public void writeToNBT(NBTTagCompound compound){
    	super.writeToNBT(compound);
    	NBTTagCompound tag=new NBTTagCompound();
    	if(storedPos!=null){
    		BlockPos pto = storedPos;
    		NBTTagCompound blockPosNBT = new NBTTagCompound();        
    		blockPosNBT.setInteger("x", pto.getX());
    		blockPosNBT.setInteger("y", pto.getY());
    		blockPosNBT.setInteger("z", pto.getZ());
    		tag.setTag("connectedBlock", blockPosNBT);    	
    	}
    	tag.setBoolean("IsUsuable", isUsuable);
    	compound.setTag("RLMElectrizityTag", tag);
    }
    
    @Override
    public void readFromNBT(NBTTagCompound compound) {
    	super.readFromNBT(compound);

    	final int NBT_INT_ID = 3;

    	NBTTagCompound tag=compound.getCompoundTag("RLMElectrizityTag");
    	
    	NBTTagCompound blockPosNBT = tag.getCompoundTag("connectedBlock");
	BlockPos readBlockPos = null;
	if (blockPosNBT.hasKey("x", NBT_INT_ID) && blockPosNBT.hasKey("y", NBT_INT_ID) && blockPosNBT.hasKey("z", NBT_INT_ID) ) {
		readBlockPos = new BlockPos(blockPosNBT.getInteger("x"), blockPosNBT.getInteger("y"), blockPosNBT.getInteger("z"));
		storedPos=readBlockPos;
	}

	isUsuable=tag.getBoolean("IsUsuable");
    }
    
@Override
public Packet getDescriptionPacket() {
	NBTTagCompound nbtTagCompound = new NBTTagCompound();
	writeToNBT(nbtTagCompound);
	int metadata = getBlockMetadata();
	return new S35PacketUpdateTileEntity(this.pos, metadata, nbtTagCompound);
}

@Override
public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) {
	readFromNBT(pkt.getNbtCompound());
}

public void connectTo(TileEntity_Electric t){
	this.to=t;
	this.storedPos = t.getPos();
}

public float getVoltageValue() {
	return voltage;
}

public float getVoltage() {
	return this.voltage;
}

public void setVoltage(float voltage) {
	this.voltage = voltage;
}

public float onPowered(float f){
	return f;
}

public abstract float getMaxVoltage();

}

Link to comment
Share on other sites

1) Why is this class abstract?

2) Why are you writing the block metadata to the description packet? (You're ignoring it when the packet arrives, too)

3) Your "connectTo" function is never called, making storedPos always null (unless its being called from another class you haven't posted)

4) Why are you getting the World and saving it to the local variable world when you have access to (and use!) worldObj?

5) Why are you using

Minecraft.getMinecraft().thePlayer

?

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

1. So classes that extend on it have the required methods (e.g) getMaxVoltag()

2. just copied that from here: https://github.com/TheGreyGhost/MinecraftByExample/blob/master/src/main/java/minecraftbyexample/mbe20_tileentity_data/TileEntityData.java

3. It is is called in an  ItemCable class like this

 

 

@Override

public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {

BlockPos pos = Minecraft.getMinecraft().objectMouseOver.getBlockPos();

RLMPlayerProps props = RLMPlayerProps.get(player);

if(world.getTileEntity(pos) instanceof TileEntity_Electric){

TileEntity_Electric toConnectTile = (TileEntity_Electric) world.getTileEntity(pos);

if(props.lastTile!=null&&props.lastTile!=toConnectTile){

props.lastTile.connectTo(toConnectTile);

world.markBlockForUpdate(props.lastTile.getPos());

props.lastTile=toConnectTile;

}

else{

player.addChatMessage(new ChatComponentText("Now in "+EnumChatFormatting.GREEN+"Connection Mode"+EnumChatFormatting.RESET+"To stop connecting, hold SHIFT+RIGHTCLICK! "));

props.lastTile = toConnectTile;

}

 

}else

{

if(world.getBlockState(pos).getBlock() instanceof BlockAir){

player.addChatMessage(new ChatComponentText("Stopped "+EnumChatFormatting.RED+"Connection Mode"));

props.lastTile=null;

}else

{

world.setBlockState(pos, RealLifeMod_Blocks.cable.getDefaultState());

}

 

}

return stack;

}

 

 

 

4: Just copied that too

5: cuz TileEntity hasn't got a ticksexisted field

Link to comment
Share on other sites

1) ok, wasn't arbitrary. I still don't think you need to make the class abstract, but whatever.

2,4) Mmm...copy-pasta..

3) this method makes me cry.

 

5: cuz TileEntity hasn't got a ticksexisted field

 

And it will crash a dedicated server.  Good job.

 

So add one yourself.  It's got an update function, hasn't it?  You can create properties yes?  You can increment a counter in the update function, no?  Bloody freaking magic that is.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share




  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • Good Morning, I tried overriding one of the vanilla rock blocks according to instructions in this old thread, but failed for the same reason the org TM did, even though I got a tiny bit farther than he did. I can remove the original block entirely from world spawn, and replace it with custom version, which I want to prevent due to following up workload(adapting recipes etc. to custom block). What I tried solving the issue/actually making replacing(partially) work: 1. I had to use the original Forge variant of registering the block in main class, like that: which actually did use the custom granite block as replacer(not exactly illustrated in the old thread), but didn't consider it on world feature generation... 2. I then believed it was due to not using correct path variables for assets texture/models/blockstates etc., so I created missing asset packets for both, vanilla asset path, and my mod path. This also did not fix the issue with creating holes filled up with Items.AIR on world feature generation. 3. I then tried to remove the vanilla granite block during feature generation, and reimported it after with my replacement set up, during feature generation as well(according to @Luis_ST advice). But the holes were still there, only this time I got my replaced granite block spawned as well. What do I want to achieve(asking myself and you in hope maybe there's a better solution)? Mojang found it a good idea, to give one of the hardest rock materials on this planet, the .harvestLevel(soft as a pillow), so I can harvest it with a wooden pickaxes(which technically is even worth, but doesn't matter since wooden "pickaxe" tools do not exist in my mod). I really just want to compare harvestLevel of any of my tools, against the harvestLevel of the targetBlock, so I can automatically disallow harvesting it, if the tool doesn't match the harvestLevel(which for whatever reason does not work as intended in 1.16.5 Minecraft). Edit: and before you shout "doPlayerHarvestCheck". Yes, I do that! Edit2: Also, why are there Manga Comic Girls, on the right upper corner of my Monitor, stating how can it be that big?(whatever "it" is?)
    • so do i just change the launcher to java 8?  
    • I have this error when using forge (with mods or without) and have tried the official minecraft solution but it does not work, I am using the latest version for 1.18 and the official minecraft launcher
    • https://github.com/NotAFlyingGoose/GooseMod
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.