Skip to content

Instantly share code, notes, and snippets.

@CrispyChips6660
Created July 2, 2020 04:19
Show Gist options
  • Save CrispyChips6660/98e06ccc19e468b02a259abc1de4e6d1 to your computer and use it in GitHub Desktop.
Save CrispyChips6660/98e06ccc19e468b02a259abc1de4e6d1 to your computer and use it in GitHub Desktop.
/**
* The class that subscribes the event to trigger inter mod communication for registering slot types.
*/
package potatocult.curios_support;
import net.minecraft.block.Block;
import net.minecraft.block.EnderChestBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Direction;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.event.AttachCapabilitiesEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.InterModComms;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import top.theillusivec4.curios.api.CuriosAPI;
import top.theillusivec4.curios.api.capability.CuriosCapability;
import top.theillusivec4.curios.api.capability.ICurio;
import top.theillusivec4.curios.api.imc.CurioIMCMessage;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class ModEventSubscriber extends CuriosSupportExampleModElements.ModElement {
/**
* Constructor. Also registers the Enqueue IMC event and the attachCapabilities event.
*/
public ModEventSubscriber(CuriosSupportExampleModElements instance) {
super(instance, 1);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::enqueueIMC);
MinecraftForge.EVENT_BUS.addGenericListener(ItemStack.class, this::attachCapabilities);
}
/**
* Sends inter mod communication to Curios to register slot types.
* In 99% of cases you should use slot types here: https://github.com/TheIllusiveC4/Curios/wiki/Frequently-Used-Slots
* If you don't use those slot types, the slot won't have a default icon and you would need to register one yourself!
* @param event The Enqueue IMC event.
* This has to be here to register the curio slots
*/
private void enqueueIMC(final InterModEnqueueEvent event) {
InterModComms.sendTo(CuriosAPI.MODID, CuriosAPI.IMC.REGISTER_TYPE, () -> new CurioIMCMessage("ring").setSize(1).setEnabled(true).setHidden(false));
InterModComms.sendTo(CuriosAPI.MODID, CuriosAPI.IMC.REGISTER_TYPE, () -> new CurioIMCMessage("back").setSize(1).setEnabled(true).setHidden(false));
}
/**
*
* Attach capabilities for {@link potatocult.curios_support.CurioEnderChest}
*/
@SubscribeEvent
public void attachCapabilities(AttachCapabilitiesEvent<ItemStack> event) {
ItemStack stack = event.getObject();
Block block = EnderChestBlock.getBlockFromItem(stack.getItem());
CurioEnderChest curioEnderChest = new CurioEnderChest(stack);
event.addCapability(CuriosCapability.ID_ITEM, new ICapabilityProvider() {
final LazyOptional<ICurio> curio = LazyOptional.of(() -> curioEnderChest);
@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap,
@Nullable Direction side) {
return CuriosCapability.ITEM.orEmpty(cap, curio);
}
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment