aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/task/tasks
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/api/task/tasks')
-rw-r--r--src/main/java/gregtech/api/task/tasks/PollutionTask.java45
-rw-r--r--src/main/java/gregtech/api/task/tasks/PowerOutputTask.java32
-rw-r--r--src/main/java/gregtech/api/task/tasks/ProcessingTask.java51
3 files changed, 128 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/task/tasks/PollutionTask.java b/src/main/java/gregtech/api/task/tasks/PollutionTask.java
new file mode 100644
index 0000000000..060a91acab
--- /dev/null
+++ b/src/main/java/gregtech/api/task/tasks/PollutionTask.java
@@ -0,0 +1,45 @@
+package gregtech.api.task.tasks;
+
+import javax.annotation.Nonnull;
+
+import net.minecraft.tileentity.TileEntity;
+
+import gregtech.api.enums.TickTime;
+import gregtech.api.interfaces.tileentity.IMachineProgress;
+import gregtech.api.task.TaskHost;
+import gregtech.api.task.TickableTask;
+import gregtech.common.GT_Pollution;
+
+public class PollutionTask<T extends TaskHost & IMachineProgress> extends TickableTask<T> {
+
+ private int pollutionPerSecond;
+ private static final int POLLUTION_TICK = TickTime.SECOND;
+
+ public PollutionTask(@Nonnull T taskHost) {
+ super(taskHost);
+ }
+
+ public PollutionTask<T> setPollutionPerSecond(int pollutionPerSecond) {
+ this.pollutionPerSecond = pollutionPerSecond;
+ return this;
+ }
+
+ public int getPollutionPerSecond() {
+ return pollutionPerSecond;
+ }
+
+ @Nonnull
+ @Override
+ public String getName() {
+ return "pollution";
+ }
+
+ @Override
+ public void update(long tick, boolean isServerSide) {
+ if (isServerSide && tick % POLLUTION_TICK == 0 && taskHost.hasThingsToDo()) {
+ if (taskHost instanceof final TileEntity entity) {
+ GT_Pollution.addPollution(entity, getPollutionPerSecond());
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/api/task/tasks/PowerOutputTask.java b/src/main/java/gregtech/api/task/tasks/PowerOutputTask.java
new file mode 100644
index 0000000000..ef800635fb
--- /dev/null
+++ b/src/main/java/gregtech/api/task/tasks/PowerOutputTask.java
@@ -0,0 +1,32 @@
+package gregtech.api.task.tasks;
+
+import javax.annotation.Nonnull;
+
+import gregtech.api.interfaces.tileentity.IMachineProgress;
+import gregtech.api.logic.interfaces.PowerLogicHost;
+import gregtech.api.task.TaskHost;
+import gregtech.api.task.TickableTask;
+
+public class PowerOutputTask<T extends PowerLogicHost & TaskHost & IMachineProgress> extends TickableTask<T> {
+
+ private static final String NAME = "powerOutput";
+
+ public PowerOutputTask(@Nonnull T taskHost) {
+ super(taskHost);
+ }
+
+ @Override
+ @Nonnull
+ public String getName() {
+ return NAME;
+ }
+
+ @Override
+ public void update(long tick, boolean isServerSide) {
+ if (!isServerSide) return;
+ if (!taskHost.isActive()) return;
+ if (!taskHost.isEnergyEmitter()) return;
+ taskHost.emitEnergyFromLogic();
+ }
+
+}
diff --git a/src/main/java/gregtech/api/task/tasks/ProcessingTask.java b/src/main/java/gregtech/api/task/tasks/ProcessingTask.java
new file mode 100644
index 0000000000..410c8d7a6f
--- /dev/null
+++ b/src/main/java/gregtech/api/task/tasks/ProcessingTask.java
@@ -0,0 +1,51 @@
+package gregtech.api.task.tasks;
+
+import javax.annotation.Nonnull;
+
+import gregtech.api.interfaces.tileentity.IMachineProgress;
+import gregtech.api.logic.MuTEProcessingLogic;
+import gregtech.api.logic.interfaces.ProcessingLogicHost;
+import gregtech.api.task.TaskHost;
+import gregtech.api.task.TickableTask;
+
+public class ProcessingTask<T extends TaskHost & ProcessingLogicHost<P> & IMachineProgress, P extends MuTEProcessingLogic<P>>
+ extends TickableTask<T> {
+
+ public ProcessingTask(@Nonnull T taskHost) {
+ super(taskHost);
+ }
+
+ private static final String NAME = "processing";
+
+ @Override
+ @Nonnull
+ public String getName() {
+ return NAME;
+ }
+
+ @Override
+ public void update(long tick, boolean isServerSide) {
+ if (!isServerSide) return;
+ if (!taskHost.isAllowedToWork()) return;
+ final P logic = taskHost.getProcessingLogic();
+ if (taskHost.needsUpdate()) {
+ taskHost.updateProcessingLogic(logic);
+ taskHost.setProcessingUpdate(false);
+ }
+ if (logic.canWork() && tick % 100 == 0) {
+ taskHost.setProcessingLogicPower(logic);
+ logic.startCheck();
+ if (logic.getResult()
+ .wasSuccessful()) {
+ taskHost.setActive(true);
+ }
+ }
+
+ if (taskHost.hasThingsToDo()) {
+ logic.progress();
+ } else {
+ taskHost.setActive(false);
+ }
+ }
+
+}