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;
|
2020-01-26 19:26:50 +01:00
|
|
|
import net.minecraft.entity.LivingEntity;
|
|
|
|
import net.minecraft.item.Item;
|
|
|
|
import net.minecraft.item.ItemStack;
|
2020-09-22 16:16:25 +02:00
|
|
|
import net.minecraft.tags.ITag;
|
|
|
|
import net.minecraft.tags.ItemTags;
|
2020-01-26 19:26:50 +01:00
|
|
|
import net.minecraft.tags.Tag;
|
|
|
|
import net.minecraft.util.Direction;
|
|
|
|
import net.minecraft.util.ResourceLocation;
|
|
|
|
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.event.lifecycle.InterModEnqueueEvent;
|
|
|
|
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
2020-09-22 03:17:02 +02:00
|
|
|
import top.theillusivec4.curios.api.CuriosCapability;
|
2020-09-22 16:16:25 +02:00
|
|
|
import top.theillusivec4.curios.api.SlotTypeMessage;
|
|
|
|
import top.theillusivec4.curios.api.SlotTypePreset;
|
|
|
|
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
|
2020-04-26 20:40:28 +02:00
|
|
|
public void setup() {
|
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) {
|
|
|
|
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) {
|
2020-01-26 19:26:50 +01:00
|
|
|
ItemStack stack = event.getObject();
|
|
|
|
if (TYPES.containsKey(stack.getItem())) {
|
|
|
|
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
|
|
|
|
public void curioTick(String identifier, int index, LivingEntity livingEntity) {
|
|
|
|
stack.getItem().inventoryTick(stack, livingEntity.world, livingEntity, -1, false);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean canRightClickEquip() {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean canSync(String identifier, int index, LivingEntity livingEntity) {
|
|
|
|
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) {
|
2020-09-22 16:16:25 +02:00
|
|
|
for (Map.Entry<Item, String> entry : TYPES.entrySet()) {
|
|
|
|
ITag.INamedTag<Item> tag = ItemTags.createOptional(new ResourceLocation("curios", entry.getValue()));
|
|
|
|
provider.getOrCreateBuilder(tag).add(entry.getKey());
|
|
|
|
}
|
|
|
|
}
|
2020-01-26 19:26:50 +01:00
|
|
|
}
|