From 4cd50ccc662377b27aafc37380a54be6b2659be0 Mon Sep 17 00:00:00 2001 From: Yoghurt4C Date: Sun, 29 Nov 2020 00:08:52 +0300 Subject: [PATCH] diaaaaaazeeeeeeeeeepam --- gradle.properties | 2 +- .../mod/codewarrior/sips/items/SipsItem.java | 1 + .../sips/registry/SippableRegistry.java | 11 ++------- .../codewarrior/sips/registry/SipsEvents.java | 15 ++++++++++++ .../mod/codewarrior/sips/utils/Sippable.java | 24 +++++++++++++++---- .../sips/utils/SippableRegistryCallback.java | 15 ++++++++++++ 6 files changed, 54 insertions(+), 14 deletions(-) create mode 100644 src/main/java/mod/codewarrior/sips/utils/SippableRegistryCallback.java diff --git a/gradle.properties b/gradle.properties index 9efa6f8..15add66 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx1G yarn_mappings=1.16.4+build.6 loader_version=0.10.6+build.214 - mod_version = 0.6.0 + mod_version = 0.6.1 maven_group = mod.codewarrior archives_base_name = sips diff --git a/src/main/java/mod/codewarrior/sips/items/SipsItem.java b/src/main/java/mod/codewarrior/sips/items/SipsItem.java index ae80e6d..3c0b6c2 100644 --- a/src/main/java/mod/codewarrior/sips/items/SipsItem.java +++ b/src/main/java/mod/codewarrior/sips/items/SipsItem.java @@ -162,6 +162,7 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han } private boolean attemptFill(World world, PlayerEntity user, ItemStack stack) { + if (FluidUtil.getAmount(stack) >= maxCapacity) return false; BlockHitResult rtr = raycast(world, user, RaycastContext.FluidHandling.SOURCE_ONLY); if (rtr.getType() == HitResult.Type.BLOCK) { BlockPos blockPos = rtr.getBlockPos(); diff --git a/src/main/java/mod/codewarrior/sips/registry/SippableRegistry.java b/src/main/java/mod/codewarrior/sips/registry/SippableRegistry.java index e6c57cf..fc41f7e 100644 --- a/src/main/java/mod/codewarrior/sips/registry/SippableRegistry.java +++ b/src/main/java/mod/codewarrior/sips/registry/SippableRegistry.java @@ -7,6 +7,7 @@ import mod.codewarrior.sips.SipsMod; import mod.codewarrior.sips.config.SipsConfig; import mod.codewarrior.sips.utils.Sippable; +import mod.codewarrior.sips.utils.SippableRegistryCallback; import net.fabricmc.fabric.api.resource.ResourceManagerHelper; import net.fabricmc.fabric.api.resource.SimpleResourceReloadListener; import net.minecraft.entity.player.PlayerEntity; @@ -84,15 +85,7 @@ public CompletableFuture apply(Collection collection, Resource } }); - //manual - if (SipsConfig.liquidXpHasEffect()) { - Sippable.fromPredicate("liquid_xp", new Sippable() { - @Override - public void onSipped(FluidKey drank, World world, PlayerEntity player) { - player.addExperience(7 + world.random.nextInt(5)); - } - }); - } + SippableRegistryCallback.EVENT.invoker().registerSippable(); }, executor); } } diff --git a/src/main/java/mod/codewarrior/sips/registry/SipsEvents.java b/src/main/java/mod/codewarrior/sips/registry/SipsEvents.java index 2bb3e1b..4b8020d 100644 --- a/src/main/java/mod/codewarrior/sips/registry/SipsEvents.java +++ b/src/main/java/mod/codewarrior/sips/registry/SipsEvents.java @@ -1,5 +1,9 @@ package mod.codewarrior.sips.registry; +import alexiil.mc.lib.attributes.fluid.volume.FluidKey; +import mod.codewarrior.sips.config.SipsConfig; +import mod.codewarrior.sips.utils.Sippable; +import mod.codewarrior.sips.utils.SippableRegistryCallback; import net.fabricmc.fabric.api.event.player.UseBlockCallback; import net.minecraft.block.Block; import net.minecraft.entity.player.PlayerEntity; @@ -13,6 +17,17 @@ public class SipsEvents { public static void init() { + SippableRegistryCallback.EVENT.register(() -> { + if (SipsConfig.liquidXpHasEffect()) { + Sippable.fromPredicate("liquid_xp", new Sippable() { + @Override + public void onSipped(FluidKey drank, World world, PlayerEntity player) { + player.addExperience(7 + world.random.nextInt(5)); + } + }); + } + }); + UseBlockCallback.EVENT.register(((player, world, hand, rtr) -> { ItemStack stack = player.getStackInHand(hand); BlockPos pos = rtr.getBlockPos().offset(rtr.getSide()); diff --git a/src/main/java/mod/codewarrior/sips/utils/Sippable.java b/src/main/java/mod/codewarrior/sips/utils/Sippable.java index 4d09a7d..d6daab3 100644 --- a/src/main/java/mod/codewarrior/sips/utils/Sippable.java +++ b/src/main/java/mod/codewarrior/sips/utils/Sippable.java @@ -32,7 +32,11 @@ public class Sippable { public List effects = new ArrayList<>(); - public Sippable() { /*override onSipped()*/ } + /** + * You can use either of these 3 constructors, depending on which values you want to change; + * The empty one is mainly for overriding {@link Sippable#onSipped(FluidKey, World, PlayerEntity)} + */ + public Sippable() {} public Sippable(int shanks, float saturation, float damage) { this.shanks = shanks; @@ -116,6 +120,11 @@ public static void fromConfig(Map.Entry entry) { } } + /** + * Queries the TagRegistry for a specified tag, then registers the given Sippable for all of its values. + * @param id the target Tag Identifier + * @param sippable Sippable object shared between the Tag's values + */ public static void fromTag(Identifier id, Sippable sippable) { Tag tag = ServerTagManagerHolder.getTagManager().getFluids().getTag(id); if (tag != null && !tag.values().isEmpty()) { @@ -128,6 +137,11 @@ public static void fromTag(Identifier id, Sippable sippable) { } } + /** + * Loops the registry using the given predicate, and registers the given Sippable for any match. + * @param predicate "id" of the target fluid(s) + * @param sippable Sippable object shared between them + */ public static void fromPredicate(String predicate, Sippable sippable) { Registry.FLUID.forEach(fluid -> { if (Registry.FLUID.getId(fluid).getPath().equals(predicate)) { @@ -218,9 +232,11 @@ public static Effect parseEffect(Map.Entry effect) { return new Effect(name, duration, level, showParticles, showIcon); } - public void onSipped(FluidKey drank, World world, PlayerEntity player) { - - } + /** + * Override this method to add custom effects to your Sippable without using StatusEffects + * Keep in mind that, for the time being, this only gets called serverside in SMP. + */ + public void onSipped(FluidKey drank, World world, PlayerEntity player) {} public static class Effect { Identifier name; diff --git a/src/main/java/mod/codewarrior/sips/utils/SippableRegistryCallback.java b/src/main/java/mod/codewarrior/sips/utils/SippableRegistryCallback.java new file mode 100644 index 0000000..051da8b --- /dev/null +++ b/src/main/java/mod/codewarrior/sips/utils/SippableRegistryCallback.java @@ -0,0 +1,15 @@ +package mod.codewarrior.sips.utils; + +import net.fabricmc.fabric.api.event.Event; +import net.fabricmc.fabric.api.event.EventFactory; + +public interface SippableRegistryCallback { + + Event EVENT = EventFactory.createArrayBacked(SippableRegistryCallback.class, (listeners) -> () -> { + for (SippableRegistryCallback listener : listeners) { + listener.registerSippable(); + } + }); + + void registerSippable(); +}