Jump to content

Jemtao

Members
  • Posts

    3
  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Jemtao's Achievements

Tree Puncher

Tree Puncher (2/8)

0

Reputation

  1. I'm sorry about that,.. but for the last half hour I've been trying to figure out why public static final DeferredRegister<Item> GEMS = new DeferredRegister<>(ForgeRegistries.ITEMS, JemCore.MOD_ID); Doesn't work (as supplied by DeferredRegister). I get: I cannot figure out what I'm missing
  2. It's a 1:1 of DeferredRegister.java because after updating from 1.15.2 to 1.16.1 it gave me the error that the particular method called to wasn't accessible because it's been changed to private. Why it suddenly works copied into another class, I don't know. package com.jemmy.core; import net.minecraft.util.ResourceLocation; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.RegistryObject; import net.minecraftforge.registries.IForgeRegistry; import net.minecraftforge.registries.IForgeRegistryEntry; import net.minecraftforge.registries.RegistryBuilder; import net.minecraftforge.registries.RegistryManager; import java.util.Collection; import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Objects; import java.util.Set; import java.util.function.Supplier; public class JemRegistry<T extends IForgeRegistryEntry<T>> { public static <B extends IForgeRegistryEntry<B>> JemRegistry<B> create(IForgeRegistry<B> reg, String modid) { return new JemRegistry<B>(reg, modid); } public static <B extends IForgeRegistryEntry<B>> JemRegistry<B> create(Class<B> base, String modid) { return new JemRegistry<B>(base, modid); } private final Class<T> superType; private final String modid; private final Map<RegistryObject<T>, Supplier<? extends T>> entries = new LinkedHashMap<>(); private final Set<RegistryObject<T>> entriesView = Collections.unmodifiableSet(entries.keySet()); private IForgeRegistry<T> type; private Supplier<RegistryBuilder<T>> registryFactory; private boolean seenRegisterEvent = false; private JemRegistry(Class<T> base, String modid) { this.superType = base; this.modid = modid; } public JemRegistry(IForgeRegistry<T> reg, String modid) { this(reg.getRegistrySuperType(), modid); this.type = reg; } @SuppressWarnings("unchecked") public <I extends T> RegistryObject<I> register(final String name, final Supplier<? extends I> sup) { if (seenRegisterEvent) throw new IllegalStateException("Cannot register new entries to DeferredRegister after RegistryEvent.Register has been fired."); Objects.requireNonNull(name); Objects.requireNonNull(sup); final ResourceLocation key = new ResourceLocation(modid, name); RegistryObject<I> ret; if (this.type != null) ret = RegistryObject.of(key, this.type); else if (this.superType != null) ret = RegistryObject.of(key, this.superType, this.modid); else throw new IllegalStateException("Could not create RegistryObject in DeferredRegister"); if (entries.putIfAbsent((RegistryObject<T>) ret, () -> sup.get().setRegistryName(key)) != null) { throw new IllegalArgumentException("Duplicate registration " + name); } return ret; } public Supplier<IForgeRegistry<T>> makeRegistry(final String name, final Supplier<RegistryBuilder<T>> sup) { if (this.superType == null) throw new IllegalStateException("Cannot create a registry without specifying a base type"); if (this.type != null || this.registryFactory != null) throw new IllegalStateException("Cannot create a registry for a type that already exists"); this.registryFactory = () -> sup.get().setName(new ResourceLocation(modid, name)).setType(this.superType); return () -> this.type; } public void register(IEventBus bus) { bus.addListener(this::addEntries); if (this.type == null) { if (this.registryFactory != null) bus.addListener(this::createRegistry); else bus.addListener(EventPriority.LOWEST, this::captureRegistry); } } public Collection<RegistryObject<T>> getEntries() { return entriesView; } private void addEntries(RegistryEvent.Register<?> event) { if (this.type != null && event.getGenericType() == this.type.getRegistrySuperType()) { this.seenRegisterEvent = true; @SuppressWarnings("unchecked") IForgeRegistry<T> reg = (IForgeRegistry<T>)event.getRegistry(); for (Entry<RegistryObject<T>, Supplier<? extends T>> e : entries.entrySet()) { reg.register(e.getValue().get()); e.getKey().updateReference(reg); } } } private void createRegistry(RegistryEvent.NewRegistry event) { this.type = this.registryFactory.get().create(); } private void captureRegistry(RegistryEvent.NewRegistry event) { if (this.superType != null) { this.type = RegistryManager.ACTIVE.getRegistry(this.superType); if (this.type == null) throw new IllegalStateException("Unable to find registry for type " + this.superType.getName() + " for modid \"" + modid + "\" after NewRegistry event"); } else throw new IllegalStateException("Unable to find registry for mod \"" + modid + "\" No lookup criteria specified."); } }
  3. I cannot for the love of me figure out how the new objectregister system works. Been scratching my head at this for a week. The above error hi-lites: JemPickaxe::new in the 3rd method. public class JemPickaxes { public static final JemRegistry<Item> PICKAXE = new JemRegistry<>(ForgeRegistries.ITEMS, JemCore.MOD_ID); public static void init() { PICKAXE.register(FMLJavaModLoadingContext.get().getModEventBus()); } public static RegistryObject<Item> OBSIDIAN = PICKAXE.register("obsidian_pickaxe", JemPickaxe::new);; /**public static <OBSIDIAN extends PickaxeItem> OBSIDIAN PickaxeProperties(String item, IItemTier tier, int damage, float speed, Properties properties) *{ * PickaxeProperties("obsidian_pickaxe", ItemTier.NETHERITE, 1, -2.8F, new Item.Properties().group(JemPickaxe.TOOLS)); * * return JemPickaxes.OBSIDIAN = PickaxeProperties("obsidian_pickaxe", ItemTier.NETHERITE, 1, -2.8F, properties); *} * *public static RegistryObject<Item> TEST() *{ * return PICKAXE.register("test_pickaxe", JemPickaxe::new); *} */ } This is what my JemPickaxe class looks like: public class JemPickaxe extends PickaxeItem { public static final ItemGroup TOOLS = new ItemGroup("tools") { @Override public ItemStack createIcon() { return new ItemStack(JemPickaxes.OBSIDIAN.get()); } }; public JemPickaxe(IItemTier tier, int attackDamage, float attackSpeedIn) { super(tier, attackDamage, attackSpeedIn, new Item.Properties().group(TOOLS)); //JemPickaxe.PickaxeProperties(tier, attackDamage, attackSpeedIn, new Item.Properties().group(TOOLS)); } /**public static void PickaxeProperties(String string, ItemTier netherite, int i, float f, Properties group) { * *} * * * public static void OBSIDIAN(IItemTier tier, int attackDamage, float attackSpeedIn) { * super(ItemTier.NETHERITE, 1, -2.8F, new Item.Properties().group(TOOLS)); * JemPickaxe.PickaxeProperties(ItemTier.NETHERITE, 1, -2.8F, new Item.Properties().group(TOOLS)); * } */ } The error only resolves when I remove the parameters from public JemPickaxe(...) so that the brackets are empty and when I change the extend from "Pickaxeitem" to just "Item". Am I completely wrong about how I'm going about this or am I just adding the parameters incorrectly to the new object (Obsidian pickaxe) itself?
×
×
  • Create New...

Important Information

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