Ух уж этот TileEntity

Версия Minecraft
1.7.10
271
2
0
Значит он должен при определенных условиях ставить блоки. В методе "updateEntity()" я чекаю условия и в определенном мире ставит блок. Но блоки фантомные(не сохраняются,исчезаю при пкм и т.д.). Я пробовал убрать проверку на мир, получать "World" через "Minecraft.getMinecraft().theWorld" (пробовал и "tile.getWorldObj()") но увы, результат не менялся.
public class TileEntityForBlockWithTE extends TileEntity{ // да да название найс
public int progress = 0;
public int bl = 0;
public TileEntityForBlockWithTE(){
System.out.println("PLACE");
}

@Override
public void updateEntity() {
super.updateEntity();
//if(this.getWorldObj().isRemote){
this.progress++;
if(this.progress >=100){
Minecraft.getMinecraft().theWorld.setBlock(this.xCoord, this.yCoord+1, this.zCoord+this.bl, Blocks.gold_block);
this.getWorldObj().setBlock(this.xCoord, this.yCoord+1, this.zCoord+this.bl-1, Blocks.air);
this.progress = 0;
this.bl++;
if(this.bl >= 5)this.bl=0;
}
//}

}


public void writeToNBT(NBTTagCompound nbt)
   {
       super.writeToNBT(nbt);
       nbt.setInteger("progress", this.progress);
       nbt.setInteger("bl", this.bl);
   }

   public void readFromNBT(NBTTagCompound nbt)
   {
       super.readFromNBT(nbt);
       this.progress = nbt.getInteger("progress");
       this.bl = nbt.getInteger("bl");
       
       
   }
}
 
271
2
0
Все проблема решена! Есть еше вопросы:
Как передать информацию с тайла в рендер тайла?
Резонно ли использовать как я(progress++ и т.д.) для кулдаунов между выполнением кода?
И как передать информацию с блока в тайл(по пкм начать что-то в тайле)
 
271
2
0
В тайле есть блок? Не понял. Можно пример?(пкм по блоку и тайл выводит что-то в консоль)
 

timaxa007

Модератор
5,831
409
672
volt написал(а):
Как передать информацию с тайла в рендер тайла?
Код:
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityStand.class, new RenederTileEntityStand());
Код:
public class RenederTileEntityStand extends TileEntitySpecialRenderer {

	@Override
	public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float parTick) {
		render((TileEntityStand)tile, x, y, z, parTick);
	}

	private void render(TileEntityStand tile, double x, double y, double z, float parTick) {
		
	}

}
 
271
2
0
"переменная = tile.progress" не работает

в тайле создаю геттер getProgress
"переменная = tile.getProgress" не работает

я руко****?
 
271
2
0
Но ведь тайл печки как-то получает инфу с гуи.


Можно ли в рендере тайла получить НБТ тайла?
 

timaxa007

Модератор
5,831
409
672
У TileEntity нету собственного NBT (как у ItemStack), можно лишь получить значение которое он сохраняет в методе.
Код:
NBTTagCompound nbt = new NBTTagCompound();
tile.writeToNBT(nbt);
nbt.get...
 
7,099
324
1,510
Методы TileEntity переопредели:
writeToNBT
readFromNBT
getUpdatePacket
onDataPacket
 
271
2
0
Сорри что поднимаю эту тему снова, но я не понял. Хочу передать переменную из Тайла в рендерТайла.
Код:
public int getX(){return this.x;}//в тайл


tile.getX() //в рендер тайла
По идее это должно работать. Покопался в исходниках, там так.
Что я делаю не так?.
 

timaxa007

Модератор
5,831
409
672
На серверной и клиентской стороне одно и то-же значение? (Намекаю, что нужно будет отправлять с серверной стороны на клиентскую сторону значение этой переменной.)
 
271
2
0
(Намекаю, что нужно будет отправлять с серверной стороны на клиентскую сторону значение этой переменной.)

Как?
 

timaxa007

Модератор
5,831
409
672
Пакетами, при изменении значения этой переменной.


А это у тебя есть в твоём TilEntity?
Код:
	@Override
	public Packet getDescriptionPacket() {
		NBTTagCompound nbt = new NBTTagCompound();
		writeToNBT(nbt);
		return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 0, nbt);
	}

	@Override
	public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet) {
		readFromNBT(packet.func_148857_g());
	}
 
Сверху