diff options
Diffstat (limited to 'src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java')
-rw-r--r-- | src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java | 839 |
1 files changed, 0 insertions, 839 deletions
diff --git a/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java b/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java deleted file mode 100644 index f5bd7a92f4..0000000000 --- a/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java +++ /dev/null @@ -1,839 +0,0 @@ -package gregtech.api.util; - -import static gregtech.api.enums.GT_Values.E; - -import java.lang.ref.WeakReference; -import java.util.List; -import java.util.function.Supplier; - -import javax.annotation.Nullable; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagInt; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizons.modularui.api.ModularUITextures; -import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.GregTech_API; -import gregtech.api.gui.GT_GUIColorOverride; -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GUITextureSet; -import gregtech.api.gui.widgets.GT_CoverTickRateButton; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.common.covers.CoverInfo; - -/** - * For Covers with a special behavior. - * - * @author glease - */ -public abstract class GT_CoverBehaviorBase<T extends ISerializableObject> { - - public WeakReference<EntityPlayer> lastPlayer = null; - private final Class<T> typeToken; - private final ITexture coverFGTexture; - - protected GT_CoverBehaviorBase(Class<T> typeToken) { - this(typeToken, null); - } - - protected GT_CoverBehaviorBase(Class<T> typeToken, ITexture coverTexture) { - this.typeToken = typeToken; - this.coverFGTexture = coverTexture; - reloadColorOverride(); - } - - public void reloadColorOverride() { - this.colorOverride = GT_GUIColorOverride.get(guiTexturePath); - } - - public abstract T createDataObject(int aLegacyData); - - public abstract T createDataObject(); - - public final T createDataObject(NBTBase aNBT) { - // Handle legacy data (migrating from GT_CoverBehavior to GT_CoverBehaviorBase) - if (aNBT instanceof NBTTagInt) { - return createDataObject(((NBTTagInt) aNBT).func_150287_d()); - } - - final T ret = createDataObject(); - ret.loadDataFromNBT(aNBT); - return ret; - } - - public final T cast(ISerializableObject aData) { - if (typeToken.isInstance(aData)) return forceCast(aData); - return null; - } - - private T forceCast(ISerializableObject aData) { - try { - return typeToken.cast(aData); - } catch (Exception e) { - throw new RuntimeException("Casting data in " + this.getClass() + ", data " + aData, e); - } - } - - // region facade - - /** - * Get target facade block. Does not affect rendering of **this** block. It is only used as a hint for other block - * in case of CTM - * - * @return null if none, otherwise return facade target block - */ - public final Block getFacadeBlock(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return getFacadeBlockImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Get target facade block. Does not affect rendering of **this** block. It is only used as a hint for other block - * in case of CTM - * - * @return 0 if none, otherwise return facade target meta - */ - public final int getFacadeMeta(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return getFacadeMetaImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Get the display stack. Default to {@code int2Stack(aCoverID)} - */ - public final ItemStack getDisplayStack(int aCoverID, ISerializableObject aCoverVariable) { - return getDisplayStackImpl(aCoverID, forceCast(aCoverVariable)); - } - - /** - * Get the special foreground cover texture associated with this cover. Return null if one should use the texture - * passed to {@link gregtech.api.GregTech_API#registerCover(ItemStack, ITexture, GT_CoverBehaviorBase)} or its - * overloads. - */ - public final ITexture getSpecialCoverFGTexture(ForgeDirection side, int aCoverID, - ISerializableObject aCoverVariable, ICoverable aTileEntity) { - return getSpecialCoverFGTextureImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Get the special cover texture associated with this cover. Return null if one should use the texture passed to - * {@link gregtech.api.GregTech_API#registerCover(ItemStack, ITexture, GT_CoverBehaviorBase)} or its overloads. - */ - public final ITexture getSpecialCoverTexture(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return getSpecialCoverTextureImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Return whether cover data needs to be synced to client upon tile entity creation or cover placement. - * <p> - * Note if you want to sync the data afterwards you will have to manually do it by calling - * {@link ICoverable#issueCoverUpdate(ForgeDirection)} This option only affects the initial sync. - */ - public final boolean isDataNeededOnClient(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return isDataNeededOnClientImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Called upon receiving data from network. Use {@link ICoverable#isClientSide()} to determine the side. - */ - public final void onDataChanged(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - onDataChangedImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Called before receiving data from network. Use {@link ICoverable#isClientSide()} to determine the side. - */ - public final void preDataChanged(ForgeDirection side, int aCoverID, int aNewCoverId, - ISerializableObject aCoverVariable, ISerializableObject aNewCoverVariable, ICoverable aTileEntity) { - preDataChangedImpl( - side, - aCoverID, - aNewCoverId, - forceCast(aCoverVariable), - forceCast(aNewCoverVariable), - aTileEntity); - } - - /** - * Called upon cover being removed. Called on both server and client. - */ - public final void onDropped(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - onDroppedImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - public final boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity, long aTimer) { - return isRedstoneSensitiveImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity, aTimer); - } - - /** - * Called by updateEntity inside the covered TileEntity. aCoverVariable is the Value you returned last time. - */ - public final T doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, - ISerializableObject aCoverVariable, ICoverable aTileEntity, long aTimer) { - return doCoverThingsImpl(side, aInputRedstone, aCoverID, forceCast(aCoverVariable), aTileEntity, aTimer); - } - - /** - * Called when someone rightclicks this Cover. - * <p/> - * return true, if something actually happens. - */ - public final boolean onCoverRightClick(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - return onCoverRightClickImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity, aPlayer, aX, aY, aZ); - } - - /** - * Called when someone rightclicks this Cover with a Screwdriver. Doesn't call @onCoverRightclick in this Case. - * <p/> - * return the new Value of the Cover Variable - */ - public final T onCoverScrewdriverClick(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - return onCoverScrewdriverClickImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity, aPlayer, aX, aY, aZ); - } - - /** - * Called when someone shift-rightclicks this Cover with no tool. Doesn't call @onCoverRightclick in this Case. - */ - public final boolean onCoverShiftRightClick(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity, EntityPlayer aPlayer) { - return onCoverShiftRightClickImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity, aPlayer); - } - - /** - * Removes the Cover if this returns true, or if aForced is true. Doesn't get called when the Machine Block is - * getting broken, only if you break the Cover away from the Machine. - */ - public final boolean onCoverRemoval(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity, boolean aForced) { - return onCoverRemovalImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity, aForced); - } - - /** - * Called upon Base TE being destroyed (once getDrops is called), thus getting called only when destroyed in - * survival. - */ - public final void onBaseTEDestroyed(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - onBaseTEDestroyedImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Gives a small Text for the status of the Cover. - */ - public final String getDescription(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return getDescriptionImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Called when Base TE being unloaded. - */ - public void onCoverUnload(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - onCoverUnloadImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * How Blast Proof the Cover is. 30 is normal. - */ - public final float getBlastProofLevel(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return getBlastProofLevelImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * If it lets RS-Signals into the Block - * <p/> - * This is just Informative so that Machines know if their Redstone Input is blocked or not - */ - public final boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return letsRedstoneGoInImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * If it lets RS-Signals out of the Block - */ - public final boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return letsRedstoneGoOutImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * If it lets Energy into the Block - */ - public final boolean letsEnergyIn(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return letsEnergyInImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * If it lets Energy out of the Block - */ - public final boolean letsEnergyOut(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return letsEnergyOutImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * If it lets Liquids into the Block, aFluid can be null meaning if this is generally allowing Fluids or not. - */ - public final boolean letsFluidIn(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - Fluid aFluid, ICoverable aTileEntity) { - return letsFluidInImpl(side, aCoverID, forceCast(aCoverVariable), aFluid, aTileEntity); - } - - /** - * If it lets Liquids out of the Block, aFluid can be null meaning if this is generally allowing Fluids or not. - */ - public final boolean letsFluidOut(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - Fluid aFluid, ICoverable aTileEntity) { - return letsFluidOutImpl(side, aCoverID, forceCast(aCoverVariable), aFluid, aTileEntity); - } - - /** - * If it lets Items into the Block, aSlot = -1 means if it is generally accepting Items (return false for no - * reaction at all), aSlot = -2 means if it would accept for all Slots Impl(return true to skip the Checks for each - * Slot). - */ - public final boolean letsItemsIn(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return letsItemsInImpl(side, aCoverID, forceCast(aCoverVariable), aSlot, aTileEntity); - } - - /** - * If it lets Items out of the Block, aSlot = -1 means if it is generally accepting Items (return false for no - * reaction at all), aSlot = -2 means if it would accept for all Slots Impl(return true to skip the Checks for each - * Slot). - */ - public final boolean letsItemsOut(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return letsItemsOutImpl(side, aCoverID, forceCast(aCoverVariable), aSlot, aTileEntity); - } - - /** - * If it lets you rightclick the Machine normally - */ - public final boolean isGUIClickable(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return isGUIClickableImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Needs to return true for Covers, which have a Redstone Output on their Facing. - */ - public final boolean manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, - ISerializableObject aCoverVariable, ICoverable aTileEntity) { - return manipulatesSidedRedstoneOutputImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * if this Cover should let Pipe Connections look connected even if it is not the case. - */ - public final boolean alwaysLookConnected(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return alwaysLookConnectedImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Called to determine the incoming Redstone Signal of a Machine. Returns the original Redstone per default. The - * Cover should @letsRedstoneGoIn or the aInputRedstone Parameter is always 0. - */ - public final byte getRedstoneInput(ForgeDirection side, byte aInputRedstone, int aCoverID, - ISerializableObject aCoverVariable, ICoverable aTileEntity) { - return getRedstoneInputImpl(side, aInputRedstone, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Gets the Tick Rate for doCoverThings of the Cover - * <p/> - * 0 = No Ticks! Yes, 0 is Default, you have to override this - */ - public final int getTickRate(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return getTickRateImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * The MC Color of this Lens. -1 for no Color (meaning this isn't a Lens then). - */ - public final byte getLensColor(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return getLensColorImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * @return the ItemStack dropped by this Cover - */ - public final ItemStack getDrop(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return getDropImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Called when the cover is initially attached to a machine. - * - * @param player The attaching player - * @param aCover An {@link ItemStack} containing the cover - * @param aTileEntity The machine receiving the cover - * @param side Which side the cover is attached to - */ - public void onPlayerAttach(EntityPlayer player, ItemStack aCover, ICoverable aTileEntity, ForgeDirection side) { - // Do nothing by default. - } - - // endregion - - // region UI stuff - - protected GT_TooltipDataCache mTooltipCache = new GT_TooltipDataCache(); - protected GT_GUIColorOverride colorOverride; - private static final String guiTexturePath = "gregtech:textures/gui/GuiCover.png"; - - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new UIFactory(buildContext).createWindow(); - } - - /** - * Creates {@link ModularWindow} for this cover. This is separated from base class, as attaching the same covers in - * different sides of the same tile needs different UI with different context. - */ - protected class UIFactory { - - private final GT_CoverUIBuildContext uiBuildContext; - - public UIFactory(GT_CoverUIBuildContext buildContext) { - this.uiBuildContext = buildContext; - } - - public ModularWindow createWindow() { - ModularWindow.Builder builder = ModularWindow.builder(getGUIWidth(), getGUIHeight()); - builder.setBackground(ModularUITextures.VANILLA_BACKGROUND); - builder.setGuiTint(getUIBuildContext().getGuiColorization()); - maybeBindPlayerInventory(builder); - addTitleToUI(builder); - addUIWidgets(builder); - if (getUIBuildContext().isAnotherWindow()) { - builder.widget( - ButtonWidget.closeWindowButton(true) - .setPos(getGUIWidth() - 15, 3)); - } - - final CoverInfo coverInfo = uiBuildContext.getTile() - .getCoverInfoAtSide(uiBuildContext.getCoverSide()); - final GT_CoverBehaviorBase<?> behavior = coverInfo.getCoverBehavior(); - if (coverInfo.getMinimumTickRate() > 0 && behavior.allowsTickRateAddition()) { - builder.widget( - new GT_CoverTickRateButton(coverInfo, builder).setPos(getGUIWidth() - 24, getGUIHeight() - 24)); - } - - return builder.build(); - } - - protected void maybeBindPlayerInventory(ModularWindow.Builder builder) { - if (doesBindPlayerInventory() && !getUIBuildContext().isAnotherWindow()) { - builder.bindPlayerInventory(getUIBuildContext().getPlayer(), 7, GUITextureSet.DEFAULT.getItemSlot()); - } - } - - /** - * Override this to add widgets for your UI. - */ - protected void addUIWidgets(ModularWindow.Builder builder) {} - - public GT_CoverUIBuildContext getUIBuildContext() { - return uiBuildContext; - } - - /** - * Can return null when cover data is invalid e.g. tile is broken or cover is removed - */ - @Nullable - public T getCoverData() { - if (isCoverValid()) { - return forceCast( - getUIBuildContext().getTile() - .getComplexCoverDataAtSide(getUIBuildContext().getCoverSide())); - } else { - return null; - } - } - - public boolean setCoverData(T data) { - if (isCoverValid()) { - getUIBuildContext().getTile() - .receiveCoverData( - getUIBuildContext().getCoverSide(), - getUIBuildContext().getCoverID(), - data, - getUIBuildContext().getPlayer() instanceof EntityPlayerMP - ? (EntityPlayerMP) getUIBuildContext().getPlayer() - : null); - return true; - } else { - return false; - } - } - - public boolean isCoverValid() { - return !getUIBuildContext().getTile() - .isDead() - && getUIBuildContext().getTile() - .getCoverBehaviorAtSideNew(getUIBuildContext().getCoverSide()) != GregTech_API.sNoBehavior; - } - - protected void addTitleToUI(ModularWindow.Builder builder) { - ItemStack coverItem = GT_Utility.intToStack(getUIBuildContext().getCoverID()); - if (coverItem != null) { - builder.widget( - new ItemDrawable(coverItem).asWidget() - .setPos(5, 5) - .setSize(16, 16)) - .widget( - new TextWidget(coverItem.getDisplayName()).setDefaultColor(COLOR_TITLE.get()) - .setPos(25, 9)); - } - } - - protected int getGUIWidth() { - return 176; - } - - protected int getGUIHeight() { - return 107; - } - - protected boolean doesBindPlayerInventory() { - return false; - } - - protected int getTextColorOrDefault(String textType, int defaultColor) { - return colorOverride.getTextColorOrDefault(textType, defaultColor); - } - - protected final Supplier<Integer> COLOR_TITLE = () -> getTextColorOrDefault("title", 0x222222); - protected final Supplier<Integer> COLOR_TEXT_GRAY = () -> getTextColorOrDefault("text_gray", 0x555555); - protected final Supplier<Integer> COLOR_TEXT_WARN = () -> getTextColorOrDefault("text_warn", 0xff0000); - } - - // endregion - - // region impl - - protected Block getFacadeBlockImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { - return null; - } - - protected int getFacadeMetaImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { - return 0; - } - - protected ItemStack getDisplayStackImpl(int aCoverID, T aCoverVariable) { - return GT_Utility.intToStack(aCoverID); - } - - protected ITexture getSpecialCoverFGTextureImpl(ForgeDirection side, int aCoverID, T aCoverVariable, - ICoverable aTileEntity) { - return coverFGTexture; - } - - protected ITexture getSpecialCoverTextureImpl(ForgeDirection side, int aCoverID, T aCoverVariable, - ICoverable aTileEntity) { - return null; - } - - protected boolean isDataNeededOnClientImpl(ForgeDirection side, int aCoverID, T aCoverVariable, - ICoverable aTileEntity) { - return false; - } - - protected void onDataChangedImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) {} - - protected void preDataChangedImpl(ForgeDirection side, int aCoverID, int aNewCoverId, T aCoverVariable, - T aNewCoverVariable, ICoverable aTileEntity) {} - - protected void onDroppedImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) {} - - protected void onBaseTEDestroyedImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) {} - - protected void onCoverUnloadImpl(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) {} - - protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, T aCoverVariable, - ICoverable aTileEntity, long aTimer) { - return false; - } - - /** - * Called by updateEntity inside the covered TileEntity. aCoverVariable is the Value you returned last time. - */ - protected T doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, T aCoverVariable, - ICoverable aTileEntity, long aTimer) { - return aCoverVariable; - } - - /** - * Called when someone rightclicks this Cover. - * <p/> - * return true, if something actually happens. - */ - protected boolean onCoverRightClickImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - return false; - } - - /** - * Called when someone rightclicks this Cover with a Screwdriver. Doesn't call @onCoverRightclick in this Case. - * <p/> - * return the new Value of the Cover Variable - */ - protected T onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - return aCoverVariable; - } - - /** - * Called when someone shift-rightclicks this Cover with no tool. Doesn't call @onCoverRightclick in this Case. - */ - protected boolean onCoverShiftRightClickImpl(ForgeDirection side, int aCoverID, T aCoverVariable, - ICoverable aTileEntity, EntityPlayer aPlayer) { - if (hasCoverGUI() && aPlayer instanceof EntityPlayerMP) { - lastPlayer = new WeakReference<>(aPlayer); - GT_UIInfos.openCoverUI(aTileEntity, aPlayer, side); - return true; - } - return false; - } - - /** - * Removes the Cover if this returns true, or if aForced is true. Doesn't get called when the Machine Block is - * getting broken, only if you break the Cover away from the Machine. - */ - protected boolean onCoverRemovalImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity, - boolean aForced) { - return true; - } - - /** - * Gives a small Text for the status of the Cover. - */ - protected String getDescriptionImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { - return E; - } - - /** - * How Blast Proof the Cover is. 30 is normal. - */ - protected float getBlastProofLevelImpl(ForgeDirection side, int aCoverID, T aCoverVariable, - ICoverable aTileEntity) { - return 10.0F; - } - - /** - * If it lets RS-Signals into the Block - * <p/> - * This is just Informative so that Machines know if their Redstone Input is blocked or not - */ - protected boolean letsRedstoneGoInImpl(ForgeDirection side, int aCoverID, T aCoverVariable, - ICoverable aTileEntity) { - return false; - } - - /** - * If it lets RS-Signals out of the Block - */ - protected boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, T aCoverVariable, - ICoverable aTileEntity) { - return false; - } - - /** - * If it lets Energy into the Block - */ - protected boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { - return false; - } - - /** - * If it lets Energy out of the Block - */ - protected boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { - return false; - } - - /** - * If it lets Liquids into the Block, aFluid can be null meaning if this is generally allowing Fluids or not. - */ - protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, T aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return false; - } - - /** - * If it lets Liquids out of the Block, aFluid can be null meaning if this is generally allowing Fluids or not. - */ - protected boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, T aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return false; - } - - /** - * If it lets Items into the Block, aSlot = -1 means if it is generally accepting Items (return false for no - * Interaction at all), aSlot = -2 means if it would accept for all Slots (return true to skip the Checks for each - * Slot). - */ - protected boolean letsItemsInImpl(ForgeDirection side, int aCoverID, T aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return false; - } - - /** - * If it lets Items out of the Block, aSlot = -1 means if it is generally accepting Items (return false for no - * Interaction at all), aSlot = -2 means if it would accept for all Slots (return true to skip the Checks for each - * Slot). - */ - protected boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, T aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return false; - } - - /** - * If it lets you rightclick the Machine normally - */ - protected boolean isGUIClickableImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { - return true; - } - - /** - * Needs to return true for Covers, which have a Redstone Output on their Facing. - */ - protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, T aCoverVariable, - ICoverable aTileEntity) { - return false; - } - - /** - * if this Cover should let Pipe Connections look connected even if it is not the case. - */ - protected boolean alwaysLookConnectedImpl(ForgeDirection side, int aCoverID, T aCoverVariable, - ICoverable aTileEntity) { - return false; - } - - /** - * Called to determine the incoming Redstone Signal of a Machine. Returns the original Redstone per default. The - * Cover should @letsRedstoneGoIn or the aInputRedstone Parameter is always 0. - */ - protected byte getRedstoneInputImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, T aCoverVariable, - ICoverable aTileEntity) { - return letsRedstoneGoIn(side, aCoverID, aCoverVariable, aTileEntity) ? aInputRedstone : 0; - } - - /** - * Gets the Tick Rate for doCoverThings of the Cover - * <p/> - * 0 = No Ticks! Yes, 0 is Default, you have to override this - */ - protected int getTickRateImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { - return 0; - } - - /** - * The MC Color of this Lens. -1 for no Color (meaning this isn't a Lens then). - */ - protected byte getLensColorImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { - return -1; - } - - /** - * @return the ItemStack dropped by this Cover - */ - protected ItemStack getDropImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { - return GT_OreDictUnificator.get(true, aTileEntity.getCoverItemAtSide(side)); - } - - // endregion - - // region no data - - /** - * Checks if the Cover can be placed on this. - */ - public boolean isCoverPlaceable(ForgeDirection side, ItemStack aStack, ICoverable aTileEntity) { - return true; - } - - public boolean hasCoverGUI() { - return false; - } - - /** - * Called when someone rightclicks this Cover Client Side - * <p/> - * return true, if something actually happens. - */ - public boolean onCoverRightclickClient(ForgeDirection side, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, - float aY, float aZ) { - return false; - } - - /** - * If this is a simple Cover, which can also be used on Bronze Machines and similar. - */ - public boolean isSimpleCover() { - return false; - } - - /** - * sets the Cover upon placement. - */ - public void placeCover(ForgeDirection side, ItemStack aCover, ICoverable aTileEntity) { - aTileEntity.setCoverIDAtSide(side, GT_Utility.stackToInt(aCover)); - } - - public boolean allowsCopyPasteTool() { - return true; - } - - public boolean allowsTickRateAddition() { - return true; - } - - @NotNull - public final List<String> getAdditionalTooltip(ISerializableObject coverData) { - return getAdditionalTooltipImpl(forceCast(coverData)); - } - - /** - * Override to add to the tooltip generated when a user hovers over the cover on the left side of a machine's UI. - * - * @param coverData The cover data associated with the cover on a particular side. - * @return A list of new tooltip entries. Entries are inserted at the top, just after the name and direction line. - */ - protected List<String> getAdditionalTooltipImpl(T coverData) { - return ImmutableList.of(); - } - // endregion -} |