diff --git a/build.properties b/build.properties index a7b8c6d8..ed545daa 100644 --- a/build.properties +++ b/build.properties @@ -3,7 +3,7 @@ minecraft_version=1.14.4 forge_version=28.1.1 mcp_mappings_channel=snapshot mcp_mappings_version=20190719-1.14.3 -cyclopscore_version=1.5.3-1001 +cyclopscore_version=1.5.3-1002 release_type=release fingerprint=bd0353b3e8a2810d60dd584e256e364bc3bedd44 diff --git a/src/main/java/org/cyclops/colossalchests/ColossalChests.java b/src/main/java/org/cyclops/colossalchests/ColossalChests.java index f354eedc..85f07581 100644 --- a/src/main/java/org/cyclops/colossalchests/ColossalChests.java +++ b/src/main/java/org/cyclops/colossalchests/ColossalChests.java @@ -14,6 +14,7 @@ import org.cyclops.colossalchests.inventory.container.ContainerColossalChestConfig; import org.cyclops.colossalchests.inventory.container.ContainerUncolossalChestConfig; import org.cyclops.colossalchests.item.ItemUpgradeToolConfig; +import org.cyclops.colossalchests.modcompat.CommonCapabilitiesModCompat; import org.cyclops.colossalchests.modcompat.IronChestModCompat; import org.cyclops.colossalchests.proxy.ClientProxy; import org.cyclops.colossalchests.proxy.CommonProxy; @@ -47,6 +48,7 @@ public ColossalChests() { @Override protected void loadModCompats(ModCompatLoader modCompatLoader) { modCompatLoader.addModCompat(new IronChestModCompat()); + modCompatLoader.addModCompat(new CommonCapabilitiesModCompat()); } @Override diff --git a/src/main/java/org/cyclops/colossalchests/Reference.java b/src/main/java/org/cyclops/colossalchests/Reference.java index 302e50fc..157cfd01 100644 --- a/src/main/java/org/cyclops/colossalchests/Reference.java +++ b/src/main/java/org/cyclops/colossalchests/Reference.java @@ -28,4 +28,5 @@ public class Reference { // MOD ID's public static final String MOD_IRONCHEST = "ironchest"; + public static final String MOD_COMMONCAPABILITIES = "commoncapabilities"; } diff --git a/src/main/java/org/cyclops/colossalchests/modcompat/CommonCapabilitiesModCompat.java b/src/main/java/org/cyclops/colossalchests/modcompat/CommonCapabilitiesModCompat.java new file mode 100644 index 00000000..41286c59 --- /dev/null +++ b/src/main/java/org/cyclops/colossalchests/modcompat/CommonCapabilitiesModCompat.java @@ -0,0 +1,74 @@ +package org.cyclops.colossalchests.modcompat; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import org.cyclops.colossalchests.Capabilities; +import org.cyclops.colossalchests.ColossalChests; +import org.cyclops.colossalchests.Reference; +import org.cyclops.colossalchests.tileentity.TileColossalChest; +import org.cyclops.commoncapabilities.api.capability.itemhandler.ISlotlessItemHandler; +import org.cyclops.cyclopscore.datastructure.Wrapper; +import org.cyclops.cyclopscore.inventory.IndexedSlotlessItemHandlerWrapper; +import org.cyclops.cyclopscore.modcompat.ICompatInitializer; +import org.cyclops.cyclopscore.modcompat.IModCompat; +import org.cyclops.cyclopscore.modcompat.capabilities.CapabilityConstructorRegistry; +import org.cyclops.cyclopscore.modcompat.capabilities.DefaultCapabilityProvider; +import org.cyclops.cyclopscore.modcompat.capabilities.SimpleCapabilityConstructor; + +import javax.annotation.Nullable; + +/** + * Mod compat for the Common Capabilities mod. + * @author rubensworks + * + */ +public class CommonCapabilitiesModCompat implements IModCompat { + + @Override + public String getId() { + return Reference.MOD_COMMONCAPABILITIES; + } + + @Override + public boolean isEnabledDefault() { + return true; + } + + @Override + public String getComment() { + return "If slotless item handlers should be registered to colossal chests."; + } + + @Override + public ICompatInitializer createInitializer() { + return () -> { + CapabilityConstructorRegistry registry = ColossalChests._instance.getCapabilityConstructorRegistry(); + // Worker + registry.registerTile(TileColossalChest.class, + new SimpleCapabilityConstructor() { + @Override + public Capability getCapability() { + return Capabilities.SLOTLESS_ITEMHANDLER; + } + + @Nullable + @Override + public ICapabilityProvider createProvider(TileColossalChest host) { + // Wrapper hack because Java otherwise complains that the optionalSlotlessItemHandler may not be initialized yet, and it won't compile. + Wrapper> optionalSlotlessItemHandler = new Wrapper<>(); + optionalSlotlessItemHandler.set(LazyOptional.of(() -> { + LazyOptional optionalItemHandler = host.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY); + optionalItemHandler.addListener((o) -> optionalSlotlessItemHandler.get().invalidate()); + return new IndexedSlotlessItemHandlerWrapper(optionalItemHandler.orElse(null), + (IndexedSlotlessItemHandlerWrapper.IInventoryIndexReference) host.getInventory()); + })); + return new DefaultCapabilityProvider<>(this::getCapability, optionalSlotlessItemHandler.get()); + } + }); + }; + } + +} diff --git a/src/main/java/org/cyclops/colossalchests/tileentity/TileColossalChest.java b/src/main/java/org/cyclops/colossalchests/tileentity/TileColossalChest.java index 605a6056..258f7fbd 100644 --- a/src/main/java/org/cyclops/colossalchests/tileentity/TileColossalChest.java +++ b/src/main/java/org/cyclops/colossalchests/tileentity/TileColossalChest.java @@ -2,13 +2,11 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Lists; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import lombok.experimental.Delegate; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.container.Container; import net.minecraft.inventory.container.INamedContainerProvider; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.network.play.server.SUpdateTileEntityPacket; @@ -31,13 +29,11 @@ import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.InvWrapper; import net.minecraftforge.registries.ForgeRegistries; -import org.cyclops.colossalchests.Capabilities; import org.cyclops.colossalchests.GeneralConfig; import org.cyclops.colossalchests.RegistryEntries; import org.cyclops.colossalchests.block.ChestMaterial; import org.cyclops.colossalchests.block.ColossalChestConfig; import org.cyclops.colossalchests.inventory.container.ContainerColossalChest; -import org.cyclops.commoncapabilities.api.capability.itemhandler.ISlotlessItemHandler; import org.cyclops.cyclopscore.datastructure.EnumFacingMap; import org.cyclops.cyclopscore.helper.DirectionHelpers; import org.cyclops.cyclopscore.helper.InventoryHelpers; @@ -45,7 +41,6 @@ import org.cyclops.cyclopscore.helper.WorldHelpers; import org.cyclops.cyclopscore.inventory.INBTInventory; import org.cyclops.cyclopscore.inventory.IndexedInventory; -import org.cyclops.cyclopscore.inventory.IndexedSlotlessItemHandlerWrapper; import org.cyclops.cyclopscore.inventory.LargeInventory; import org.cyclops.cyclopscore.inventory.SimpleInventory; import org.cyclops.cyclopscore.persist.nbt.NBTPersist; @@ -54,8 +49,6 @@ import javax.annotation.Nullable; import java.util.Collections; import java.util.List; -import java.util.Map; -import java.util.PrimitiveIterator; import java.util.Random; /** @@ -73,7 +66,6 @@ public class TileColossalChest extends CyclopsTileEntity implements CyclopsTileE private SimpleInventory lastValidInventory = null; private SimpleInventory inventory = null; private LazyOptional capabilityItemHandler = LazyOptional.empty(); - private LazyOptional capabilityItemHandlerSlotless = LazyOptional.empty(); @NBTPersist private Vec3i size = LocationHelpers.copyLocation(Vec3i.NULL_VECTOR); @@ -382,18 +374,12 @@ private void triggerPlayerUsageChange(int change) { public void setInventory(SimpleInventory inventory) { this.capabilityItemHandler.invalidate(); - this.capabilityItemHandlerSlotless.invalidate(); this.inventory = inventory; if (this.inventory.getSizeInventory() > 0) { IItemHandler itemHandler = new InvWrapper(this.inventory); this.capabilityItemHandler = LazyOptional.of(() -> itemHandler); - if (Capabilities.SLOTLESS_ITEMHANDLER != null) { - this.capabilityItemHandlerSlotless = LazyOptional.of(() -> - new IndexedSlotlessItemHandlerWrapper(itemHandler, (IndexedSlotlessItemHandlerWrapper.IInventoryIndexReference) this.inventory)); - } } else { this.capabilityItemHandler = LazyOptional.empty(); - this.capabilityItemHandlerSlotless = LazyOptional.empty(); } } @@ -420,9 +406,6 @@ public LazyOptional getCapability(Capability capability, Direction fac if (this.capabilityItemHandler.isPresent() && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { return this.capabilityItemHandler.cast(); } - if (this.capabilityItemHandlerSlotless.isPresent() && capability == Capabilities.SLOTLESS_ITEMHANDLER) { - return this.capabilityItemHandlerSlotless.cast(); - } return super.getCapability(capability, facing); }