Jump to content

Recommended Posts

Posted

Hello !

I want to store a BlockState with his Tile Entity into playerdata.

I managed to save BlockState per Player, but the TileEntity is not included in the BlockState

Can I include A TileEntity in a BlockState ?

If not, how can I separately save a TileEntity and restore it after ??

Thanks in advance

Posted

My goal is to make an item which store a block and all its data into an item.

So that after you can restore this block in another place, with exactly the same data in it (direction, container, tags, ...)

This is what I want to do.

(PS: I wanted to convert all to string to put them easily on item tags)

How can I do that ??

Thanks for your help ! :D

Posted

Thanks for your reply !!

I think I'm wrong, but i cannot see TileEntity#save or loadStatic.

I don't know if I am right, but It seems that TileEntity doesn't contain the Container.

And.. It must be a stupid question, but, how do I put this Nbt data to the item ?? :$

Thanks a lot

  • 2 weeks later...
Posted

Ok, I succeeded in saving TileEntity to item.

BUT, when I'm trying to restore ...

Here i'm trying to get Blockstate from save data in item.

bs = NBTUtil.readBlockState(nbt.get("bs"));

but I got error

error: incompatible types: net.minecraft.nbt.INBT cannot be converted to net.minecraft.nbt.CompoundNBT

It's strange because it can convert a CompoundNBT to INBT without any problems, but how can I do to INBT -> CompoundNBT ?

Thanks!

Posted (edited)
1 hour ago, diesieben07 said:

Learn basic Java.

I know you can't convert for example double a; to int without (int).

Of course I asked you a way to get it as CompoundTag.

Thanks to your response, my code did compile 😮

But when trying to restore a block with its tile entity, items are not replaced !!

I tried with a furnace, for example.

I've put things to burn in it.

I stored the furnace into my item, and placed back after.

The new furnace was still burning (lit=true) but the items inside it disappears !!

How can I fix that ??

Thank you ! 😁

Edited by SiniKraft
Posted
Spoiler
// World, double x y and z defined here
// execute when left clicked on block with my item
// TO STORE TILE ENTITY IN ITEM

ItemStack i = ((LivingEntity) entity).getHeldItemMainhand().copy();
World w = (World) dependencies.get("world");
BlockState b = w.getBlockState(new BlockPos((int) x,(int) y,(int) z));
TileEntity t = w.getTileEntity(new BlockPos((int) x,(int) y,(int) z));
CompoundNBT nbt = i.getOrCreateTag();
if (!(nbt.contains("containBlock"))) {
	nbt.putBoolean("containBlock", false);
}
if (!(nbt.getBoolean("containBlock"))) {
	nbt.put("bs", NBTUtil.writeBlockState(b));
	if (t != null) {
		nbt.put("te", t.write(new CompoundNBT()));
		t.remove();
	} else {
		nbt.putString("te", "null");
	}
}
nbt.putBoolean("containBlock", true);
i.setTag(nbt);
((LivingEntity) entity).setHeldItem(Hand.MAIN_HAND, i);
if (entity instanceof ServerPlayerEntity) {
	((ServerPlayerEntity) entity).inventory.markDirty();
}
w.setBlockState(new BlockPos((int) x,(int) y,(int) z), Blocks.AIR.getDefaultState(), 3);
Spoiler
// When right click on block with item, restore block
// vars defined above

ItemStack i = ((LivingEntity) entity).getHeldItemMainhand().copy();
CompoundNBT nbt = i.getOrCreateTag();
CompoundNBT te = null;
BlockState bs = null;
if (!(nbt.contains("containBlock"))) {
	nbt.putBoolean("containBlock", false);
}
if (nbt.getBoolean("containBlock")) {
	nbt.putBoolean("containBlock", false);
	bs = NBTUtil.readBlockState(nbt.getCompound("bs"));
	if (!(nbt.get("te").equals("null"))) {
		te = nbt.getCompound("te");
	}
}
i.setTag(nbt);
((LivingEntity) entity).setHeldItem(Hand.MAIN_HAND, i);
if (bs != null) {
	world.setBlockState(new BlockPos((int) x, (int) y, (int) z), bs, 3);
	if (te != null) {
		TileEntity ten = world.getTileEntity(new BlockPos((int) x, (int) y, (int) z));
		BlockState bsn = world.getBlockState(new BlockPos((int) x, (int) y, (int) z));
		if (ten != null) {
			try {
				ten.readTileEntity(bsn, te);
			} catch (Exception ignored) {
		}
	}
}

 

Thanks 🙂

  • Guest locked this topic
Guest
This topic is now closed to further replies.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Im trying to build my mod using shade since i use the luaj library however i keep getting this error Reason: Task ':reobfJar' uses this output of task ':shadowJar' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed. So i try adding reobfJar.dependsOn shadowJar  Could not get unknown property 'reobfJar' for object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler. my gradle file plugins { id 'eclipse' id 'idea' id 'maven-publish' id 'net.minecraftforge.gradle' version '[6.0,6.2)' id 'com.github.johnrengelman.shadow' version '7.1.2' id 'org.spongepowered.mixin' version '0.7.+' } apply plugin: 'net.minecraftforge.gradle' apply plugin: 'org.spongepowered.mixin' apply plugin: 'com.github.johnrengelman.shadow' version = mod_version group = mod_group_id base { archivesName = mod_id } // Mojang ships Java 17 to end users in 1.18+, so your mod should target Java 17. java.toolchain.languageVersion = JavaLanguageVersion.of(17) //jarJar.enable() println "Java: ${System.getProperty 'java.version'}, JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), Arch: ${System.getProperty 'os.arch'}" minecraft { mappings channel: mapping_channel, version: mapping_version copyIdeResources = true runs { configureEach { workingDirectory project.file('run') property 'forge.logging.markers', 'REGISTRIES' property 'forge.logging.console.level', 'debug' arg "-mixin.config=derp.mixin.json" mods { "${mod_id}" { source sourceSets.main } } } client { // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. property 'forge.enabledGameTestNamespaces', mod_id } server { property 'forge.enabledGameTestNamespaces', mod_id args '--nogui' } gameTestServer { property 'forge.enabledGameTestNamespaces', mod_id } data { workingDirectory project.file('run-data') args '--mod', mod_id, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/') } } } sourceSets.main.resources { srcDir 'src/generated/resources' } repositories { flatDir { dirs './libs' } maven { url = "https://jitpack.io" } } configurations { shade implementation.extendsFrom shade } dependencies { minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" implementation 'org.luaj:luaj-jse-3.0.2' implementation fg.deobf("com.github.Virtuoel:Pehkui:${pehkui_version}") annotationProcessor 'org.spongepowered:mixin:0.8.5:processor' minecraftLibrary 'luaj:luaj-jse:3.0.2' shade 'luaj:luaj-jse:3.0.2' } // Example for how to get properties into the manifest for reading at runtime. tasks.named('jar', Jar).configure { manifest { attributes([ 'Specification-Title' : mod_id, 'Specification-Vendor' : mod_authors, 'Specification-Version' : '1', // We are version 1 of ourselves 'Implementation-Title' : project.name, 'Implementation-Version' : project.jar.archiveVersion, 'Implementation-Vendor' : mod_authors, 'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), "TweakClass" : "org.spongepowered.asm.launch.MixinTweaker", "TweakOrder" : 0, "MixinConfigs" : "derp.mixin.json" ]) } rename 'mixin.refmap.json', 'derp.mixin-refmap.json' } shadowJar { archiveClassifier = '' configurations = [project.configurations.shade] finalizedBy 'reobfShadowJar' } assemble.dependsOn shadowJar reobf { re shadowJar {} } publishing { publications { mavenJava(MavenPublication) { artifact jar } } repositories { maven { url "file://${project.projectDir}/mcmodsrepo" } } }  
    • Todas as versões do Minecraft Forge são repentinamente tela preta, mesmo sem mods (tentei reinstalar o Minecraft original, Java, atualizar os drivers não funciona)
    • When i join minecraft all ok, when i join world all working fine, but when i open indentity menu, i get this The game crashed whilst unexpected error Error: java.lang.NullPointerException: Cannot invoke "top.ribs.scguns.common.Gun$Projectile.getDamage()" because "this.projectile" is null crash report here https://paste.ee/p/0vKaf
  • Topics

×
×
  • Create New...

Important Information

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