GUI. getDefaultName - как правильно инициализировать?

Версия Minecraft
1.16.5
API
Forge
163
7
25
Написал GUI с контейнером, нажимаю пкм по блоку, такая ошибка, понял, что она из-за getDefultName, подскажите как исправить
[11:58:20] [Render thread/WARN] [minecraft/ScreenManager]: Trying to open invalid screen with name: help Me

Тайл:
Java:
package ru.amiri.ts.tiles;

import net.minecraft.client.gui.ScreenManager;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.IContainerProvider;
import net.minecraft.inventory.container.INamedContainerProvider;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.LockableTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import ru.amiri.ts.client.screen.OverFlowerCrafterScreen;
import ru.amiri.ts.container.ContType;
import ru.amiri.ts.container.OverFlowerCrafterContainer;
import ru.amiri.ts.init.TileRegistry;

import javax.annotation.Nullable;

public class OverFlowerCrafterTile extends LockableTileEntity  {


    public OverFlowerCrafterTile(TileEntityType<?> p_i48289_1_) {
        super(p_i48289_1_);

    }

    public OverFlowerCrafterTile(){
        this(TileRegistry.OVER_FLOWER_TILE.get());
    }


    @Override
    protected Container createMenu(int windowId, PlayerInventory playerInventory) {
        return new OverFlowerCrafterContainer(windowId, playerInventory );
    }

    @Override
    protected ITextComponent getDefaultName() {
        return new StringTextComponent("help Me");
    }


    @Override
    public int getContainerSize() {
        return 100;
    }

    @Override
    public boolean isEmpty() {
        return false;
    }

    @Override
    public ItemStack getItem(int p_70301_1_) {
        return null;
    }

    @Override
    public ItemStack removeItem(int p_70298_1_, int p_70298_2_) {
        return null;
    }

    @Override
    public ItemStack removeItemNoUpdate(int p_70304_1_) {
        return null;
    }

    @Override
    public void setItem(int p_70299_1_, ItemStack p_70299_2_) {

    }

    @Override
    public boolean stillValid(PlayerEntity p_70300_1_) {
        return true;
    }

    @Override
    public void clearContent() {

    }
}
 
163
7
25
регистрация:
Java:
@Mod.EventBusSubscriber
public class ModEventSubscriber {
    @SubscribeEvent
    public static void onRegisterContainers(RegistryEvent.Register<ContainerType<?>> event) {
        event.getRegistry().registerAll(ContType.OVER_FLOWER_CRAFTER_CONTAINER_CONTAINER_TYPE);
    }
    @SubscribeEvent
    public static void onClientSetup(FMLClientSetupEvent event) {
       ScreenManager.register(ContType.OVER_FLOWER_CRAFTER_CONTAINER_CONTAINER_TYPE, OverFlowerCrafterScreen::new);

    }
}
 
87
4
11
Поменяй регистрацию на что то по типу такого:
Java:
public class ModMenuRegister {
    public static final DeferredRegister<ContainerType<?>> CONTAINERS = DeferredRegister.create(ForgeRegistries.CONTAINERS, BetterAddits.MOD_ID);
    public static final RegistryObject<ContainerType<PlayersShopBlockGui>> PLAYERS_SHOP_BLOCK_GUI = register("player_shop_block_gui", PlayersShopBlockGui::new);

    private ModMenuRegister() {}

    public static void register(IEventBus eventBus) {
        CONTAINERS.register(eventBus);
    }

    @OnlyIn(Dist.CLIENT)
    public static void registerScreens(FMLClientSetupEvent event) {
        ScreenManager.register(PLAYERS_SHOP_BLOCK_GUI.get(), PlayersShopBlockScreen::new);
    }

    private static <T extends Container> RegistryObject<ContainerType<T>> register(String name, IContainerFactory<T> factory) {
        return CONTAINERS.register(name, () -> IForgeContainerType.create(factory));
    }
}
Я так понял, у тебя все таки не регистрируется гуишка.
 
163
7
25
Java:
 public OverFlowerCrafterContainer(int p_i50096_1_, PlayerInventory p_i50096_2_  ) {
        this(p_i50096_1_, p_i50096_2_, new Inventory(9));
    }
    public OverFlowerCrafterContainer(int p_i50088_1_, PlayerInventory p_i50088_2_, IInventory p_i50088_3_){
     super(ContType.OVER_FLOWER_CRAFTER_CONTAINER_CONTAINER_TYPE, p_i50088_1_);

     this.addSlot(new OverFlowerCrafterContainer.Slots(p_i50088_3_, 2, 102, 51));

 }
 
87
4
11
У меня вот такая штука:
Java:
public class PlayersShopBlockGui extends Container {
    private final IInventory inventory;
    public CompoundNBT nbtData;
    PlayersShopBlockEntity tileEntity;
    public PlayersShopBlockGui(int id, PlayerInventory playerInventory, PacketBuffer buffer) {
        this(id, playerInventory, new PlayersShopBlockEntity());
        nbtData = buffer.readNbt();
        tileEntity = (PlayersShopBlockEntity) playerInventory.player.level.getBlockEntity(new BlockPos(nbtData.getInt("x"), nbtData.getInt("y"), nbtData.getInt("z")));
    }


    public PlayersShopBlockGui(int id, PlayerInventory playerInventory, IInventory inventory) {
        super(ModMenuRegister.PLAYERS_SHOP_BLOCK_GUI.get(), id);
        this.inventory = inventory;
        this.addSlot(new Slot(this.inventory, 0, 75, 31) {
            @Override
            public boolean mayPlace(ItemStack stack) {
                return false;
            }
            @Override
            public boolean mayPickup(PlayerEntity playerEntity) {
                return false;
            }
            @Override
            public int getMaxStackSize() {
                return 4096;
            }
            @Override
            @OnlyIn(Dist.CLIENT)
            public boolean isActive() {
                return false;
            }
        });
        for (int y = 1; y < 4; ++y) {
            for (int x = 0; x < 9; ++x) {
                int index = x + y * 9;
                int posX = 3 + x * 18;
                int posY = 99 + (y - 1) * 18;
                this.addSlot(new Slot(playerInventory, index, posX, posY));
            }
        }
        for (int x = 0; x < 9; x++) {
            int posX = 3 + x * 18;
            int posY = 157;
            this.addSlot(new Slot(playerInventory, x, posX, posY));
        }

    }


    @Override
    public boolean stillValid(PlayerEntity player) {
        return this.inventory.stillValid(player);
    }

    @Override
    public ItemStack clicked(int p_184996_1_, int p_184996_2_, ClickType p_184996_3_, PlayerEntity p_184996_4_) {
        if (p_184996_1_ == 0 || p_184996_3_ == ClickType.QUICK_MOVE){
            return ItemStack.EMPTY;
        }
        Method privateMethod
                = null;
        try {
            privateMethod = Container.class.getDeclaredMethod("doClick", int.class, int.class, ClickType.class, PlayerEntity.class);
            privateMethod.setAccessible(true);
            return (ItemStack) privateMethod.invoke(this, p_184996_1_, p_184996_2_, p_184996_3_, p_184996_4_);
        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
            throw new RuntimeException(e);
        }



    }

    public IInventory getInventory() {
        return this.inventory;
    }
    public PlayersShopBlockEntity getTileEntity(){
        return this.tileEntity;
    }
}
 
Сверху