aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/anthonyhilyard/iceberg/events
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/anthonyhilyard/iceberg/events')
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/events/CriterionCallback.java4
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/events/EntityFluidEvents.java44
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/events/ToggleableEvent.java69
3 files changed, 70 insertions, 47 deletions
diff --git a/src/main/java/com/anthonyhilyard/iceberg/events/CriterionCallback.java b/src/main/java/com/anthonyhilyard/iceberg/events/CriterionCallback.java
index f46f082..0486304 100644
--- a/src/main/java/com/anthonyhilyard/iceberg/events/CriterionCallback.java
+++ b/src/main/java/com/anthonyhilyard/iceberg/events/CriterionCallback.java
@@ -1,7 +1,5 @@
package com.anthonyhilyard.iceberg.events;
-import net.fabricmc.fabric.api.event.Event;
-import net.fabricmc.fabric.api.event.EventFactory;
import net.minecraft.advancements.Advancement;
import net.minecraft.world.entity.player.Player;
@@ -10,7 +8,7 @@ import net.minecraft.world.entity.player.Player;
*/
public interface CriterionCallback
{
- Event<CriterionCallback> EVENT = EventFactory.createArrayBacked(CriterionCallback.class,
+ ToggleableEvent<CriterionCallback> EVENT = ToggleableEvent.create(CriterionCallback.class,
(listeners) -> (player, advancement, criterionKey) -> {
for (CriterionCallback listener : listeners)
{
diff --git a/src/main/java/com/anthonyhilyard/iceberg/events/EntityFluidEvents.java b/src/main/java/com/anthonyhilyard/iceberg/events/EntityFluidEvents.java
deleted file mode 100644
index 3ffea9a..0000000
--- a/src/main/java/com/anthonyhilyard/iceberg/events/EntityFluidEvents.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.anthonyhilyard.iceberg.events;
-
-import net.fabricmc.fabric.api.event.Event;
-import net.fabricmc.fabric.api.event.EventFactory;
-import net.minecraft.world.entity.Entity;
-import net.minecraft.world.level.material.Fluid;
-
-
-public final class EntityFluidEvents
-{
- public EntityFluidEvents() { }
-
- /**
- * Called when an Entity enters a new fluid.
- */
- public static final Event<EntityFluidEvents.Entered> ENTERED = EventFactory.createArrayBacked(EntityFluidEvents.Entered.class, callbacks -> (entity, fluid) -> {
- for (EntityFluidEvents.Entered callback : callbacks)
- {
- callback.onEntered(entity, fluid);
- }
- });
-
- /**
- * Called when an Entity exits a fluid.
- */
- public static final Event<EntityFluidEvents.Exited> EXITED = EventFactory.createArrayBacked(EntityFluidEvents.Exited.class, callbacks -> (entity, fluid) -> {
- for (EntityFluidEvents.Exited callback : callbacks)
- {
- callback.onExited(entity, fluid);
- }
- });
-
- @FunctionalInterface
- public interface Entered
- {
- void onEntered(Entity entity, Fluid fluid);
- }
-
- @FunctionalInterface
- public interface Exited
- {
- void onExited(Entity entity, Fluid fluid);
- }
-} \ No newline at end of file
diff --git a/src/main/java/com/anthonyhilyard/iceberg/events/ToggleableEvent.java b/src/main/java/com/anthonyhilyard/iceberg/events/ToggleableEvent.java
new file mode 100644
index 0000000..977587a
--- /dev/null
+++ b/src/main/java/com/anthonyhilyard/iceberg/events/ToggleableEvent.java
@@ -0,0 +1,69 @@
+package com.anthonyhilyard.iceberg.events;
+
+import java.lang.reflect.Array;
+import java.util.function.Function;
+
+import net.fabricmc.fabric.api.event.Event;
+import net.fabricmc.fabric.api.event.EventFactory;
+
+public class ToggleableEvent<T>
+{
+ private T dummyInvoker;
+ private boolean disabled = false;
+ private Event<T> event;
+
+ @SuppressWarnings("unchecked")
+ private ToggleableEvent(Class<? super T> type, Function<T[], T> invokerFactory)
+ {
+ event = EventFactory.createArrayBacked(type, invokerFactory);
+ this.dummyInvoker = invokerFactory.apply((T[]) Array.newInstance(type, 0));
+ }
+
+ public static <T> ToggleableEvent<T> create(Class<? super T> type, Function<T[], T> invokerFactory)
+ {
+ return new ToggleableEvent<>(type, invokerFactory);
+ }
+
+ public void register(T listener)
+ {
+ event.register(listener);
+ }
+
+ public T invoker()
+ {
+ if (!disabled)
+ {
+ return event.invoker();
+ }
+ else
+ {
+ return dummyInvoker;
+ }
+ }
+
+ public boolean disable()
+ {
+ if (disabled)
+ {
+ return false;
+ }
+ else
+ {
+ disabled = true;
+ return true;
+ }
+ }
+
+ public boolean enable()
+ {
+ if (!disabled)
+ {
+ return false;
+ }
+ else
+ {
+ disabled = false;
+ return true;
+ }
+ }
+}