27 mai 2022, 12:20

Bonjour,

Question par rapport à mon mod Chimera.

Je voudrais pouvoir créer mon item group mais l’icône ne s’affiche pas, on voie juste cette stupide texture noire et violette, et l’item que j’ai mis dedans a la même texture, ne fais absolument rien, ce n’est pas mon item, juste un truc buggé. Le nom de l’item est “item.minecraft.air”.

Le code, classe principale :

package fr.krafty.chimera;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import fr.krafty.chimera.items.CrushedIceItem;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.StringTextComponent;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedInEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.InterModComms;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent;
import net.minecraftforge.fml.event.lifecycle.InterModProcessEvent;
import net.minecraftforge.fml.event.server.FMLServerStartingEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.fml.network.NetworkRegistry;
import net.minecraftforge.fml.network.simple.SimpleChannel;

// The value here should match an entry in the META-INF/mods.toml file
@Mod("chimera")
public class ChimeraMod {
	public final static String MODID = "Chimera";

	Items elements;

	// Directly reference a log4j logger.
	private static final Logger LOGGER = LogManager.getLogger();

	private static final String PROTOCOL_VERSION = "1";

	public static final SimpleChannel PACKET_HANDLER = NetworkRegistry.newSimpleChannel(new ResourceLocation("chimera", "chimera"),
			() -> PROTOCOL_VERSION, PROTOCOL_VERSION::equals, PROTOCOL_VERSION::equals);

	public static ItemGroup CHIMERA_ITEM_GROUP = new ItemGroup("tabchimera") {
		@Override
		@OnlyIn(Dist.CLIENT)
		public ItemStack makeIcon() {
			return new ItemStack(new CrushedIceItem());
		}

		@Override
		@OnlyIn(Dist.CLIENT)
		public void fillItemList(NonNullList<ItemStack> p_78018_1_) {
			p_78018_1_.add(new ItemStack(new CrushedIceItem()));
		}
	};

	public ChimeraMod() {
		elements = new Items();

		// Register the setup method for modloading
		FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
		// Register the enqueueIMC method for modloading
		FMLJavaModLoadingContext.get().getModEventBus().addListener(this::enqueueIMC);
		// Register the processIMC method for modloading
		FMLJavaModLoadingContext.get().getModEventBus().addListener(this::processIMC);
		// Register the doClientStuff method for modloading
		FMLJavaModLoadingContext.get().getModEventBus().addListener(this::doClientStuff);

		// Register ourselves for server and other game events we are interested in
		MinecraftForge.EVENT_BUS.register(this);
	}

	private void setup(final FMLCommonSetupEvent event) {
		// some preinit code
		LOGGER.info("HELLO FROM PREINIT");
		LOGGER.info("DIRT BLOCK >> {}", Blocks.DIRT.getRegistryName());
	}

	private void doClientStuff(final FMLClientSetupEvent event) {
		// do something that can only be done on the client
		LOGGER.info("Got game settings {}", event.getMinecraftSupplier().get().options);
	}

	private void enqueueIMC(final InterModEnqueueEvent event) {
		// some example code to dispatch IMC to another mod
		InterModComms.sendTo("chimera", "helloworld", () -> {
			LOGGER.info("Hello world from the MDK");
			return "Hello world";
		});
	}

	private void processIMC(final InterModProcessEvent event) {
		// some example code to receive and process InterModComms from other mods
		LOGGER.info("Got IMC {}", event.getIMCStream().map(m -> m.getMessageSupplier().get()).collect(Collectors.toList()));
	}

	// You can use SubscribeEvent and let the Event Bus discover methods to call
	@SubscribeEvent
	public void onServerStarting(FMLServerStartingEvent event) {
		// do something when the server starts
		LOGGER.info("HELLO from server starting");
	}

	public void onJoinGame(PlayerLoggedInEvent event) {
		event.getPlayer().displayClientMessage(new StringTextComponent("Bienvenue !"), true);
	}

	@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
	public static class Items {
		public static List<Item> itemList = new ArrayList<Item>();

		private static Item register(Item itemIn) {
			itemList.add(itemIn);
			return itemIn;
		}

		@SubscribeEvent
		public static void registerItems(RegistryEvent.Register<Item> event) {
			register(new CrushedIceItem());

			for (final Item item : itemList) {
				event.getRegistry().register(item);
			}
		}
	}
}

Le code, classe de l’item :

package fr.krafty.chimera.items;

import fr.krafty.chimera.ChimeraMod;
import net.minecraft.item.Item;
import net.minecraft.item.Rarity;

public class CrushedIceItem extends Item {

	public CrushedIceItem() {
		super(new Item.Properties().stacksTo(16).rarity(Rarity.COMMON));
		setRegistryName(ChimeraMod.MODID, "crushed_ice");
	}
}

Je peux me give mon item, les deux recettes liées à l’item marche, mais le truc qui se trouve dans mon item group ne correspond à rien de logique.

Le nom de l’item group marche.

Au cas où, je mets ce qui s’affiche sur la console.

avant de rejoindre le monde pastebin

après avoir rejoint le monde pastebin

Screenshots :

Capture d’écran 2022-05-27 à 14.17.22.png Capture d’écran 2022-05-27 à 14.17.32.png Capture d’écran 2022-05-27 à 14.17.39.png

Ça fait très longtemps que j’ai ce problème et j’ai rien trouvé sur internet, aidez-moi s’il vous plait 🙂

Voilà, merci d’avance ^^

Krafty