Created
July 2, 2020 04:19
-
-
Save CrispyChips6660/98e06ccc19e468b02a259abc1de4e6d1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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