diff --git a/src/main/java/org/violetmoon/zeta/advancement/modifier/WaxModifier.java b/src/main/java/org/violetmoon/zeta/advancement/modifier/WaxModifier.java index c0a3127565..5e332a6419 100644 --- a/src/main/java/org/violetmoon/zeta/advancement/modifier/WaxModifier.java +++ b/src/main/java/org/violetmoon/zeta/advancement/modifier/WaxModifier.java @@ -3,8 +3,13 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import net.minecraft.advancements.Criterion; +import net.minecraft.advancements.critereon.BlockPredicate; +import net.minecraft.advancements.critereon.ItemPredicate; import net.minecraft.advancements.critereon.ItemUsedOnLocationTrigger; +import net.minecraft.advancements.critereon.LocationPredicate; import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.ItemTags; +import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Block; import org.violetmoon.zeta.advancement.AdvancementModifier; import org.violetmoon.zeta.api.IMutableAdvancement; @@ -12,7 +17,7 @@ import java.util.Set; -public class WaxModifier extends AdvancementModifier { +public class WaxModifier extends AdvancementModifier { private static final ResourceLocation TARGET_ON = new ResourceLocation("husbandry/wax_on"); private static final ResourceLocation TARGET_OFF = new ResourceLocation("husbandry/wax_off"); @@ -34,28 +39,31 @@ public WaxModifier(ZetaModule module, Set unwaxed, Set waxed) { public Set getTargets() { return ImmutableSet.of(TARGET_ON, TARGET_OFF); } - +// @Override public boolean apply(ResourceLocation res, IMutableAdvancement adv) { String title = res.getPath().replaceAll(".+/", ""); Criterion criterion = adv.getCriterion(title); if(criterion != null && criterion.getTrigger() instanceof ItemUsedOnLocationTrigger.TriggerInstance iib) { - //fixme Broken - Needs Rewrite - IThundxr -// Set blockSet = iib.location; -// if(blockSet != null) { -// Set ourSet = res.equals(TARGET_ON) ? unwaxed : waxed; -// -// if (!addToBlockSet(blockSet, ourSet)) { -// blockSet = new HashSet<>(blockSet); -// iib.location.block.blocks = blockSet; -// addToBlockSet(blockSet, ourSet); -// } -// } + // Yes I know its wordy, yes I know this is stupid. Please forgive me I couldnt make it better. + iib.location.compositePredicates = (res.equals(TARGET_ON)) ? iib.location.compositePredicates + .or(ItemUsedOnLocationTrigger.TriggerInstance.itemUsedOnBlock( + LocationPredicate.Builder.location().setBlock( + BlockPredicate.Builder.block().of(unwaxed).build()), + ItemPredicate.Builder.item().of(Items.HONEYCOMB)) + .location.compositePredicates + ) : iib.location.compositePredicates + .or(ItemUsedOnLocationTrigger.TriggerInstance.itemUsedOnBlock( + LocationPredicate.Builder.location().setBlock( + BlockPredicate.Builder.block().of(waxed).build()), + ItemPredicate.Builder.item().of(ItemTags.AXES)) + .location.compositePredicates); } return true; } - + + //todo: Im thinking this goes byebye, but we should see if it is somehow still needed. private static boolean addToBlockSet(Set blockSet, Set ourSet) { try { blockSet.addAll(ourSet); diff --git a/src/main/java/org/violetmoon/zetaimplforge/ForgeZeta.java b/src/main/java/org/violetmoon/zetaimplforge/ForgeZeta.java index 6bfd9b6023..14f8a948ce 100644 --- a/src/main/java/org/violetmoon/zetaimplforge/ForgeZeta.java +++ b/src/main/java/org/violetmoon/zetaimplforge/ForgeZeta.java @@ -233,6 +233,7 @@ public void start() { MinecraftForge.EVENT_BUS.addListener(this::block); MinecraftForge.EVENT_BUS.addListener(this::blockBreak); MinecraftForge.EVENT_BUS.addListener(this::blockEntityPlace); + MinecraftForge.EVENT_BUS.addListener(this::blockToolModification); MinecraftForge.EVENT_BUS.addListener(this::animalTame); MinecraftForge.EVENT_BUS.addListener(this::bonemeal); MinecraftForge.EVENT_BUS.addListener(this::entityTeleport); @@ -457,6 +458,10 @@ public void blockEntityPlace(BlockEvent.EntityPlaceEvent e) { playBus.fire(new ForgeZBlock.EntityPlace(e), ZBlock.EntityPlace.class); } + public void blockToolModification(BlockEvent.BlockToolModificationEvent e) { + playBus.fire(new ForgeZBlock.BlockToolModification(e), ZBlock.BlockToolModification.class); + } + public void animalTame(AnimalTameEvent e) { playBus.fire(new ForgeZAnimalTame(e), ZAnimalTame.class); }