aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorquerns <33518699+querns@users.noreply.github.com>2023-10-09 09:55:31 -0500
committerGitHub <noreply@github.com>2023-10-09 16:55:31 +0200
commitdff250c6d32156270b9a39137346a2b3767cb4a2 (patch)
treec3ad948b6aa9e5b9edefde7e4517e9b78be7d2fe
parent45566b43ee5d8b8f75170916530fd884e0ff74db (diff)
downloadGT5-Unofficial-dff250c6d32156270b9a39137346a2b3767cb4a2.tar.gz
GT5-Unofficial-dff250c6d32156270b9a39137346a2b3767cb4a2.tar.bz2
GT5-Unofficial-dff250c6d32156270b9a39137346a2b3767cb4a2.zip
Allows covers to be configured to tick more slowly (#2307)
* Right clicking covers with a jackhammer will now make them tick more slowly * Interim commit, switching tasks * Finishes tick rate button in cover UIs * Change tick rate multiplier to a tick rate addition * Missed one number in the multiplier -> addition conversion * Hold Ctrl to adjust tick rate by 5 steps per click, move button closer to corner of cover GUI * Adjust how holding Ctrl computes tick rate change, remove gray formatting option for tick rate formatter * Cover tick rate addition can now be prevented per-cover-behavior, minor code tweaks
-rw-r--r--src/main/java/gregtech/api/GregTech_API.java3
-rw-r--r--src/main/java/gregtech/api/gui/modularui/GT_UITextures.java3
-rw-r--r--src/main/java/gregtech/api/gui/widgets/GT_CoverTickRateButton.java82
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java26
-rw-r--r--src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java15
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Block_Machines.java3
-rw-r--r--src/main/java/gregtech/common/covers/CoverInfo.java90
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java5
-rw-r--r--src/main/java/gregtech/common/items/GT_MetaGenerated_Tool_01.java20
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_Cover_Tool.java10
-rw-r--r--src/main/resources/assets/gregtech/lang/en_US.lang13
-rw-r--r--src/main/resources/assets/gregtech/textures/gui/overlay_button/hourglass.pngbin0 -> 7562 bytes
12 files changed, 257 insertions, 13 deletions
diff --git a/src/main/java/gregtech/api/GregTech_API.java b/src/main/java/gregtech/api/GregTech_API.java
index de295e2aa6..763c4210c9 100644
--- a/src/main/java/gregtech/api/GregTech_API.java
+++ b/src/main/java/gregtech/api/GregTech_API.java
@@ -183,7 +183,8 @@ public class GregTech_API {
public static final GT_HashSet<GT_ItemStack> sToolList = new GT_HashSet<>(), sCrowbarList = new GT_HashSet<>(),
sScrewdriverList = new GT_HashSet<>(), sWrenchList = new GT_HashSet<>(), sSoftHammerList = new GT_HashSet<>(),
sHardHammerList = new GT_HashSet<>(), sWireCutterList = new GT_HashSet<>(),
- sSolderingToolList = new GT_HashSet<>(), sSolderingMetalList = new GT_HashSet<>();
+ sSolderingToolList = new GT_HashSet<>(), sSolderingMetalList = new GT_HashSet<>(),
+ sJackhammerList = new GT_HashSet<>();
/**
* The List of Hazmat Armors
*/
diff --git a/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java b/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java
index 19bf3ca3f4..ffeec40561 100644
--- a/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java
+++ b/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java
@@ -380,6 +380,9 @@ public class GT_UITextures {
public static final UITexture OVERLAY_RETRACT_PIPE = UITexture
.fullImage(GregTech.ID, "gui/overlay_button/retract_pipes");
+ public static final UITexture OVERLAY_BUTTON_HOURGLASS = UITexture
+ .fullImage(GregTech.ID, "gui/overlay_button/hourglass");
+
/**
* Can adjust size as needed.
*/
diff --git a/src/main/java/gregtech/api/gui/widgets/GT_CoverTickRateButton.java b/src/main/java/gregtech/api/gui/widgets/GT_CoverTickRateButton.java
new file mode 100644
index 0000000000..883ffb4079
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/widgets/GT_CoverTickRateButton.java
@@ -0,0 +1,82 @@
+package gregtech.api.gui.widgets;
+
+import static gregtech.api.gui.modularui.GT_UITextures.OVERLAY_BUTTON_HOURGLASS;
+import static gregtech.common.covers.CoverInfo.MAX_TICK_RATE_ADDITION;
+
+import java.util.List;
+
+import net.minecraft.util.StatCollector;
+
+import org.jetbrains.annotations.NotNull;
+
+import com.google.common.collect.ImmutableList;
+import com.gtnewhorizons.modularui.api.drawable.UITexture;
+import com.gtnewhorizons.modularui.api.widget.IWidgetBuilder;
+import com.gtnewhorizons.modularui.api.widget.Widget;
+import com.gtnewhorizons.modularui.common.widget.ButtonWidget;
+import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget;
+
+import gregtech.api.gui.modularui.GT_UITextures;
+import gregtech.common.covers.CoverInfo;
+
+public class GT_CoverTickRateButton extends ButtonWidget {
+
+ private static final UITexture BACKGROUND = GT_UITextures.BUTTON_COVER_NORMAL.getSubArea(0, 0, 1, 0.5f);
+
+ private final CoverInfo coverInfo;
+ private int clientTickRate;
+ private int tickRateAddition;
+
+ public GT_CoverTickRateButton(@NotNull CoverInfo coverInfo, @NotNull IWidgetBuilder<?> builder) {
+ this.coverInfo = coverInfo;
+ this.clientTickRate = coverInfo.getTickRate();
+ this.tickRateAddition = coverInfo.getTickRateAddition();
+
+ super.setBackground(BACKGROUND, OVERLAY_BUTTON_HOURGLASS);
+ super.setOnClick(this::onClick);
+ super.dynamicTooltip(this::dynamicTooltip);
+ super.attachSyncer(
+ new FakeSyncWidget.IntegerSyncer(this.coverInfo::getTickRate, integer -> clientTickRate = integer),
+ builder,
+ (widget, aInt) -> notifyTooltipChange())
+ .attachSyncer(
+ new FakeSyncWidget.IntegerSyncer(
+ this.coverInfo::getTickRateAddition,
+ integer -> tickRateAddition = integer),
+ builder);
+
+ }
+
+ private void onClick(@NotNull ClickData clickData, @NotNull Widget widget) {
+ final int iterations = clickData.ctrl ? 5 : 1;
+ final boolean isDecreasing = clickData.mouseButton == 1;
+
+ // Do five operations at once if Ctrl is held down. Since the actual increase granted by each invocation can be
+ // different on each call, just call the method several times rather than trying to do a bunch of weird math.
+ for (int i = 0; i < iterations; i++) {
+ coverInfo.adjustTickRateMultiplier(isDecreasing);
+ }
+ }
+
+ private List<String> dynamicTooltip() {
+ final String boundsNotification;
+
+ if (tickRateAddition == 0) {
+ boundsNotification = StatCollector.translateToLocal("gt.cover.info.button.bounds_notification.minimum");
+ } else if (tickRateAddition >= MAX_TICK_RATE_ADDITION - 1) {
+ // Clamping can make tickRateAddition approach but never actually equal MAX_ADDITION, so we need this
+ // adjustment.
+ boundsNotification = StatCollector.translateToLocal("gt.cover.info.button.bounds_notification.maximum");
+ } else {
+ boundsNotification = "";
+ }
+
+ return ImmutableList.of(
+ StatCollector.translateToLocalFormatted(
+ "gt.cover.info.button.tick_rate.1",
+ new CoverInfo.ClientTickRateFormatter(clientTickRate),
+ boundsNotification),
+ StatCollector.translateToLocal("gt.cover.info.button.tick_rate.2"),
+ StatCollector.translateToLocal("gt.cover.info.button.tick_rate.3"));
+ }
+}
diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
index 57a55fc17e..a7236e164d 100644
--- a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
@@ -27,6 +27,7 @@ import net.minecraft.server.MinecraftServer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.StatCollector;
import net.minecraft.world.EnumSkyBlock;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
@@ -1696,6 +1697,31 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
dropCover(coverSide, side, false);
}
return true;
+ } else if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sJackhammerList)) {
+ // Configuration of delicate electronics calls for a tool with precision and subtlety.
+ if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) {
+ final CoverInfo info = getCoverInfoAtSide(coverSide);
+ if (info != CoverInfo.EMPTY_INFO) {
+ final GT_CoverBehaviorBase<?> behavior = info.getCoverBehavior();
+ if (behavior.allowsTickRateAddition()) {
+ info.onCoverJackhammer(aPlayer);
+ GT_Utility.sendSoundToPlayers(
+ worldObj,
+ SoundResource.IC2_TOOLS_DRILL_DRILL_SOFT,
+ 1.0F,
+ 1,
+ xCoord,
+ yCoord,
+ zCoord);
+
+ } else {
+ GT_Utility.sendChatToPlayer(
+ aPlayer,
+ StatCollector.translateToLocal("gt.cover.info.chat.tick_rate_not_allowed"));
+ }
+ return true;
+ }
+ }
}
}
// End item != null
diff --git a/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java b/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java
index 3300ab43d6..97f02821c1 100644
--- a/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java
+++ b/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java
@@ -31,10 +31,12 @@ import gregtech.api.enums.GT_Values;
import gregtech.api.gui.GT_GUIColorOverride;
import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
import gregtech.api.gui.modularui.GT_UIInfos;
+import gregtech.api.gui.widgets.GT_CoverTickRateButton;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.net.GT_Packet_TileEntityCoverGUI;
import gregtech.api.objects.GT_ItemStack;
+import gregtech.common.covers.CoverInfo;
/**
* For Covers with a special behavior.
@@ -447,6 +449,15 @@ public abstract class GT_CoverBehaviorBase<T extends ISerializableObject> {
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();
}
@@ -837,6 +848,10 @@ public abstract class GT_CoverBehaviorBase<T extends ISerializableObject> {
return true;
}
+ public boolean allowsTickRateAddition() {
+ return true;
+ }
+
@NotNull
public final List<String> getAdditionalTooltip(ISerializableObject coverData) {
return getAdditionalTooltipImpl(forceCast(coverData));
diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Machines.java b/src/main/java/gregtech/common/blocks/GT_Block_Machines.java
index ceb0ed67c8..16fe7c49ff 100644
--- a/src/main/java/gregtech/common/blocks/GT_Block_Machines.java
+++ b/src/main/java/gregtech/common/blocks/GT_Block_Machines.java
@@ -352,7 +352,8 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo
if (tCurrentItem != null && !GT_Utility.isStackInList(tCurrentItem, GregTech_API.sScrewdriverList)
&& !GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWrenchList)
&& !GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWireCutterList)
- && !GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSolderingToolList)) return false;
+ && !GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSolderingToolList)
+ && !GT_Utility.isStackInList(tCurrentItem, GregTech_API.sJackhammerList)) return false;
}
if (tTileEntity instanceof IGregTechTileEntity gtTE) {
if (gtTE.getTimer() < 50L) {
diff --git a/src/main/java/gregtech/common/covers/CoverInfo.java b/src/main/java/gregtech/common/covers/CoverInfo.java
index 0fac00218c..7f45085ead 100644
--- a/src/main/java/gregtech/common/covers/CoverInfo.java
+++ b/src/main/java/gregtech/common/covers/CoverInfo.java
@@ -7,6 +7,7 @@ import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.StatCollector;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
@@ -19,11 +20,15 @@ import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.util.GT_CoverBehaviorBase;
+import gregtech.api.util.GT_Utility;
import gregtech.api.util.ISerializableObject;
public final class CoverInfo {
- private static final String NBT_SIDE = "s", NBT_ID = "id", NBT_DATA = "d";
+ private static final String NBT_SIDE = "s", NBT_ID = "id", NBT_DATA = "d", NBT_TICK_RATE_ADDITION = "tra";
+
+ // One minute
+ public static final int MAX_TICK_RATE_ADDITION = 1200;
public static final CoverInfo EMPTY_INFO = new CoverInfo(ForgeDirection.UNKNOWN, null);
private final ForgeDirection coverSide;
@@ -33,6 +38,8 @@ public final class CoverInfo {
private final WeakReference<ICoverable> coveredTile;
private boolean needsUpdate = false;
+ private int tickRateAddition = 0;
+
public CoverInfo(ForgeDirection side, ICoverable aTile) {
coverSide = side;
coveredTile = new WeakReference<>(aTile);
@@ -53,6 +60,7 @@ public final class CoverInfo {
coverData = aNBT.hasKey(NBT_DATA) ? coverBehavior.createDataObject(aNBT.getTag(NBT_DATA))
: coverBehavior.createDataObject();
coveredTile = new WeakReference<>(aTile);
+ tickRateAddition = aNBT.hasKey(NBT_TICK_RATE_ADDITION) ? aNBT.getInteger(NBT_TICK_RATE_ADDITION) : 0;
}
public boolean isValid() {
@@ -62,6 +70,7 @@ public final class CoverInfo {
public NBTTagCompound writeToNBT(NBTTagCompound aNBT) {
aNBT.setByte(NBT_SIDE, (byte) coverSide.ordinal());
aNBT.setInteger(NBT_ID, coverID);
+ aNBT.setInteger(NBT_TICK_RATE_ADDITION, tickRateAddition);
if (coverData != null) aNBT.setTag(NBT_DATA, coverData.saveDataToNBT());
return aNBT;
@@ -122,7 +131,7 @@ public final class CoverInfo {
}
public int getTickRate() {
- return getCoverBehavior().getTickRate(coverSide, coverID, coverData, coveredTile.get());
+ return getMinimumTickRate() + tickRateAddition;
}
public ForgeDirection getSide() {
@@ -234,6 +243,49 @@ public final class CoverInfo {
.onCoverScrewdriverClick(coverSide, coverID, coverData, coveredTile.get(), aPlayer, aX, aY, aZ);
}
+ public void onCoverJackhammer(EntityPlayer aPlayer) {
+ adjustTickRateMultiplier(aPlayer.isSneaking());
+
+ GT_Utility.sendChatToPlayer(
+ aPlayer,
+ StatCollector.translateToLocalFormatted("gt.cover.info.chat.tick_rate", getCurrentTickRateFormatted()));
+ }
+
+ /**
+ * Adjusts the tick rate by one step.
+ *
+ * @param isDecreasing If true, lower one step.
+ */
+ public void adjustTickRateMultiplier(final boolean isDecreasing) {
+ final int currentTickRate = getTickRate();
+ final int stepAmount = currentTickRate == 20 ? (isDecreasing ? 5 : 20) : (currentTickRate < 20 ? 5 : 20);
+
+ tickRateAddition = clamp(tickRateAddition + (isDecreasing ? -1 : 1) * stepAmount);
+ tickRateAddition = clamp(tickRateAddition - (getTickRate() % stepAmount));
+ }
+
+ /**
+ * Returns information about the cover's tick rate.
+ *
+ * @return An instance of tick rate components
+ */
+ @NotNull
+ public CoverInfo.ClientTickRateFormatter getCurrentTickRateFormatted() {
+ return new ClientTickRateFormatter(getTickRate());
+ }
+
+ public int getMinimumTickRate() {
+ return getCoverBehavior().getTickRate(coverSide, coverID, coverData, coveredTile.get());
+ }
+
+ public int getTickRateAddition() {
+ return tickRateAddition;
+ }
+
+ public void setTickRateAddition(final int tickRateAddition) {
+ this.tickRateAddition = clamp(tickRateAddition);
+ }
+
public Block getFacadeBlock() {
return getCoverBehavior().getFacadeBlock(coverSide, coverID, coverData, coveredTile.get());
}
@@ -246,4 +298,38 @@ public final class CoverInfo {
public List<String> getAdditionalTooltip(ISerializableObject data) {
return getCoverBehavior().getAdditionalTooltip(data);
}
+
+ private static int clamp(int input) {
+ return Math.min(MAX_TICK_RATE_ADDITION, Math.max(0, input));
+ }
+
+ public static final class ClientTickRateFormatter {
+
+ /** A translation key for the type of time units being used (e.g.: "tick", "seconds".) */
+ private final String unitI18NKey;
+ /** A number representing a quantity of time. */
+ private final int tickRate;
+
+ /**
+ * Converts a given tick rate into a human-friendly format.
+ *
+ * @param tickRate The rate at which something ticks, in ticks per operation.
+ */
+ public ClientTickRateFormatter(final int tickRate) {
+ if (tickRate < 20) {
+ this.unitI18NKey = tickRate == 1 ? "gt.time.tick.singular" : "gt.time.tick.plural";
+ this.tickRate = tickRate;
+ } else {
+ this.unitI18NKey = tickRate == 20 ? "gt.time.second.singular" : "gt.time.second.plural";
+ this.tickRate = tickRate / 20;
+ }
+ }
+
+ public String toString() {
+ return StatCollector.translateToLocalFormatted(
+ "gt.cover.info.format.tick_rate",
+ tickRate,
+ StatCollector.translateToLocal(unitI18NKey));
+ }
+ }
}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java b/src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java
index 9afb2cf765..1910d27b39 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java
@@ -406,6 +406,11 @@ public class GT_Cover_FluidRegulator extends GT_CoverBehaviorBase<GT_Cover_Fluid
}
}
+ @Override
+ public boolean allowsTickRateAddition() {
+ return false;
+ }
+
public enum Conditional {
Always(false) {
diff --git a/src/main/java/gregtech/common/items/GT_MetaGenerated_Tool_01.java b/src/main/java/gregtech/common/items/GT_MetaGenerated_Tool_01.java
index f7d9bbb236..14af94d70e 100644
--- a/src/main/java/gregtech/common/items/GT_MetaGenerated_Tool_01.java
+++ b/src/main/java/gregtech/common/items/GT_MetaGenerated_Tool_01.java
@@ -443,15 +443,17 @@ public class GT_MetaGenerated_Tool_01 extends GT_MetaGenerated_Tool {
new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L),
new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L)),
GregTech_API.sWrenchList);
- addTool(
- JACKHAMMER,
- "JackHammer (HV)",
- "Breaks Rocks into pieces",
- new GT_Tool_JackHammer(),
- ToolDictNames.craftingToolJackHammer,
- new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L),
- new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 2L),
- new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 2L));
+ GregTech_API.registerTool(
+ addTool(
+ JACKHAMMER,
+ "JackHammer (HV)",
+ "Breaks Rocks into pieces",
+ new GT_Tool_JackHammer(),
+ ToolDictNames.craftingToolJackHammer,
+ new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 2L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 2L)),
+ GregTech_API.sJackhammerList);
addTool(
BUZZSAW_LV,
"Buzzsaw (LV)",
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Cover_Tool.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Cover_Tool.java
index 5688872796..4241e07e4b 100644
--- a/src/main/java/gregtech/common/items/behaviors/Behaviour_Cover_Tool.java
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_Cover_Tool.java
@@ -31,6 +31,7 @@ public class Behaviour_Cover_Tool extends Behaviour_None {
private ISerializableObject mStoredData = GregTech_API.sNoBehavior.createDataObject();
private int mCoverType;
+ private int mTickRateAddition = 0;
@Override
public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX,
@@ -65,6 +66,7 @@ public class Behaviour_Cover_Tool extends Behaviour_None {
NBTBase tData = aNBT.getTag("mCoverData");
if (tData != null) mStoredData = tBehavior.createDataObject(tData);
else mStoredData = GregTech_API.sNoBehavior.createDataObject();
+ mTickRateAddition = aNBT.hasKey("mTickRateAddition") ? aNBT.getInteger("mTickRateAddition") : 0;
}
}
@@ -72,6 +74,7 @@ public class Behaviour_Cover_Tool extends Behaviour_None {
aNBT.setInteger("mCoverType", mCoverType);
if (mStoredData == null) mStoredData = GregTech_API.sNoBehavior.createDataObject();
aNBT.setTag("mCoverData", mStoredData.saveDataToNBT());
+ aNBT.setInteger("mTickRateAddition", mTickRateAddition);
}
@SuppressWarnings("rawtypes")
@@ -116,6 +119,8 @@ public class Behaviour_Cover_Tool extends Behaviour_None {
.allowsCopyPasteTool()) {
mStoredData = tCoverable.getComplexCoverDataAtSide(tSide);
mCoverType = tCoverable.getCoverIDAtSide(tSide);
+ mTickRateAddition = tCoverable.getCoverInfoAtSide(tSide)
+ .getTickRateAddition();
aList.add("Block Side: " + EnumChatFormatting.AQUA + tSide.name() + EnumChatFormatting.RESET);
aList.add(
@@ -126,16 +131,19 @@ public class Behaviour_Cover_Tool extends Behaviour_None {
} else {
mStoredData = GregTech_API.sNoBehavior.createDataObject();
mCoverType = 0;
+ mTickRateAddition = 0;
aList.add("Copy unavailable for this cover type");
}
} else {
mStoredData = GregTech_API.sNoBehavior.createDataObject();
mCoverType = 0;
+ mTickRateAddition = 0;
aList.add("No Cover Found");
}
} else {
mStoredData = GregTech_API.sNoBehavior.createDataObject();
mCoverType = 0;
+ mTickRateAddition = 0;
aList.add("No Cover Found");
}
}
@@ -155,6 +163,8 @@ public class Behaviour_Cover_Tool extends Behaviour_None {
int tCoverID = tCoverable.getCoverIDAtSide(tSide);
if (tCoverID == mCoverType) {
tCoverable.setCoverDataAtSide(tSide, mStoredData);
+ tCoverable.getCoverInfoAtSide(tSide)
+ .setTickRateAddition(mTickRateAddition);
GT_Utility.sendChatToPlayer(aPlayer, "Cover Data Pasted.");
} else {
GT_Utility.sendChatToPlayer(aPlayer, "Not Matched Cover.");
diff --git a/src/main/resources/assets/gregtech/lang/en_US.lang b/src/main/resources/assets/gregtech/lang/en_US.lang
index 03afafc0ee..b9000ea98a 100644
--- a/src/main/resources/assets/gregtech/lang/en_US.lang
+++ b/src/main/resources/assets/gregtech/lang/en_US.lang
@@ -1377,3 +1377,16 @@ gt.item.adv_sensor_card.tooltip.frequency=Frequency: §b%s
gt.item.adv_sensor_card.error.deconstructed.1=-ERROR- Machine Deconstructed
gt.item.adv_sensor_card.error.deconstructed.2=Place machine again to re-enable
gt.item.adv_sensor_card.error.no_data=No data found
+
+gt.cover.info.format.tick_rate=§b%s§r %s
+gt.cover.info.chat.tick_rate=Cover tick rate set to %s
+gt.cover.info.chat.tick_rate_not_allowed=Cannot adjust tick rate of this cover type with a jackhammer
+gt.cover.info.button.tick_rate.1=Current tick rate: Every %s%s
+gt.cover.info.button.tick_rate.2=Left click to increase, right click to decrease
+gt.cover.info.button.tick_rate.3=Hold Ctrl to adjust by more steps per click
+gt.cover.info.button.bounds_notification.minimum=§7 (minimum)§r
+gt.cover.info.button.bounds_notification.maximum=§7 (maximum)§r
+gt.time.tick.singular=tick
+gt.time.tick.plural=ticks
+gt.time.second.singular=second
+gt.time.second.plural=seconds
diff --git a/src/main/resources/assets/gregtech/textures/gui/overlay_button/hourglass.png b/src/main/resources/assets/gregtech/textures/gui/overlay_button/hourglass.png
new file mode 100644
index 0000000000..ed9b8de56e
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/gui/overlay_button/hourglass.png
Binary files differ