diff options
Diffstat (limited to 'src/main/java/com/anthonyhilyard/iceberg/events')
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; + } + } +} |