Jump to content

NTB Daten speichern


ErfinderLabyrinth

Recommended Posts

Hi

I have a TileEntity and want to save NBT data

for this I have the following methods

@Override
public CompoundNBT getUpdateTag() {		// TODO Auto-generated method stub
	return this.save(new CompoundNBT());
}

@Override
public SUpdateTileEntityPacket getUpdatePacket() {
	CompoundNBT compoundnbt = this.getUpdateTag();
	return new SUpdateTileEntityPacket(this.worldPosition, 2, compoundnbt);
}
@Override
public CompoundNBT save(CompoundNBT p_189515_1_) {
	super.save(p_189515_1_);
//	if (!this.trySaveLootTable(p_189515_1_)) {
//		ItemStackHelper.saveAllItems(p_189515_1_, this.items);
//	}
	LogManager.getLogger().info("save-start");
	java.lang.System.out.println("save-start");
	ListNBT listnbt = new ListNBT();
	LogManager.getLogger(System.modid).info(listnbt.getElementType());
	int i = 0;
	for (String s:list) {
		System.out.println("save-write-" + i);
		CompoundNBT compoundnbt = new CompoundNBT();
		compoundnbt.putInt("id", i);
		i++;
		compoundnbt.putString("message", s);
		listnbt.add(compoundnbt);
	}
	System.out.println("save-save");
	p_189515_1_.put("Text", listnbt);
	System.out.println("save-finished");
	return p_189515_1_;
}
@Override
public void load(BlockState p_230337_1_, CompoundNBT p_230337_2_) {
	super.load(p_230337_1_, p_230337_2_);
//	this.items = NonNullList.withSize(getContainerSize(), ItemStack.EMPTY);
//	if (!this.tryLoadLootTable(p_230337_2_)) {
//		ItemStackHelper.loadAllItems(p_230337_2_, this.items);
//	}
	ListNBT lnbt = p_230337_2_.getList("Text", 10);
	for(int i = 0; i < lnbt.size(); ++i) {
		 CompoundNBT compoundnbt = lnbt.getCompound(i);
		 String ms = compoundnbt.getString("message");
		 list.add(compoundnbt.getInt("id"), ms);
	}
	
}

However, the save method is not called

What am I doing wrong

Edited by ErfinderLabyrinth
Link to comment
Share on other sites

Please keep this forum in English.

  • Returning the entire save tag in getUpdateTag is usually not necessary. Only sync to the client what you actually need.
  • 6 minutes ago, ErfinderLabyrinth said:
    ListNBT lnbt = p_230337_2_.getList("Text", 10);

    Use the predefined tag type constants, don't hardcode random magic numbers here.

  • Show more of your code, specifically the whole TileEntity class, your Block class and the registration for both.

Link to comment
Share on other sites

Quote

Please keep this forum in English.

Sorry, forgot to translate the text

Quote

Use the predefined tag type constants, don't hardcode random magic numbers here.

How do I get the predefined tag type constants

Quote

Show more of your code, specifically the whole TileEntity class, your Block class and the registration for both.

Tile Entity Class:

package net.lager.system.common.te;

import java.util.ArrayList;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

import org.apache.logging.log4j.LogManager;

import net.lager.system.System;
import net.lager.system.common.container.DisplayC;
import net.minecraft.block.BlockState;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.ItemStackHelper;
import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.INamedContainerProvider;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.ListNBT;
import net.minecraft.network.play.server.SUpdateTileEntityPacket;
import net.minecraft.tileentity.ITickableTileEntity;
import net.minecraft.tileentity.LockableLootTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.IItemProvider;
import net.minecraft.util.NonNullList;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TranslationTextComponent;

public class DisplayTE extends TileEntity implements ITickableTileEntity, INamedContainerProvider{
	
	public static int slot = 1;
	@Nonnull
	public ArrayList<String> list;
	
	protected NonNullList<ItemStack> items = NonNullList.withSize(slot, ItemStack.EMPTY);
	
	public DisplayTE(TileEntityType<?> tet) {
		super(tet);
		java.lang.System.out.println("Item-put");
		LogManager.getLogger(System.modid).info("Item-put");
		items.add(new ItemStack(new IItemProvider() {
			
			@Override
			public Item asItem() {
				return Items.ACACIA_BOAT;
			}
		}));
	}
	public DisplayTE() {
		this(net.lager.system.init.TileEntity.display.get());
	}
	@Override
	public void tick() {
		super.getUpdatePacket();
	}
	@Override
	public CompoundNBT getUpdateTag() {
		return this.save(new CompoundNBT());
	}
	
	@Override
	public SUpdateTileEntityPacket getUpdatePacket() {
		CompoundNBT compoundnbt = this.getUpdateTag();
		return new SUpdateTileEntityPacket(this.worldPosition, 2, compoundnbt);
	}
/*	@Override
	protected ITextComponent getDefaultName() {
		return new TranslationTextComponent("container."+ System.modid + ".display");
	}
	@Override
	protected NonNullList<ItemStack> getItems() {
		return this.items;
	}
	@Override
	protected void setItems(NonNullList<ItemStack> p_199721_1_) {
		this.items = p_199721_1_;
		
	}*/
	
	@Override
	public CompoundNBT save(CompoundNBT p_189515_1_) {
		super.save(p_189515_1_);
//		if (!this.trySaveLootTable(p_189515_1_)) {
//			ItemStackHelper.saveAllItems(p_189515_1_, this.items);
//		}
		LogManager.getLogger().info("save-start");
		java.lang.System.out.println("save-start");
		ListNBT listnbt = new ListNBT();
		LogManager.getLogger(System.modid).info(listnbt.getElementType());
		int i = 0;
		for (String s:list) {
			System.out.println("save-write-" + i);
			CompoundNBT compoundnbt = new CompoundNBT();
			compoundnbt.putInt("id", i);
			i++;
			compoundnbt.putString("message", s);
			listnbt.add(compoundnbt);
		}
		System.out.println("save-save");
		p_189515_1_.put("Text", listnbt);
		System.out.println("save-finished");
		return p_189515_1_;
	}
	@Override
	public void load(BlockState p_230337_1_, CompoundNBT p_230337_2_) {
		super.load(p_230337_1_, p_230337_2_);
//		this.items = NonNullList.withSize(getContainerSize(), ItemStack.EMPTY);
//		if (!this.tryLoadLootTable(p_230337_2_)) {
//			ItemStackHelper.loadAllItems(p_230337_2_, this.items);
//		}
		ListNBT lnbt = p_230337_2_.getList("Text", 10);
		for(int i = 0; i < lnbt.size(); ++i) {
			 CompoundNBT compoundnbt = lnbt.getCompound(i);
			 String ms = compoundnbt.getString("message");
			 list.add(compoundnbt.getInt("id"), ms);
		}
		
	}
	@Override
	public Container createMenu(int p_createMenu_1_, PlayerInventory p_createMenu_2_, PlayerEntity p_createMenu_3_) {
		return new DisplayC(p_createMenu_1_, p_createMenu_2_, this);
	}
	@Override
	public ITextComponent getDisplayName() {
		return null;
	}
}

Block Class:

package net.lager.system.common.block;

import net.lager.system.common.te.DisplayTE;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.World;
import net.minecraftforge.fml.network.NetworkHooks;

public class DisplayBlock extends Block{

	
	public DisplayBlock() {
		super(AbstractBlock.Properties.of(Material.BAMBOO));
	} 
	@Override
	public boolean hasTileEntity(BlockState state) {
		return true;
	}
	@Override
	public TileEntity createTileEntity(BlockState state, IBlockReader world) {
		return net.lager.system.init.TileEntity.display.get().create();
	}
	@SuppressWarnings("deprecation")
	@Override
	public ActionResultType use(BlockState p_225533_1_, World p_225533_2_, BlockPos p_225533_3_,
			PlayerEntity p_225533_4_, Hand p_225533_5_, BlockRayTraceResult p_225533_6_) {
		if (!p_225533_2_.isClientSide) {
			TileEntity te = p_225533_2_.getBlockEntity(p_225533_3_);
			
			if (te instanceof DisplayTE) {
				NetworkHooks.openGui((ServerPlayerEntity) p_225533_4_, (DisplayTE) te, p_225533_3_);
			}
		}
		return super.use(p_225533_1_, p_225533_2_, p_225533_3_, p_225533_4_, p_225533_5_, p_225533_6_);
	}
}

DisplayC Class:

package net.lager.system.common.container;

import java.util.Objects;

import net.lager.system.common.te.DisplayTE;
import net.lager.system.init.Block;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IWorldPosCallable;

public class DisplayC extends Container{
	public PlayerInventory inv;
	public static DisplayTE te;
	private final IWorldPosCallable canInteractWithCallable;
	
	@SuppressWarnings("static-access")
	public DisplayC(final int window, final PlayerInventory inv, final DisplayTE te) {
		super(net.lager.system.init.Container.display.get(), window);
		this.te = te;
		this.canInteractWithCallable = IWorldPosCallable.create(te.getLevel(), te.getBlockPos());
		this.inv = inv;
		
		for (int row = 0; row<3; row ++) {
			for (int col = 0; col < 9;col++) {
				this.addSlot(new Slot(inv, col + row * 9 + 9, 8 + col * 18, 166 - (4 - row) * 18 - 10));
			}
		}
		
		for (int col = 0; col < 9;col++) {
			this.addSlot(new Slot(inv, col, 8 + col * 18, 142));
		}
	}
	public DisplayC(final int window, final PlayerInventory inv, final PacketBuffer data) {
		this(window, inv, getTileEntity(inv, data));
	}
	private static DisplayTE getTileEntity(final PlayerInventory playerInventory, final PacketBuffer data){ 
			
				Objects.requireNonNull(playerInventory, "Player Inventory cannot be null");
				Objects.requireNonNull(data, "Packet Buffer cannot be null");
				@SuppressWarnings("unused")
				final TileEntity tileEntity = playerInventory.player.level.getBlockEntity(data.readBlockPos());
				if (te instanceof DisplayTE) {
					return (DisplayTE) te;
				}
				throw new IllegalStateException("Tile Entity is not correct");
	}

	@Override
	public boolean stillValid(PlayerEntity p_75145_1_) {
		return stillValid(canInteractWithCallable, p_75145_1_, Block.ITEM.get());
	}

	@Override
	public ItemStack quickMoveStack(PlayerEntity p_82846_1_, int p_82846_2_) {
		ItemStack stack = ItemStack.EMPTY;
		Slot slot = this.slots.get(p_82846_2_);
		if (slot != null && slot.hasItem()) {
			ItemStack stack2 = slot.getItem();
			stack = stack2.copy();
			if (p_82846_2_ < DisplayTE.slot && !this.moveItemStackTo(stack2, DisplayTE.slot, this.slots.size(), true)) {
				return ItemStack.EMPTY;
			}
			if (!this.moveItemStackTo(stack2, 0, DisplayTE.slot, false)) {
				return ItemStack.EMPTY;
			}
			if (stack2.isEmpty()) {
				slot.set(ItemStack.EMPTY);
			}else {
				slot.setChanged();
			}
			
		}
		return stack;
	}
}

DisplayS Class:

package net.lager.system.client.screen;

import java.util.HashMap;

import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.systems.RenderSystem;

import net.lager.system.System;
import net.lager.system.Textfeld.TextContainerScreen;
import net.lager.system.Textfeld.Textfeld;
import net.lager.system.common.container.DisplayC;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.widget.TextFieldWidget;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.ITextComponent;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;

@OnlyIn(Dist.CLIENT)
public class DisplayS extends TextContainerScreen<DisplayC>{
	public static HashMap<String, TextFieldWidget> guistate = new HashMap<String, TextFieldWidget>();
	private static final ResourceLocation Display_Gui = new ResourceLocation(System.modid, "/textures/gui/display.png");
	private Textfeld textfeld;

	public DisplayS(DisplayC p_i51105_1_, PlayerInventory p_i51105_2_, ITextComponent p_i51105_3_) {
		super(p_i51105_1_, p_i51105_2_, p_i51105_3_);		this.leftPos = 0;
		this.topPos = 0;
		this.inventoryLabelX = 175;
		this.inventoryLabelY = 201;
	}

	@SuppressWarnings("deprecation")
	@Override
	protected void renderBg(MatrixStack p_230450_1_, float p_230450_2_, int p_230450_3_, int p_230450_4_) {
		RenderSystem.color4f(1, 1, 1, 1);
//		RenderSystem.defaultBlendFunc();
		Minecraft.getInstance().getTextureManager().bind(Display_Gui);
		int k = (this.width - this.inventoryLabelX) / 2;
		int l = (this.height - this.inventoryLabelY) / 2;
//		this.blit(p_230450_1_, k, l, 0, 0, this.inventoryLabelX, this.titleLabelY);
	}

	@Override
	protected void renderLabels(MatrixStack p_230451_1_, int p_230451_2_, int p_230451_3_) {
	}
	@Override
	public void render(MatrixStack p_230430_1_, int p_230430_2_, int p_230430_3_, float p_230430_4_) {
		this.renderBackground(p_230430_1_);
		super.render(p_230430_1_, p_230430_2_, p_230430_3_, p_230430_4_);
		this.renderLabels(p_230430_1_, p_230430_2_, p_230430_3_);
		textfeld.getText( 0 , -300 , this, p_230430_1_, 100);
	}
	
	@SuppressWarnings("static-access")
	@Override
	public void init(Minecraft p_231158_1_, int p_231158_2_, int p_231158_3_) {
		super.init(p_231158_1_, p_231158_2_, p_231158_3_);
		if (getMenu().te.list == null) {
			textfeld = new Textfeld(true);
		} else {
			textfeld = new Textfeld(true, getMenu().te.list);
		}
		this.minecraft.keyboardHandler.setSendRepeatsToGui(true);
	}
	@Override
	public boolean keyPressed(int key, int b, int c) {
		textfeld.keyPressed(key);	
		java.lang.System.out.println(key);
		if (key == 256) {
			return false;
		}
		return true;
	}
	
	@Override
	public void tick() {
		super.tick();
		textfeld.tick();
	}
	
	@SuppressWarnings("static-access")
	@Override
	public void onClose() {
		super.onClose();
		this.minecraft.keyboardHandler.setSendRepeatsToGui(false);
		getMenu().te.list = textfeld.getArray();
		java.lang.System.out.println("save");
	}
	
	@Override
	public boolean mouseClicked(double p_231044_1_, double p_231044_3_, int p_231044_5_) {
		textfeld.Click(p_231044_1_ - 200, p_231044_3_ - 100);
		return super.mouseClicked(p_231044_1_, p_231044_3_, p_231044_5_);
	}
	
}

TileEntity Registerclass:

package net.lager.system.init;

import net.lager.system.System;
import net.lager.system.common.te.DisplayTE;
import net.minecraft.tileentity.TileEntityType;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;

public class TileEntity {
	public static final DeferredRegister<TileEntityType<?>> tileentity = DeferredRegister.create(ForgeRegistries.TILE_ENTITIES, System.modid);
	
	public static final RegistryObject<TileEntityType<DisplayTE>> display = tileentity.register("display", () -> TileEntityType.Builder.of(DisplayTE::new, Block.ITEM.get()).build(null));
}

Container Registerclass:

package net.lager.system.init;

import net.lager.system.System;
import net.lager.system.common.container.DisplayC;
import net.minecraft.inventory.container.ContainerType;
import net.minecraftforge.common.extensions.IForgeContainerType;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;

public class Container {

public static final DeferredRegister<ContainerType<?>> container = DeferredRegister.create(ForgeRegistries.CONTAINERS, System.modid);
	
	public static final RegistryObject<ContainerType<DisplayC>> display = container.register("dc", () -> IForgeContainerType.create(DisplayC::new));
}

Block RegisterClass:

package net.lager.system.init;

import net.lager.system.System;
import net.lager.system.common.block.ControllerBlock;
import net.lager.system.common.block.DisplayBlock;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;

public class Block {
	public static final DeferredRegister<net.minecraft.block.Block> block = DeferredRegister.create(ForgeRegistries.BLOCKS, System.modid);
	
	public static final RegistryObject<DisplayBlock> ITEM = block.register("display", () -> new DisplayBlock());
	public static final RegistryObject<ControllerBlock> Controller = block.register("controller", () -> new ControllerBlock());
}

Have fun reading through

Edited by ErfinderLabyrinth
Link to comment
Share on other sites

4 minutes ago, ErfinderLabyrinth said:

How do I get the predefined tag type constants

Constants.NBT.

5 minutes ago, ErfinderLabyrinth said:
items.add(new ItemStack(new IItemProvider() {
			
			@Override
			public Item asItem() {
				return Items.ACACIA_BOAT;
			}
		}));

Why not new ItemStack(Items.ACACIA_BOAT)?

5 minutes ago, ErfinderLabyrinth said:
	@Override
	public void tick() {
		super.getUpdatePacket();
	}

Uh, what?

7 minutes ago, ErfinderLabyrinth said:
public static DisplayTE te;

Why is this static? It makes no sense for it to be.

7 minutes ago, ErfinderLabyrinth said:
@OnlyIn(Dist.CLIENT)

Do not use @OnlyIn.

8 minutes ago, ErfinderLabyrinth said:
@SuppressWarnings("static-access")

Your IDE even told you you are being silly. Why?

9 minutes ago, ErfinderLabyrinth said:
getMenu().te.list = textfeld.getArray();

This will set the list on the client, which has no effect for actually saving the data. You must send a packet to the server with the data. The server must then validate that the player can do this (the client can lie, never trust it blindly). Then the server must save this data.

You must also call TileEntity#setChanged after changing any data that is saved to disk.

11 minutes ago, ErfinderLabyrinth said:
package net.lager.system.init;

It is unlikely that you own the domain lager.net.

Link to comment
Share on other sites

Quote

Constants.NBT.

Thank you

Quote

Why not new ItemStack(Items.ACACIA_BOAT)?

Didn't know this was possible

Quote

Uh, what?

This was only temporary to get to the super method getUpdatePacket (I noticed the green arrow to the left of the method afterwards)

Quote

Why is this static? It makes no sense for it to be.

For the static method getTileEntity()? (PS: I have to look here again in the tutorial, because I think that I made a mistake here)

Quote

You must also call TileEntity#setChanged after changing any data that is saved to disk.

What does the method do? Does it send the NBT data to the server? If so, how can I check the NBT data from the server?

Edited by ErfinderLabyrinth
Translation from German to English
Link to comment
Share on other sites

10 minutes ago, ErfinderLabyrinth said:

Für die static Methode getTileEntity()? (PS: Ich muss hierbei nochmal im Tutorial schauen, da ich glaube, dass ich hier ein Fehler gemacht habe)

Neither should be static.

10 minutes ago, ErfinderLabyrinth said:

Was macht die Methode? Schickt sie die NBT-Daten zum Server? Wenn ja, wie kann ich die NBT-Daten vom Server aus überprüfen?

The method tells the game that your TE's data has changed and that it must be saved to disk when Minecraft next saves the game. If you don't do this and nothing else in the chunk has changed, the chunk will not be saved and your changes will be lost.

And again: Please keep this forum in English.

Link to comment
Share on other sites

Quote

Neither should be static.

However, the getTileEntity() method from the constructor in code

this(window, inv, getTileEntity(inv, data));

is called and without the static Java would complain

2.Question: How do I save the NBT(i.e. how do I run the save() method), setChanged() did not work

Quote

And again: Please keep this forum in English.

Sorry, forgot it again, but I just translated it again

Link to comment
Share on other sites

3 hours ago, diesieben07 said:

This will set the list on the client, which has no effect for actually saving the data. You must send a packet to the server with the data. The server must then validate that the player can do this (the client can lie, never trust it blindly). Then the server must save this data.

 

Link to comment
Share on other sites

For the Level class I have the class io.netty.util.ResourceLeakDetector.Level, java.lang.System.Logger.Level, java.util.logging.Level, org.apache.logging.log4j.Level and org.spongepowered.asm.logging.Level, but none of the classes has the method isClientSide(). What am I doing wrong or is the class a subclass of another class?

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now


  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • I am trying to override or disable some vanilla recipes, as part of my mod. All of the methods that I have seen online, so far, do not work. So far, I have tried: Creating a JSON file in the "data/minecraft/recipes" folder, that has air as the ingredient and a barrier as the result This only works for crafting table recipes adding a smelting recipe this way works as intended Editing the ordering to AFTER in the forge dependency inside the "mods.toml" file Found an older post about using the FurnaceRecipe class, that no longer exists From: here So, what is required to disable a vanilla smelting recipe? I know some may say to not do this, but part of the progression of my mod kind of requires disabling some of the furnace recipes. Also, it seems that smelting recipes don't technically have to have the same filename as the block used, r as the result. When overriding crafting recipes, just adding the edited/removed recipe file in the minecraft data folder, under the same name as the original recipe. 
    • Using a modified version of "Fabulously Optimized" installed a few more mods and now my Hot Bar is invisible... Latest log : https://paste.ee/p/72TSs (No DeBug log txt file.)
    • I know that with this you can return the game folder   FMLPaths.GAMEDIR.get() I want the player to be created in the world where a txt file was created in the folder of the same world. How can I return the path of the world folder that the player is in?
    • [09Jun2023 15:38:56.969] [main/ERROR] [mixin/]: Mixin config dynamiclightsreforged.mixins.json does not specify "minVersion" property [09Jun2023 15:38:57.512] [main/ERROR] [mixin/]: Mixin config itshallnottick.mixins.json does not specify "minVersion" property how do i fix those 2
    • Whoops sorry uploaded wrong logs, here are the correct ones: 09:28:31.876 at java.base/java.lang.Thread.run(Thread.java:833) 09:28:31.876 Caused by: java.lang.UnsupportedOperationException: A mod tried to access the state neighbor table directly. Please report this at https://github.com/malte0811/FerriteCore/issues. As a temporary workaround you can enable "populateNeighborTable" in the FerriteCore config 09:28:31.876 at TRANSFORMER/ferritecore@4.2.2/malte0811.ferritecore.fastmap.table.CrashNeighborTable.crashOnAccess(CrashNeighborTable.java:101) 09:28:31.876 at TRANSFORMER/ferritecore@4.2.2/malte0811.ferritecore.fastmap.table.CrashNeighborTable.rowKeySet(CrashNeighborTable.java:77) 09:28:31.876 at TRANSFORMER/canary@0.2.1/com.abdelaziz.canary.common.state.FastImmutableTable.<init>(FastImmutableTable.java:36) 09:28:31.876 at TRANSFORMER/minecraft@1.18.2/net.minecraft.world.level.block.state.StateHolder.handler$bbj000$postCreateWithTable(StateHolder.java:531) 09:28:31.876 at TRANSFORMER/minecraft@1.18.2/net.minecraft.world.level.block.state.StateHolder.m_61133_(StateHolder.java:1052) 09:28:31.876 at TRANSFORMER/minecraft@1.18.2/net.minecraft.world.level.block.state.StateDefinition.<init>(StateDefinition.java:68) 09:28:31.876 at TRANSFORMER/minecraft@1.18.2/net.minecraft.world.level.block.state.StateDefinition$Builder.m_61101_(StateDefinition.java:157) 09:28:31.877 at TRANSFORMER/minecraft@1.18.2/net.minecraft.world.level.block.Block.<init>(Block.java:174) 09:28:31.877 at TRANSFORMER/minecraft@1.18.2/net.minecraft.world.level.block.AirBlock.<init>(AirBlock.java:12) 09:28:31.877 at TRANSFORMER/minecraft@1.18.2/net.minecraft.world.level.block.Blocks.<clinit>(Blocks.java:40) 09:28:31.877 ... 18 more 09:28:32.435 Process crashed with exit code 1
  • Topics

×
×
  • Create New...

Important Information

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