NaturesAura/src/main/java/de/ellpeck/naturesaura/compat/CuriosCompat.java

101 lines
3.9 KiB
Java
Raw Normal View History

2020-01-26 19:26:50 +01:00
package de.ellpeck.naturesaura.compat;
import com.google.common.collect.ImmutableMap;
import de.ellpeck.naturesaura.NaturesAura;
2020-01-29 00:40:28 +01:00
import de.ellpeck.naturesaura.data.ItemTagProvider;
2020-02-07 15:22:30 +01:00
import de.ellpeck.naturesaura.items.ModItems;
2021-12-19 16:35:03 +01:00
import net.minecraft.core.Direction;
import net.minecraft.resources.ResourceLocation;
2020-09-22 16:16:25 +02:00
import net.minecraft.tags.ItemTags;
2021-12-19 16:35:03 +01:00
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
2020-01-26 19:26:50 +01:00
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.fml.InterModComms;
2021-03-30 16:22:40 +02:00
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
2020-01-26 19:26:50 +01:00
import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
2020-09-22 03:17:02 +02:00
import top.theillusivec4.curios.api.CuriosCapability;
2021-03-30 16:22:40 +02:00
import top.theillusivec4.curios.api.SlotContext;
2020-09-22 16:16:25 +02:00
import top.theillusivec4.curios.api.SlotTypeMessage;
import top.theillusivec4.curios.api.type.capability.ICurio;
2020-01-26 19:26:50 +01:00
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Map;
public class CuriosCompat implements ICompat {
2020-09-22 03:17:02 +02:00
2020-09-22 16:16:25 +02:00
private static final Map<Item, String> TYPES = ImmutableMap.<Item, String>builder()
.put(ModItems.EYE, "charm")
.put(ModItems.EYE_IMPROVED, "charm")
.put(ModItems.AURA_CACHE, "belt")
.put(ModItems.AURA_TROVE, "belt")
.put(ModItems.SHOCKWAVE_CREATOR, "necklace")
.put(ModItems.DEATH_RING, "ring")
2020-01-26 19:26:50 +01:00
.build();
@Override
2021-03-30 16:22:40 +02:00
public void setup(FMLCommonSetupEvent event) {
2020-09-22 16:16:25 +02:00
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::sendImc);
MinecraftForge.EVENT_BUS.addGenericListener(ItemStack.class, this::onCapabilitiesAttach);
2020-01-26 19:26:50 +01:00
}
2020-04-26 20:40:28 +02:00
@Override
public void setupClient() {
}
2020-09-22 16:16:25 +02:00
private void sendImc(InterModEnqueueEvent event) {
2022-06-27 15:24:04 +02:00
CuriosCompat.TYPES.values().stream().distinct().forEach(t -> InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> new SlotTypeMessage.Builder(t).build()));
2020-01-26 19:26:50 +01:00
}
2020-09-22 16:16:25 +02:00
private void onCapabilitiesAttach(AttachCapabilitiesEvent<ItemStack> event) {
2021-12-19 16:35:03 +01:00
var stack = event.getObject();
2022-06-27 15:24:04 +02:00
if (CuriosCompat.TYPES.containsKey(stack.getItem())) {
2020-01-26 19:26:50 +01:00
event.addCapability(new ResourceLocation(NaturesAura.MOD_ID, "curios"), new ICapabilityProvider() {
2020-10-19 21:26:32 +02:00
private final LazyOptional<ICurio> curio = LazyOptional.of(() -> new ICurio() {
@Override
2021-12-19 16:35:03 +01:00
public void curioTick(SlotContext slotContext) {
2023-07-08 12:32:27 +02:00
stack.getItem().inventoryTick(stack, slotContext.entity().level(), slotContext.entity(), -1, false);
2021-12-19 16:35:03 +01:00
}
2020-10-19 21:26:32 +02:00
2021-12-19 16:35:03 +01:00
@Override
public ItemStack getStack() {
return stack;
2020-10-19 21:26:32 +02:00
}
@Override
2021-03-30 16:22:40 +02:00
public boolean canEquipFromUse(SlotContext slotContext) {
2020-10-19 21:26:32 +02:00
return true;
}
@Override
2021-12-19 16:35:03 +01:00
public boolean canSync(SlotContext slotContext) {
2020-10-19 21:26:32 +02:00
return true;
}
});
2020-01-26 19:26:50 +01:00
@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
if (cap != CuriosCapability.ITEM)
return LazyOptional.empty();
2020-10-19 21:26:32 +02:00
return this.curio.cast();
2020-01-26 19:26:50 +01:00
}
});
}
}
@Override
public void addItemTags(ItemTagProvider provider) {
2022-06-27 15:24:04 +02:00
for (var entry : CuriosCompat.TYPES.entrySet()) {
2022-03-04 15:59:04 +01:00
var tag = ItemTags.create(new ResourceLocation("curios", entry.getValue()));
2021-12-19 16:35:03 +01:00
provider.tag(tag).add(entry.getKey());
2020-09-22 16:16:25 +02:00
}
}
2020-01-26 19:26:50 +01:00
}