Posted April 8, 20187 yr Is it possible to get how much time has a block been on the world? And if so, how? Specifically, the block I'm trying to get it's age from are regular torches, and their only properties is "where are they facing", and then I've been trying to find something like a "getAge()" for the block, or it's BlockState, but so far I haven't been succesful on finding it. The objective behind this is to make a WorldTick event to check if torches in the loaded chunks have more than X age, and if so, they break. This is my first time going through this stuff, so I'm still getting lost
April 8, 20187 yr The only way is to use a ticking TileEntity. There is no other way, all blocks are exactly the same. 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.
April 8, 20187 yr 29 minutes ago, diesieben07 said: No need for ticking, just store the current world total time when placing the block. Touche. In any case, you can't get that data from arbitrary blocks (e.g, torches). You'd have to replace the block. 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.
April 8, 20187 yr Author Thank you for the answers. I tried using the "Current world total time" answer, but I don't exactly know where to store it, in a simple Array it will get cleared when the game instance is closed, so I guess I'll have to find a place to store it into NBT or something. If that doesn't work I'll end up using some other kind of hack.
April 8, 20187 yr 9 minutes ago, Sanshirou said: so I guess I'll have to find a place to store it into NBT or something. Yes. In a tile entity. 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.
April 8, 20187 yr Author I'm going to sleep now, but at the end I ended up doing this: public class TorchDestroyer extends TileEntity{ private long worldTime; public TorchDestroyer(){ super(); worldTime = Minecraft.getMinecraft().theWorld.getTotalWorldTime(); } public long getWorldTime() { return worldTime; } public void setWorldTime(long worldTime) { this.worldTime = worldTime; } @Override public NBTTagCompound writeToNBT(NBTTagCompound compound){ super.writeToNBT(compound); compound.setLong("torchBorn", getWorldTime()); return compound; } @Override public void readFromNBT(NBTTagCompound compound){ super.readFromNBT(compound); setWorldTime(compound.getLong("torchBorn")); } } And then: @SubscribeEvent public void listTorch(PlaceEvent event) { if (event.getPlacedBlock().getBlock() == Blocks.TORCH) { TorchDestroyer n = new TorchDestroyer(); n.setPos(event.getPos()); Minecraft.getMinecraft().theWorld.addTileEntity(n); } } int deathTorchTick = 0; @SubscribeEvent public void cancelarAntorcha(WorldTickEvent event) { deathTorchTick++; if (deathTorchTick >= 1000 && !event.isCanceled()) { World w = Minecraft.getMinecraft().theWorld; for (TileEntity obj : w.loadedTileEntityList) { if (obj instanceof TorchDestroyer) { TorchDestroyer torchKiller = (TorchDestroyer) obj; if (Minecraft.getMinecraft().theWorld.getTotalWorldTime() > torchKiller.getWorldTime()+ Configuracion.TORCH_DECAY_TIME) { if (Minecraft.getMinecraft().theWorld.getBlockState(torchKiller.getPos()).getBlock() == Blocks.TORCH) { Minecraft.getMinecraft().theWorld.setBlockToAir(torchKiller.getPos()); Minecraft.getMinecraft().theWorld.removeTileEntity(torchKiller.getPos()); } else { Minecraft.getMinecraft().theWorld.removeTileEntity(torchKiller.getPos()); } } } } deathTorchTick = 0; } } And for now it works (In singleplayer), I don't know if I should rename the post in case someone has a trouble like this Will this have any troubles when moving it to a multiplayer environment?
April 8, 20187 yr 2 minutes ago, Sanshirou said: Will this have any troubles when moving it to a multiplayer environment? Yes. 2 minutes ago, Sanshirou said: Minecraft.getMinecraft().theWorld.addTileEntity(n); Because that is client side only. 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.
April 8, 20187 yr Author Hmmm, that's because "theWorld" is an instance of "ClientWorld", right? I'll check on ways to get "World" by itself.
April 13, 20187 yr One thing you might want to think about is what happens if someone breaks the torch and picks up the ItemBlock. Should the torch last forever in their inventory? What if they re-place the torch? Do you start the countdown over again? You might consider creating your own Block and/or ItemBlock. You could use a tile entity for the block and the damage field of the ItemBlock to keep track of their age.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.