diff --git a/build.gradle b/build.gradle index 4c60ae5e..121bc9f3 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ apply plugin: 'net.minecraftforge.gradle.forge' apply plugin: 'org.spongepowered.mixin' //Only edit below this line, the above code adds and enables the necessary things for Forge to be setup. -version = "3.0.5" +version = "3.0.6" group = "zone.rong.loliasm" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "loliasm" diff --git a/src/main/java/zone/rong/loliasm/bakedquad/BakedQuadFactory.java b/src/main/java/zone/rong/loliasm/bakedquad/BakedQuadFactory.java index b6dcb42f..6dcab4de 100644 --- a/src/main/java/zone/rong/loliasm/bakedquad/BakedQuadFactory.java +++ b/src/main/java/zone/rong/loliasm/bakedquad/BakedQuadFactory.java @@ -1,7 +1,5 @@ package zone.rong.loliasm.bakedquad; -import it.unimi.dsi.fastutil.ints.IntArrays; -import it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet; import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.vertex.VertexFormat; diff --git a/src/main/java/zone/rong/loliasm/common/forgefixes/mixins/ForgeEventFactoryMixin.java b/src/main/java/zone/rong/loliasm/common/forgefixes/mixins/ForgeEventFactoryMixin.java new file mode 100644 index 00000000..3c92d259 --- /dev/null +++ b/src/main/java/zone/rong/loliasm/common/forgefixes/mixins/ForgeEventFactoryMixin.java @@ -0,0 +1,22 @@ +package zone.rong.loliasm.common.forgefixes.mixins; + +import net.minecraftforge.event.ForgeEventFactory; +import net.minecraftforge.event.entity.player.FillBucketEvent; +import net.minecraftforge.fml.common.eventhandler.Event; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(value = ForgeEventFactory.class, remap = false) +public class ForgeEventFactoryMixin { + + @SuppressWarnings("ConstantConditions") + @Redirect(method = "onBucketUse", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/event/entity/player/FillBucketEvent;getResult()Lnet/minecraftforge/fml/common/eventhandler/Event$Result;")) + private static Event.Result checkContract(FillBucketEvent event) { + if (event.getResult() == Event.Result.ALLOW && event.getFilledBucket() == null) { + return Event.Result.DEFAULT; + } + return event.getResult(); + } + +} diff --git a/src/main/java/zone/rong/loliasm/config/LoliConfig.java b/src/main/java/zone/rong/loliasm/config/LoliConfig.java index 805c3aa5..eb5d551d 100644 --- a/src/main/java/zone/rong/loliasm/config/LoliConfig.java +++ b/src/main/java/zone/rong/loliasm/config/LoliConfig.java @@ -69,6 +69,7 @@ public boolean shouldSkipClass(Class clazz) { public boolean quickerEnableUniversalBucketCheck, stripInstancedRandomFromSoundEventAccessor; public boolean fixBlockIEBaseArrayIndexOutOfBoundsException, cleanupChickenASMClassHierarchyManager, optimizeAmuletRelatedFunctions, labelCanonicalization, skipCraftTweakerRecalculatingSearchTrees, bwmBlastingOilOptimization; public boolean fixAmuletHolderCapability; + public boolean fixFillBucketEventNullPointerException; private void initialize() { configuration = new Configuration(new File(Launch.minecraftHome, "config" + File.separator + "loliasm.cfg")); @@ -126,6 +127,8 @@ public void load() { fixAmuletHolderCapability = getBoolean("fixAmuletHolderCapability", "capability", "Fixes Astral Sorcery applying AmuletHolderCapability to large amount of ItemStacks when it isn't needed. This option will be ignored when Astral Sorcery isn't installed", true); + fixFillBucketEventNullPointerException = getBoolean("fixFillBucketEventNullPointerException", "forgefixes", "Fixes Forge's mistake of annotating FillBucketEvent#getFilledBucket as @Nonnull when the contract isn't fulfilled nor checked. First discovered here: https://github.com/Divine-Journey-2/main/issues/295", true); + configuration.save(); } diff --git a/src/main/java/zone/rong/loliasm/core/LoliLoadingPlugin.java b/src/main/java/zone/rong/loliasm/core/LoliLoadingPlugin.java index 1295b2df..0fdaa54f 100644 --- a/src/main/java/zone/rong/loliasm/core/LoliLoadingPlugin.java +++ b/src/main/java/zone/rong/loliasm/core/LoliLoadingPlugin.java @@ -19,7 +19,7 @@ @IFMLLoadingPlugin.MCVersion(ForgeVersion.mcVersion) public class LoliLoadingPlugin implements IFMLLoadingPlugin { - public static final String VERSION = "3.0.5"; + public static final String VERSION = "3.0.6"; public static final boolean isDeobf = FMLLaunchHandler.isDeobfuscatedEnvironment(); public static final boolean isOptifineInstalled = LoliReflector.doesClassExist("optifine.OptiFineForgeTweaker"); @@ -63,6 +63,9 @@ public LoliLoadingPlugin() { if (LoliConfig.instance.quickerEnableUniversalBucketCheck) { Mixins.addConfiguration("mixins.misc_fluidregistry.json"); } + if (LoliConfig.instance.fixFillBucketEventNullPointerException) { + Mixins.addConfiguration("mixins.forgefixes.json"); + } if (isClient) { if (LoliConfig.instance.reuseBucketQuads) { Mixins.addConfiguration("mixins.bucket.json"); diff --git a/src/main/resources/mixins.forgefixes.json b/src/main/resources/mixins.forgefixes.json new file mode 100644 index 00000000..62037b4c --- /dev/null +++ b/src/main/resources/mixins.forgefixes.json @@ -0,0 +1,10 @@ +{ + "package": "zone.rong.loliasm.common.forgefixes.mixins", + "refmap": "mixins.loliasm.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.8", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "ForgeEventFactoryMixin" + ] +} \ No newline at end of file