aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/util/shutdown
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/api/util/shutdown')
-rw-r--r--src/main/java/gregtech/api/util/shutdown/ReasonOutOfFluid.java63
-rw-r--r--src/main/java/gregtech/api/util/shutdown/ReasonOutOfItem.java62
-rw-r--r--src/main/java/gregtech/api/util/shutdown/ReasonOutOfStuff.java61
-rw-r--r--src/main/java/gregtech/api/util/shutdown/ShutDownReason.java41
-rw-r--r--src/main/java/gregtech/api/util/shutdown/ShutDownReasonRegistry.java118
-rw-r--r--src/main/java/gregtech/api/util/shutdown/SimpleShutDownReason.java79
6 files changed, 424 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/util/shutdown/ReasonOutOfFluid.java b/src/main/java/gregtech/api/util/shutdown/ReasonOutOfFluid.java
new file mode 100644
index 0000000000..29b99a644a
--- /dev/null
+++ b/src/main/java/gregtech/api/util/shutdown/ReasonOutOfFluid.java
@@ -0,0 +1,63 @@
+package gregtech.api.util.shutdown;
+
+import static gregtech.api.util.GT_ModHandler.getWater;
+import static gregtech.api.util.GT_Utility.formatNumbers;
+
+import java.util.Objects;
+
+import net.minecraft.network.PacketBuffer;
+import net.minecraft.util.StatCollector;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+
+import org.jetbrains.annotations.NotNull;
+
+public class ReasonOutOfFluid implements ShutDownReason {
+
+ private FluidStack requiredFluid;
+
+ ReasonOutOfFluid(@NotNull FluidStack requiredFluid) {
+ this.requiredFluid = requiredFluid;
+ }
+
+ @NotNull
+ @Override
+ public String getID() {
+ return "out_of_fluid";
+ }
+
+ @NotNull
+ @Override
+ public String getDisplayString() {
+ return Objects.requireNonNull(
+ StatCollector.translateToLocalFormatted(
+ "GT5U.gui.text.out_of_fluid",
+ requiredFluid.getLocalizedName(),
+ formatNumbers(requiredFluid.amount)));
+ }
+
+ @NotNull
+ @Override
+ public ShutDownReason newInstance() {
+ return new ReasonOutOfFluid(getWater(0));
+ }
+
+ @Override
+ public void encode(@NotNull PacketBuffer buffer) {
+ buffer.writeInt(requiredFluid.getFluidID());
+ buffer.writeInt(requiredFluid.amount);
+ }
+
+ @Override
+ public void decode(PacketBuffer buffer) {
+ int fluidID = buffer.readInt();
+ Fluid fluid = FluidRegistry.getFluid(fluidID);
+ requiredFluid = new FluidStack(fluid, buffer.readInt());
+ }
+
+ @Override
+ public boolean wasCritical() {
+ return true;
+ }
+}
diff --git a/src/main/java/gregtech/api/util/shutdown/ReasonOutOfItem.java b/src/main/java/gregtech/api/util/shutdown/ReasonOutOfItem.java
new file mode 100644
index 0000000000..f4a46f2d30
--- /dev/null
+++ b/src/main/java/gregtech/api/util/shutdown/ReasonOutOfItem.java
@@ -0,0 +1,62 @@
+package gregtech.api.util.shutdown;
+
+import static gregtech.api.util.GT_Utility.formatNumbers;
+
+import java.util.Objects;
+
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraft.network.PacketBuffer;
+import net.minecraft.util.StatCollector;
+
+import org.jetbrains.annotations.NotNull;
+
+public class ReasonOutOfItem implements ShutDownReason {
+
+ private ItemStack requiredItem;
+
+ ReasonOutOfItem(@NotNull ItemStack requiredItem) {
+ this.requiredItem = requiredItem;
+ }
+
+ @NotNull
+ @Override
+ public String getID() {
+ return "out_of_item";
+ }
+
+ @NotNull
+ @Override
+ public String getDisplayString() {
+ return Objects.requireNonNull(
+ StatCollector.translateToLocalFormatted(
+ "GT5U.gui.text.out_of_item",
+ requiredItem.getDisplayName(),
+ formatNumbers(requiredItem.stackSize)));
+ }
+
+ @NotNull
+ @Override
+ public ShutDownReason newInstance() {
+ return new ReasonOutOfItem(new ItemStack(Items.feather, 0));
+ }
+
+ @Override
+ public void encode(@NotNull PacketBuffer buffer) {
+ try {
+ buffer.writeItemStackToBuffer(requiredItem);
+ } catch (Exception ignored) {}
+ }
+
+ @Override
+ public void decode(PacketBuffer buffer) {
+ try {
+ requiredItem = buffer.readItemStackFromBuffer();
+ } catch (Exception ignored) {}
+ }
+
+ @Override
+ public boolean wasCritical() {
+ return true;
+ }
+}
diff --git a/src/main/java/gregtech/api/util/shutdown/ReasonOutOfStuff.java b/src/main/java/gregtech/api/util/shutdown/ReasonOutOfStuff.java
new file mode 100644
index 0000000000..0c3f7e0b64
--- /dev/null
+++ b/src/main/java/gregtech/api/util/shutdown/ReasonOutOfStuff.java
@@ -0,0 +1,61 @@
+package gregtech.api.util.shutdown;
+
+import static gregtech.api.util.GT_Utility.formatNumbers;
+
+import java.util.Objects;
+
+import net.minecraft.network.PacketBuffer;
+import net.minecraft.util.StatCollector;
+
+import org.jetbrains.annotations.NotNull;
+
+public class ReasonOutOfStuff implements ShutDownReason {
+
+ private String required;
+ private int amount;
+
+ ReasonOutOfStuff(@NotNull String required, int amount) {
+ this.required = required;
+ this.amount = amount;
+ }
+
+ @NotNull
+ @Override
+ public String getID() {
+ return "out_of_stuff";
+ }
+
+ @NotNull
+ @Override
+ public String getDisplayString() {
+ return Objects.requireNonNull(
+ StatCollector.translateToLocalFormatted("GT5U.gui.text.out_of_stuff", required, formatNumbers(amount)));
+ }
+
+ @NotNull
+ @Override
+ public ShutDownReason newInstance() {
+ return new ReasonOutOfStuff("stuff", 1);
+ }
+
+ @Override
+ public void encode(@NotNull PacketBuffer buffer) {
+ buffer.writeInt(amount);
+ try {
+ buffer.writeStringToBuffer(required);
+ } catch (Exception ignored) {}
+ }
+
+ @Override
+ public void decode(PacketBuffer buffer) {
+ amount = buffer.readInt();
+ try {
+ required = buffer.readStringFromBuffer(32768);
+ } catch (Exception ignored) {}
+ }
+
+ @Override
+ public boolean wasCritical() {
+ return true;
+ }
+}
diff --git a/src/main/java/gregtech/api/util/shutdown/ShutDownReason.java b/src/main/java/gregtech/api/util/shutdown/ShutDownReason.java
new file mode 100644
index 0000000000..0815936a55
--- /dev/null
+++ b/src/main/java/gregtech/api/util/shutdown/ShutDownReason.java
@@ -0,0 +1,41 @@
+package gregtech.api.util.shutdown;
+
+import javax.annotation.Nonnull;
+
+import net.minecraft.network.PacketBuffer;
+
+public interface ShutDownReason {
+
+ /**
+ * @return Unique registry ID
+ */
+ @Nonnull
+ String getID();
+
+ /**
+ * @return Actual text to show on client GUI
+ */
+ @Nonnull
+ String getDisplayString();
+
+ /**
+ * Create new instance to receive packet.
+ */
+ @Nonnull
+ ShutDownReason newInstance();
+
+ /**
+ * Encode value to sync.
+ */
+ void encode(@Nonnull PacketBuffer buffer);
+
+ /**
+ * Decode synced value.
+ */
+ void decode(PacketBuffer buffer);
+
+ /**
+ * @return Whether the reason is critical.
+ */
+ boolean wasCritical();
+}
diff --git a/src/main/java/gregtech/api/util/shutdown/ShutDownReasonRegistry.java b/src/main/java/gregtech/api/util/shutdown/ShutDownReasonRegistry.java
new file mode 100644
index 0000000000..298c5db237
--- /dev/null
+++ b/src/main/java/gregtech/api/util/shutdown/ShutDownReasonRegistry.java
@@ -0,0 +1,118 @@
+package gregtech.api.util.shutdown;
+
+import static gregtech.api.util.GT_ModHandler.getWater;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.annotation.Nonnull;
+
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidStack;
+
+public class ShutDownReasonRegistry {
+
+ private static final Map<String, ShutDownReason> registry = new HashMap<>();
+
+ /**
+ * Registers ShutDownReason. No duplicated IDs are allowed.
+ *
+ * @param sample Sample object to register
+ */
+ public static void register(ShutDownReason sample) {
+ if (isRegistered(sample.getID())) {
+ throw new IllegalStateException(
+ String.format(
+ "ID %s is already registered for %s",
+ sample.getID(),
+ registry.get(sample.getID())
+ .getClass()
+ .getCanonicalName()));
+ }
+ registry.put(sample.getID(), sample);
+ }
+
+ public static ShutDownReason getSampleFromRegistry(String id) {
+ if (!isRegistered(id)) {
+ throw new RuntimeException("Unknown id: " + id);
+ }
+ return registry.get(id);
+ }
+
+ public static boolean isRegistered(String id) {
+ return registry.containsKey(id);
+ }
+
+ /**
+ * Shut down due to power loss.
+ */
+ @Nonnull
+ public static final ShutDownReason POWER_LOSS = SimpleShutDownReason.ofCritical("power_loss");
+ /**
+ * Failed to output the pollution.
+ */
+ @Nonnull
+ public static final ShutDownReason POLLUTION_FAIL = SimpleShutDownReason.ofCritical("pollution_fail");
+ /**
+ * Shut down due to incomplete structure.
+ */
+ @Nonnull
+ public static final ShutDownReason STRUCTURE_INCOMPLETE = SimpleShutDownReason.ofNormal("structure_incomplete");
+ /**
+ * Shut down due to machine damage.
+ */
+ @Nonnull
+ public static final ShutDownReason NO_REPAIR = SimpleShutDownReason.ofNormal("no_repair");
+ /**
+ * No valid turbine found.
+ */
+ @Nonnull
+ public static final ShutDownReason NO_TURBINE = SimpleShutDownReason.ofNormal("no_turbine");
+ /**
+ * No correct machine part in controller slot.
+ */
+ @Nonnull
+ public static final ShutDownReason NO_MACHINE_PART = SimpleShutDownReason.ofNormal("no_machine_part");
+ /**
+ * Default unknown state.
+ */
+ @Nonnull
+ public static final ShutDownReason NONE = SimpleShutDownReason.ofNormal("none");
+ /**
+ * Critical unknown state.
+ */
+ @Nonnull
+ public static final ShutDownReason CRITICAL_NONE = SimpleShutDownReason.ofCritical("none");
+
+ /**
+ * Fluid that needs to be constantly supplied are out. E.g. PCB coolant with cooling upgrades enabled.
+ */
+ @Nonnull
+ public static ShutDownReason outOfFluid(@Nonnull FluidStack required) {
+ return new ReasonOutOfFluid(required);
+ }
+
+ /**
+ * Item that needs to be constantly supplied are out.
+ */
+ @Nonnull
+ public static ShutDownReason outOfItem(@Nonnull ItemStack required) {
+ return new ReasonOutOfItem(required);
+ }
+
+ /**
+ * Stuff that needs to be constantly supplied are out.
+ */
+ @Nonnull
+ public static ShutDownReason outOfStuff(@Nonnull String required, int amount) {
+ return new ReasonOutOfStuff(required, amount);
+ }
+
+ static {
+ register(new SimpleShutDownReason("", false));
+ register(new ReasonOutOfFluid(getWater(0)));
+ register(new ReasonOutOfItem(new ItemStack(Items.feather, 1)));
+ register(new ReasonOutOfStuff("stuff", 1));
+ }
+}
diff --git a/src/main/java/gregtech/api/util/shutdown/SimpleShutDownReason.java b/src/main/java/gregtech/api/util/shutdown/SimpleShutDownReason.java
new file mode 100644
index 0000000000..92763fa431
--- /dev/null
+++ b/src/main/java/gregtech/api/util/shutdown/SimpleShutDownReason.java
@@ -0,0 +1,79 @@
+package gregtech.api.util.shutdown;
+
+import java.util.Objects;
+
+import javax.annotation.Nonnull;
+
+import net.minecraft.network.PacketBuffer;
+import net.minecraft.util.StatCollector;
+
+import org.jetbrains.annotations.NotNull;
+
+import com.gtnewhorizons.modularui.common.internal.network.NetworkUtils;
+
+/**
+ * Simple implementation of {@link ShutDownReason}. You can create new object without registering it.
+ */
+public class SimpleShutDownReason implements ShutDownReason {
+
+ private String key;
+ private boolean wasCritical;
+
+ public SimpleShutDownReason(String key, boolean isCritical) {
+ this.key = key;
+ this.wasCritical = isCritical;
+ }
+
+ @NotNull
+ @Override
+ public String getID() {
+ return "simple_result";
+ }
+
+ @NotNull
+ @Override
+ public String getDisplayString() {
+ return Objects.requireNonNull(StatCollector.translateToLocal("GT5U.gui.text." + key));
+ }
+
+ @NotNull
+ @Override
+ public ShutDownReason newInstance() {
+ return new SimpleShutDownReason("", false);
+ }
+
+ @Override
+ public void encode(@NotNull PacketBuffer buffer) {
+ buffer.writeBoolean(wasCritical);
+ NetworkUtils.writeStringSafe(buffer, key);
+ }
+
+ @Override
+ public void decode(PacketBuffer buffer) {
+ wasCritical = buffer.readBoolean();
+ key = NetworkUtils.readStringSafe(buffer);
+ }
+
+ @Override
+ public boolean wasCritical() {
+ return wasCritical;
+ }
+
+ /**
+ * Creates new reason with critical state. Add your localized description with `GT5U.gui.text.{key}`.
+ * This is already registered to registry.
+ */
+ @Nonnull
+ public static ShutDownReason ofCritical(String key) {
+ return new SimpleShutDownReason(key, true);
+ }
+
+ /**
+ * Creates new reason with normal state. Add your localized description with `GT5U.gui.text.{key}`.
+ * This is already registered to registry.
+ */
+ @Nonnull
+ public static ShutDownReason ofNormal(String key) {
+ return new SimpleShutDownReason(key, false);
+ }
+}