Aqua Infinity and Under-lava Visibility

- Diving helmets now always grant aqua affinity
- Diving helmets can no longer be enchanted with aqua affinity
- Netherite diving helmets now improve under-lava visiblity by 6.25x
This commit is contained in:
PepperCode1 2022-11-04 23:17:42 -07:00
parent 9498dacfc9
commit 8e936a0096
5 changed files with 68 additions and 7 deletions

View file

@ -2,6 +2,8 @@ package com.simibubi.create.content.curiosities.armor;
import java.util.Locale; import java.util.Locale;
import org.jetbrains.annotations.Nullable;
import com.simibubi.create.foundation.advancement.AllAdvancements; import com.simibubi.create.foundation.advancement.AllAdvancements;
import com.simibubi.create.foundation.item.MultiLayeredArmorItem; import com.simibubi.create.foundation.item.MultiLayeredArmorItem;
@ -30,10 +32,19 @@ public class DivingHelmetItem extends BaseArmorItem {
} }
public static boolean isWornBy(Entity entity) { public static boolean isWornBy(Entity entity) {
if (!(entity instanceof LivingEntity livingEntity)) { ItemStack stack = getWornItem(entity);
if (stack == null) {
return false; return false;
} }
return livingEntity.getItemBySlot(SLOT).getItem() instanceof DivingHelmetItem; return stack.getItem() instanceof DivingHelmetItem;
}
@Nullable
public static ItemStack getWornItem(Entity entity) {
if (!(entity instanceof LivingEntity livingEntity)) {
return null;
}
return livingEntity.getItemBySlot(SLOT);
} }
@SubscribeEvent @SubscribeEvent

View file

@ -6,6 +6,7 @@ import java.util.List;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.simibubi.create.AllFluids; import com.simibubi.create.AllFluids;
import com.simibubi.create.AllItems;
import com.simibubi.create.Create; import com.simibubi.create.Create;
import com.simibubi.create.CreateClient; import com.simibubi.create.CreateClient;
import com.simibubi.create.content.contraptions.KineticDebugger; import com.simibubi.create.content.contraptions.KineticDebugger;
@ -334,11 +335,13 @@ public class ClientEvents {
return; return;
} }
if (FluidHelper.isWater(fluid) && DivingHelmetItem ItemStack divingHelmet = DivingHelmetItem.getWornItem(Minecraft.getInstance().cameraEntity);
.isWornBy(Minecraft.getInstance().cameraEntity)) { if (divingHelmet != null) {
event.scaleFarPlaneDistance(6.25f); if (FluidHelper.isWater(fluid) || FluidHelper.isLava(fluid) && AllItems.NETHERITE_DIVING_HELMET.isIn(divingHelmet)) {
event.setCanceled(true); event.scaleFarPlaneDistance(6.25f);
return; event.setCanceled(true);
return;
}
} }
} }

View file

@ -0,0 +1,23 @@
package com.simibubi.create.foundation.mixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import com.simibubi.create.content.curiosities.armor.DivingHelmetItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.enchantment.Enchantment;
import net.minecraft.world.item.enchantment.EnchantmentHelper;
import net.minecraft.world.item.enchantment.Enchantments;
@Mixin(EnchantmentHelper.class)
public class EnchantmentHelperMixin {
@Inject(method = "getItemEnchantmentLevel(Lnet/minecraft/world/item/enchantment/Enchantment;Lnet/minecraft/world/item/ItemStack;)I", at = @At("HEAD"), cancellable = true)
private static void onGetItemEnchantmentLevel(Enchantment enchantment, ItemStack stack, CallbackInfoReturnable<Integer> cir) {
if (enchantment == Enchantments.AQUA_AFFINITY && stack.getItem() instanceof DivingHelmetItem) {
cir.setReturnValue(1);
}
}
}

View file

@ -0,0 +1,22 @@
package com.simibubi.create.foundation.mixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import com.simibubi.create.content.curiosities.armor.DivingHelmetItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.enchantment.Enchantment;
import net.minecraft.world.item.enchantment.Enchantments;
@Mixin(Enchantment.class)
public class EnchantmentMixin {
@Inject(method = "canEnchant(Lnet/minecraft/world/item/ItemStack;)Z", at = @At("HEAD"), cancellable = true)
private void onCanEnchant(ItemStack stack, CallbackInfoReturnable<Boolean> cir) {
if ((Object) this == Enchantments.AQUA_AFFINITY && stack.getItem() instanceof DivingHelmetItem) {
cir.setReturnValue(false);
}
}
}

View file

@ -6,6 +6,8 @@
"refmap": "create.refmap.json", "refmap": "create.refmap.json",
"mixins": [ "mixins": [
"CustomItemUseEffectsMixin", "CustomItemUseEffectsMixin",
"EnchantmentHelperMixin",
"EnchantmentMixin",
"EntityMixin", "EntityMixin",
"HumanoidArmorLayerMixin", "HumanoidArmorLayerMixin",
"MapItemSavedDataMixin", "MapItemSavedDataMixin",