diff options
Diffstat (limited to 'src/main/java/gregtech/api/multitileentity/interfaces')
11 files changed, 618 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/multitileentity/interfaces/IItemUpdatable.java b/src/main/java/gregtech/api/multitileentity/interfaces/IItemUpdatable.java new file mode 100644 index 0000000000..89d281eb27 --- /dev/null +++ b/src/main/java/gregtech/api/multitileentity/interfaces/IItemUpdatable.java @@ -0,0 +1,19 @@ +package gregtech.api.multitileentity.interfaces; + +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public interface IItemUpdatable { + + /** + * Updates the Data of the ItemStack. Not called every tick but instead called whenever something important happens + * to the Stack. + */ + void updateItemStack(ItemStack aStack); + + /** + * Updates the Data of the ItemStack. Not called every tick but instead called whenever something important happens + * to the Stack. + */ + void updateItemStack(ItemStack aStack, World aWorld, int aX, int aY, int aZ); +} diff --git a/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockController.java b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockController.java new file mode 100644 index 0000000000..58af918c50 --- /dev/null +++ b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockController.java @@ -0,0 +1,51 @@ +package gregtech.api.multitileentity.interfaces; + +import java.util.UUID; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.util.ChunkCoordinates; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.InventoryType; +import gregtech.api.gui.GUIHost; +import gregtech.api.logic.FluidInventoryLogic; +import gregtech.api.logic.ItemInventoryLogic; +import gregtech.api.logic.interfaces.FluidInventoryLogicHost; +import gregtech.api.logic.interfaces.ItemInventoryLogicHost; +import gregtech.api.logic.interfaces.PowerLogicHost; +import gregtech.api.multitileentity.enums.MultiTileCasingPurpose; + +public interface IMultiBlockController + extends IMultiTileEntity, FluidInventoryLogicHost, ItemInventoryLogicHost, UpgradableMuTE, PowerLogicHost, GUIHost { + + boolean checkStructure(boolean aForceReset); + + /** Set the structure as having changed, and trigger an update */ + void onStructureChange(); + + @Override + ChunkCoordinates getCoords(); + + void registerCoveredPartOnSide(final ForgeDirection side, IMultiBlockPart part); + + void unregisterCoveredPartOnSide(final ForgeDirection side, IMultiBlockPart part); + + void registerCaseWithPurpose(MultiTileCasingPurpose purpose, IMultiBlockPart part); + + void unregisterCaseWithPurpose(MultiTileCasingPurpose purpose, IMultiBlockPart part); + + UUID registerItemInventory(int slots, int tier, @Nonnull InventoryType type, boolean isUpgradeInventory); + + ItemInventoryLogic unregisterItemInventory(@Nonnull UUID id, @Nonnull InventoryType type); + + void changeItemInventoryDisplayName(@Nonnull UUID id, @Nullable String displayName, @Nonnull InventoryType type); + + UUID registerFluidInventory(int tanks, long capacity, int tier, @Nonnull InventoryType type, + boolean isUpgradeInventory); + + FluidInventoryLogic unregisterFluidInventory(@Nonnull UUID id, @Nonnull InventoryType type); + + void changeFluidInventoryDisplayName(@Nonnull UUID id, @Nullable String displayName, @Nonnull InventoryType type); +} diff --git a/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockEnergy.java b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockEnergy.java new file mode 100644 index 0000000000..d6d8bf5310 --- /dev/null +++ b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockEnergy.java @@ -0,0 +1,42 @@ +package gregtech.api.multitileentity.interfaces; + +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.multitileentity.multiblock.base.MultiBlockPart; + +interface IMultiBlockEnergy { + + boolean isUniversalEnergyStored(MultiBlockPart aPart, long aEnergyAmount); + + long getUniversalEnergyStored(MultiBlockPart aPart); + + long getUniversalEnergyCapacity(MultiBlockPart aPart); + + long getOutputAmperage(MultiBlockPart aPart); + + long getOutputVoltage(MultiBlockPart aPart); + + long getInputAmperage(MultiBlockPart aPart); + + long getInputVoltage(MultiBlockPart aPart); + + boolean decreaseStoredEnergyUnits(MultiBlockPart aPart, long aEnergy, boolean aIgnoreTooLittleEnergy); + + boolean increaseStoredEnergyUnits(MultiBlockPart aPart, long aEnergy, boolean aIgnoreTooMuchEnergy); + + boolean drainEnergyUnits(MultiBlockPart aPart, ForgeDirection side, long aVoltage, long aAmperage); + + long injectEnergyUnits(MultiBlockPart aPart, ForgeDirection side, long aVoltage, long aAmperage); + + long getAverageElectricInput(MultiBlockPart aPart); + + long getAverageElectricOutput(MultiBlockPart aPart); + + long getStoredEU(MultiBlockPart aPart); + + long getEUCapacity(MultiBlockPart aPart); + + boolean inputEnergyFrom(MultiBlockPart aPart, ForgeDirection side); + + boolean outputsEnergyTo(MultiBlockPart aPart, ForgeDirection side); +} diff --git a/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockFluidHandler.java b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockFluidHandler.java new file mode 100644 index 0000000000..b513f51324 --- /dev/null +++ b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockFluidHandler.java @@ -0,0 +1,32 @@ +package gregtech.api.multitileentity.interfaces; + +import java.util.List; + +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidTank; + +import gregtech.api.multitileentity.multiblock.base.MultiBlockPart; + +public interface IMultiBlockFluidHandler { + + int fill(MultiBlockPart aPart, ForgeDirection aDirection, FluidStack aFluid, boolean aDoFill); + + FluidStack drain(MultiBlockPart aPart, ForgeDirection aDirection, FluidStack aFluid, boolean aDoDrain); + + FluidStack drain(MultiBlockPart aPart, ForgeDirection aDirection, int aAmountToDrain, boolean aDoDrain); + + boolean canFill(MultiBlockPart aPart, ForgeDirection aDirection, Fluid aFluid); + + boolean canDrain(MultiBlockPart aPart, ForgeDirection aDirection, Fluid aFluid); + + FluidTankInfo[] getTankInfo(MultiBlockPart aPart, ForgeDirection aDirection); + + IFluidTank[] getFluidTanksForGUI(MultiBlockPart aPart); + + List<String> getTankArrayNames(MultiBlockPart aPart); + + List<String> getTankArrayIDs(MultiBlockPart aPart); +} diff --git a/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockInventory.java b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockInventory.java new file mode 100644 index 0000000000..5dc0fec196 --- /dev/null +++ b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockInventory.java @@ -0,0 +1,60 @@ +package gregtech.api.multitileentity.interfaces; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable; + +import gregtech.api.multitileentity.multiblock.base.MultiBlockPart; + +public interface IMultiBlockInventory { + + boolean hasInventoryBeenModified(MultiBlockPart aPart); + + boolean isValidSlot(MultiBlockPart aPart, int aIndex); + + boolean addStackToSlot(MultiBlockPart aPart, int aIndex, ItemStack aStack); + + boolean addStackToSlot(MultiBlockPart aPart, int aIndex, ItemStack aStack, int aAmount); + + int[] getAccessibleSlotsFromSide(MultiBlockPart aPart, ForgeDirection side); + + boolean canInsertItem(MultiBlockPart aPart, int aSlot, ItemStack aStack, ForgeDirection side); + + boolean canExtractItem(MultiBlockPart aPart, int aSlot, ItemStack aStack, ForgeDirection side); + + int getSizeInventory(MultiBlockPart aPart); + + ItemStack getStackInSlot(MultiBlockPart aPart, int aSlot); + + ItemStack decrStackSize(MultiBlockPart aPart, int aSlot, int aDecrement); + + ItemStack getStackInSlotOnClosing(MultiBlockPart aPart, int aSlot); + + void setInventorySlotContents(MultiBlockPart aPart, int aSlot, ItemStack aStack); + + String getInventoryName(MultiBlockPart aPart); + + boolean hasCustomInventoryName(MultiBlockPart aPart); + + int getInventoryStackLimit(MultiBlockPart aPart); + + void markDirty(MultiBlockPart aPart); + + boolean isUseableByPlayer(MultiBlockPart aPart, EntityPlayer aPlayer); + + void openInventory(MultiBlockPart aPart); + + void closeInventory(MultiBlockPart aPart); + + boolean isItemValidForSlot(MultiBlockPart aPart, int aSlot, ItemStack aStack); + + IItemHandlerModifiable getInventoryForGUI(MultiBlockPart aPart); + + List<String> getInventoryNames(MultiBlockPart aPart); + + List<String> getInventoryIDs(MultiBlockPart aPart); +} diff --git a/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockPart.java b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockPart.java new file mode 100644 index 0000000000..59d838fdeb --- /dev/null +++ b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockPart.java @@ -0,0 +1,26 @@ +package gregtech.api.multitileentity.interfaces; + +import java.util.UUID; + +import net.minecraft.util.ChunkCoordinates; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.logic.interfaces.FluidInventoryLogicHost; +import gregtech.api.logic.interfaces.ItemInventoryLogicHost; + +public interface IMultiBlockPart extends IMultiTileEntity, ItemInventoryLogicHost, FluidInventoryLogicHost { + + ChunkCoordinates getTargetPos(); + + void setTargetPos(ChunkCoordinates aTargetPos); + + void setLockedInventoryIndex(int aIndex); + + int getLockedInventoryIndex(); + + UUID getLockedInventory(); + + boolean tickCoverAtSide(ForgeDirection side, long aTickTimer); + + boolean shouldTick(long tickTimer); +} diff --git a/src/main/java/gregtech/api/multitileentity/interfaces/IMultiTileEntity.java b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiTileEntity.java new file mode 100644 index 0000000000..91803690fc --- /dev/null +++ b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiTileEntity.java @@ -0,0 +1,293 @@ +package gregtech.api.multitileentity.interfaces; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import net.minecraft.block.Block; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.Explosion; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import cpw.mods.fml.common.Optional; +import gregtech.api.enums.Mods; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IDebugableTileEntity; +import gregtech.api.interfaces.tileentity.ITurnable; +import gregtech.api.multitileentity.MultiTileEntityBlockInternal; +import gregtech.api.multitileentity.MultiTileEntityItemInternal; +import gregtech.api.multitileentity.MultiTileEntityRegistry; + +/* + * Heavily inspired by GT6 + */ +public interface IMultiTileEntity extends ICoverable, ITurnable, IDebugableTileEntity { + + /** + * Those two IDs HAVE to be saved inside the NBT of the TileEntity itself. They get set by the Registry itself, when + * the TileEntity is placed. + */ + short getMultiTileEntityID(); + + short getMultiTileEntityRegistryID(); + + /** + * Called by the Registry with the default NBT Parameters and the two IDs you have to save, when the TileEntity is + * created. aNBT may be null, take that into account if you decide to call the regular readFromNBT Function from + * here. + */ + void initFromNBT(NBTTagCompound aNBT, short aMTEID, short aMTERegistry); + + /** Writes Item Data to the NBT. */ + NBTTagCompound writeItemNBT(NBTTagCompound aNBT); + + /** Sets the Item Display Name. Use null to reset it. */ + void setCustomName(String aName); + + String getCustomName(); + + /** return the internal Name of this TileEntity to be registered. */ + String getTileEntityName(); + + /** + * Called when a TileEntity of this particular Class is being registered first at any MultiTileEntity Registry. So + * basically one call per Class. + */ + void onRegistrationFirst(MultiTileEntityRegistry aRegistry, short aID); + + /** Called after the TileEntity has been placed and set up. */ + void onTileEntityPlaced(); + + /** Checks if the TileEntity is Invalid or Unloaded, should bes required for every TileEntity. */ + @Override + boolean isDead(); + + void loadTextures(String folder); + + void copyTextures(); + + void issueClientUpdate(); + + void sendClientData(EntityPlayerMP aPlayer); + + boolean receiveClientData(int aEventID, int aValue); + + void setShouldRefresh(boolean aShouldRefresh); + + void addCollisionBoxesToList(AxisAlignedBB aAABB, List<AxisAlignedBB> aList, Entity aEntity); + + AxisAlignedBB getCollisionBoundingBoxFromPool(); + + AxisAlignedBB getSelectedBoundingBoxFromPool(); + + void setBlockBoundsBasedOnState(Block aBlock); + + void onBlockAdded(); + + boolean playerOwnsThis(EntityPlayer aPlayer, boolean aCheckPrecicely); + + boolean privateAccess(); + + /** @return the amount of Time this TileEntity has been loaded. */ + @Override + long getTimer(); + + /** Sets the Owner of the Machine. Returns the set Name. */ + String setOwnerName(String aName); + + /** gets the Name of the Machines Owner or "Player" if not set. */ + String getOwnerName(); + + /** Gets the UniqueID of the Machines Owner. */ + UUID getOwnerUuid(); + + /** Sets the UniqueID of the Machines Owner. */ + void setOwnerUuid(UUID uuid); + + /** + * Causes a general Texture update. Only used Client Side to mark Blocks dirty. + */ + void issueTextureUpdate(); + + /** + * Paintable Support + */ + boolean unpaint(); + + boolean isPainted(); + + boolean paint(int aRGB); + + int getPaint(); + + /** + * Sets the main facing to {side} and update as appropriately + * + * @return Whether the facing was changed + */ + boolean setMainFacing(ForgeDirection side); + + boolean isFacingValid(ForgeDirection facing); + + void onFacingChange(); + + @Override + default void setFrontFacing(ForgeDirection side) { + setMainFacing(side); + } + + boolean shouldTriggerBlockUpdate(); + + void onMachineBlockUpdate(); + + boolean allowInteraction(Entity aEntity); + + default void onLeftClick(EntityPlayer aPlayer) { + /* do nothing */ + } + + boolean onBlockActivated(EntityPlayer aPlayer, ForgeDirection side, float aX, float aY, float aZ); + + boolean onRightClick(EntityPlayer aPlayer, ForgeDirection side, float aX, float aY, float aZ); + + ArrayList<ItemStack> getDrops(int aFortune, boolean aSilkTouch); + + boolean isSideSolid(ForgeDirection side); + + float getExplosionResistance(Entity aExploder, double aExplosionX, double aExplosionY, double aExplosionZ); + + float getExplosionResistance(); + + void onExploded(Explosion aExplosion); + + boolean recolourBlock(ForgeDirection side, byte aColor); + + /** Adds to the Creative Tab. return false to prevent it from being added. */ + boolean getSubItems(MultiTileEntityBlockInternal aBlock, Item aItem, CreativeTabs aTab, List<ItemStack> aList, + short aID); + + ItemStack getPickBlock(MovingObjectPosition aTarget); + + boolean shouldSideBeRendered(ForgeDirection side); + + boolean isSurfaceOpaque(ForgeDirection side); + + boolean onPlaced(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, ForgeDirection side, + float aHitX, float aHitY, float aHitZ); + + // ItemStack getPickBlock(MovingObjectPosition aTarget); + + /* + * Various Sub Interfaces from GT6 + */ + + interface IMTE_OnNeighborBlockChange extends IMultiTileEntity { + + void onNeighborBlockChange(World aWorld, Block aBlock); + } + + interface IMTE_IsProvidingWeakPower extends IMultiTileEntity { + + /** Remember that it passes the opposite Side due to the way vanilla works! */ + int isProvidingWeakPower(ForgeDirection oppositeSide); + } + + interface IMTE_IsProvidingStrongPower extends IMultiTileEntity { + + /** Remember that it passes the opposite Side due to the way vanilla works! */ + int isProvidingStrongPower(ForgeDirection oppositeSide); + } + + interface IMTE_ShouldCheckWeakPower extends IMultiTileEntity { + + boolean shouldCheckWeakPower(ForgeDirection side); + } + + interface IMTE_GetWeakChanges extends IMultiTileEntity { + + boolean getWeakChanges(); + } + + interface IMTE_GetComparatorInputOverride extends IMultiTileEntity { + + int getComparatorInputOverride(ForgeDirection side); + } + + interface IMTE_BreakBlock extends IMultiTileEntity { + + /** return true to prevent the TileEntity from being removed. */ + boolean breakBlock(); + } + + interface IMTE_HasMultiBlockMachineRelevantData extends IMultiTileEntity { + + /** Return true to mark this Block as a Machine Block for Multiblocks. (Triggers machine update thread) */ + boolean hasMultiBlockMachineRelevantData(); + } + + interface IMTE_GetBlockHardness extends IMultiTileEntity { + + float getBlockHardness(); + } + + interface IMTE_GetFoodValues extends IMultiTileEntity { + + @Optional.Method(modid = Mods.Names.APPLE_CORE) + squeek.applecore.api.food.FoodValues getFoodValues(MultiTileEntityItemInternal aItem, ItemStack aStack); + } + + interface IMTE_OnlyPlaceableWhenSneaking extends IMultiTileEntity { + + /** Return true to prevent placing this Block without Sneaking. */ + boolean onlyPlaceableWhenSneaking(); + } + + interface IMTE_IgnoreEntityCollisionWhenPlacing extends IMultiTileEntity { + + /** + * Return true to ignore the Player standing in the way of placing this Block; useful for things like + * pipes/wires. + */ + boolean ignoreEntityCollisionWhenPlacing(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, + int aZ, ForgeDirection side, float aHitX, float aHitY, float aHitZ); + } + + interface IMTE_CanPlace extends IMultiTileEntity { + + /** Return false if this TileEntity cannot be placed at that Location. */ + boolean canPlace(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, + ForgeDirection side, float aHitX, float aHitY, float aHitZ); + } + + interface IMTE_GetMaxStackSize extends IMultiTileEntity { + + /** Gets the Max Stacksize of this Item. */ + byte getMaxStackSize(ItemStack aStack, byte aDefault); + } + + interface IMTE_AddToolTips extends IMultiTileEntity { + + /** Adds ToolTips to the Item. */ + void addToolTips(List<String> aList, ItemStack aStack, boolean aF3_H); + } + + interface IMTE_HasModes extends IMultiTileEntity { + + int getMode(); + + void setMode(int mode); + + int getAllowedModes(); + + void setAllowedModes(int allowedModes); + } +} diff --git a/src/main/java/gregtech/api/multitileentity/interfaces/IMultiTileMachine.java b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiTileMachine.java new file mode 100644 index 0000000000..babb85d118 --- /dev/null +++ b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiTileMachine.java @@ -0,0 +1,10 @@ +package gregtech.api.multitileentity.interfaces; + +public interface IMultiTileMachine { + + void setBooleans(int booleans); + + int getBooleans(); + + void setSound(byte soundEvent, int soundEventValue); +} diff --git a/src/main/java/gregtech/api/multitileentity/interfaces/SyncedMultiTileEntity.java b/src/main/java/gregtech/api/multitileentity/interfaces/SyncedMultiTileEntity.java new file mode 100644 index 0000000000..2045f28d67 --- /dev/null +++ b/src/main/java/gregtech/api/multitileentity/interfaces/SyncedMultiTileEntity.java @@ -0,0 +1,63 @@ +package gregtech.api.multitileentity.interfaces; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayerMP; + +import gregtech.api.net.GT_Packet_MultiTileEntity; + +public interface SyncedMultiTileEntity { + + public static final int DEFAULT_TIMED_PACKET_PERIOD = 20; + + /** + * Will send a packet to the client when they open the controller or access a casing. + * Should only be sent to one player! + */ + void sendFullPacket(@Nonnull EntityPlayerMP player); + + /** + * Should always collect all the data that the controller or casing has and should send + * Called by {@link #sendFullPacket()} + * + * @param packet The packet which will be sent + */ + void getFullPacketData(GT_Packet_MultiTileEntity packet); + + /** + * Will send a packet at a certain period of time, defined by {@link #getTimedPacketPeriod()}, to all players around + * the controller or casing to send important information. + * Redstone state, color, ect. It shouldn't send data about the internals like inventory and processing time + */ + void sendTimedPacket(); + + /** + * Collects all the data that should be sent out at a certain period of time defined by + * {@link #getTimedPacketPeriod()} + * Called by {@link #sendTimedPacket()} + * + * @param packet The packet which will be sent + */ + void getTimedPacketData(GT_Packet_MultiTileEntity packet); + + /** + * Defines the period of time at which a timed packet should be sent out. Default 20 ticks + */ + default int getTimedPacketPeriod() { + return DEFAULT_TIMED_PACKET_PERIOD; + } + + /** + * Will send a packet, which should only contain data about how the TileEntity should be rendered. + * !!! Warning !!! This is sent every single tick! Do not put a lot of data here! + */ + void sendGraphicPacket(); + + /** + * Collects all the data that is needed to be send every single tick + * Called by {@link #sendGraphicPacket()} + * + * @param packet The packet which will be sent + */ + void getGraphicPacketData(GT_Packet_MultiTileEntity packet); +} diff --git a/src/main/java/gregtech/api/multitileentity/interfaces/UpgradableModularMuTE.java b/src/main/java/gregtech/api/multitileentity/interfaces/UpgradableModularMuTE.java new file mode 100644 index 0000000000..3b4c3cb6f3 --- /dev/null +++ b/src/main/java/gregtech/api/multitileentity/interfaces/UpgradableModularMuTE.java @@ -0,0 +1,10 @@ +package gregtech.api.multitileentity.interfaces; + +import gregtech.api.util.GT_StructureUtilityMuTE.UpgradeCasings; + +public interface UpgradableModularMuTE extends UpgradableMuTE { + + void increaseMucCount(UpgradeCasings casingType, int tier); + + void resetMucCount(); +} diff --git a/src/main/java/gregtech/api/multitileentity/interfaces/UpgradableMuTE.java b/src/main/java/gregtech/api/multitileentity/interfaces/UpgradableMuTE.java new file mode 100644 index 0000000000..c18852c95e --- /dev/null +++ b/src/main/java/gregtech/api/multitileentity/interfaces/UpgradableMuTE.java @@ -0,0 +1,12 @@ +package gregtech.api.multitileentity.interfaces; + +public interface UpgradableMuTE { + + void setCleanroom(boolean isCleanroom); + + void setWirelessSupport(boolean canUse); + + void setLaserSupport(boolean canUse); + + void setMaxAmperage(long amperage); +} |