Jump to content

[1.10.2] Block age


Sanshirou

Recommended Posts

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 

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • My friends and I are modding to survive But recently I want to use cmd to open the server instead of making the single player game public But when I used two methods to start the server, I encountered two problems first A I used forge to install the server files Created using the original server jar The server was installed successfully and the mod was also loaded successfully. But after I replaced the world file with my survival map, I found that the mod items inside disappeared but could be taken from creation again. So I tried to install the server using forge first B I have studied forge for a long time but successfully installed it. But when I put in mods it crashed But mods can be installed on the server   我和我的朋友們正在mod為了生存 但是最近我想用cmd打開伺服器而不是把單人遊戲公開 但是當我使用兩種方法啟動伺服器時,我遇到了兩個問題 首先AI使用forge安裝伺服器檔案使用原始伺服器jar 建立伺服器已成功安裝,mod 也已成功載入。但是當我用我的生存地圖替換世界文件後,我發現裡面的mod物品消失了,但可以再次從創建中取出。所以我嘗試先使用forge安裝伺服器,BI研究了forge很久但成功安裝了它。但是當我安裝 mods 時它崩潰了但是 mods 可以安裝在伺服器上 我和我的朋友正在mod生存 但最近我想使用cmd開啟伺服器而不是單人遊戲公開   但是當我使用了兩種方法開啟伺服器時遇到了兩種問題   第1個A 我使用了forge安裝伺服器文件 在使用原版伺服器jar建立    伺服器安裝成功 mod也順利加載  但是我將我的生存地圖替換世界文件後發現裡面的mod物品消失了但可以再次從創造拿取  所以我嘗試使用forge安裝伺服器   第2個B forge我研究了很久但也成功安裝了 但是當我放入 mods 之後發生了崩潰 但是mods在1A伺服器上是可以安裝的 Ps 我用谷歌翻譯 so    
    • That’s probably not it because as I stated I’ve done it before. I did it like deadass 10 - 20 times when trying to learn to make this mod pack because I kept wanting to reset my profiles and such. So it definitely works, it looks like maybe the creephosting files were the things that couldn’t be reached I tried reading the crash log
    • I don't know if this is the right place or not, but I have put together a custom modpack and I am in need of others to help me. It's a questing modpack with a lore book i'm currently writing out through Patchouli, and i am in need of somebody who will assist me in making the quests for the pack. It's a Zombie apocalypse modpack inspired by Deceasedcraft  with a tinge of magic and RPG mechanics via Mine and slash. Is there anybody willing to assist me as i'm one person building a modpack I could also use help with optimizations since that's not really my strong suite. 
    • File a report to SPYRECOVERY36 @ gmail com he can legitimately assist in proper review and recovery of all your assets that was stolen. Endeavor to submit your request for a refund to his mail . He also spy and hack any device remotely without any trace. Contact via spyrecovery36 @ gm ail com  
    • Hello, is it possible to upgrade from server 1.16.5 forge to 1.20.1 forge without losing a thing? and how do I do it? You need to change "forge-1.16.5-36.2.35.jar, minecraft_server.1.16.5.jar" and other modes.
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

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