From 85ef34408a3e83f8752db728dcb1392afe17fa78 Mon Sep 17 00:00:00 2001 From: Emanuel Ferraz Date: Tue, 12 Dec 2023 18:55:10 +0000 Subject: [PATCH] [wip] 1.20 port begins --- build.properties | 12 +- gradle/wrapper/gradle-wrapper.properties | 2 +- src/main/java/vazkii/psi/api/PsiAPI.java | 10 +- .../vazkii/psi/api/internal/MathHelper.java | 2 +- .../java/vazkii/psi/api/internal/Vector3.java | 5 +- .../api/material/PsimetalArmorMaterial.java | 10 +- .../api/material/PsimetalToolMaterial.java | 3 +- .../vazkii/psi/api/recipe/ITrickRecipe.java | 7 +- .../java/vazkii/psi/api/spell/SpellPiece.java | 3 +- .../core/handler/ClientTickHandler.java | 2 +- .../psi/client/core/handler/HUDHandler.java | 73 ++++---- .../client/core/handler/ShaderHandler.java | 2 +- .../psi/client/core/helper/TextHelper.java | 101 ----------- .../vazkii/psi/client/fx/ModParticles.java | 4 +- .../psi/client/fx/SparkleParticleType.java | 3 +- .../psi/client/fx/WispParticleType.java | 3 +- .../vazkii/psi/client/gui/GuiProgrammer.java | 89 +++++----- .../client/gui/widget/PiecePanelWidget.java | 62 +++---- .../jei/crafting/DriveDuplicateExtension.java | 5 +- .../psi/client/jei/tricks/DrawablePiece.java | 15 +- .../jei/tricks/TrickCraftingCategory.java | 10 +- .../vazkii/psi/client/model/ArmorModels.java | 2 +- .../patchouli/MultiCraftingProcessor.java | 10 +- .../client/patchouli/SpellGridComponent.java | 25 ++- .../client/patchouli/SpellPieceComponent.java | 11 +- .../render/entity/RenderSpellCircle.java | 12 +- .../render/tile/RenderTileProgrammer.java | 20 ++- .../psi/common/block/base/ModBlocks.java | 32 ++-- .../tile/container/ContainerCADAssembler.java | 4 +- .../core/handler/DamageTypeHandler.java | 47 +++++ .../core/handler/PlayerDataHandler.java | 26 +-- .../common/crafting/ModCraftingRecipes.java | 3 +- .../recipe/AssemblyScavengeRecipe.java | 12 +- .../crafting/recipe/BulletToDriveRecipe.java | 17 +- .../recipe/ColorizerChangeRecipe.java | 12 +- .../crafting/recipe/DriveDuplicateRecipe.java | 12 +- .../crafting/recipe/SensorAttachRecipe.java | 12 +- .../crafting/recipe/SensorRemoveRecipe.java | 12 +- .../psi/common/entity/EntitySpellCircle.java | 5 +- .../psi/common/item/ItemVectorRuler.java | 5 +- .../vazkii/psi/common/item/base/IHUDItem.java | 3 +- .../vazkii/psi/common/lib/LibResources.java | 2 + .../java/vazkii/psi/common/lib/ModTags.java | 14 +- .../common/spell/other/PieceConnector.java | 3 +- .../spell/other/PieceCrossConnector.java | 3 +- .../common/spell/trick/PieceTrickTorrent.java | 8 +- .../java/vazkii/psi/data/DataGenerator.java | 5 +- .../vazkii/psi/data/PsiBlockTagProvider.java | 23 +-- .../psi/data/PsiDamageTypeTagsProvider.java | 34 ++++ .../vazkii/psi/data/PsiRecipeGenerator.java | 168 +++++++++--------- src/main/resources/assets/psi/lang/en_us.json | 3 +- 51 files changed, 502 insertions(+), 466 deletions(-) delete mode 100644 src/main/java/vazkii/psi/client/core/helper/TextHelper.java create mode 100644 src/main/java/vazkii/psi/common/core/handler/DamageTypeHandler.java create mode 100644 src/main/java/vazkii/psi/data/PsiDamageTypeTagsProvider.java diff --git a/build.properties b/build.properties index 325935e9..9451e250 100644 --- a/build.properties +++ b/build.properties @@ -1,12 +1,12 @@ #Sun Apr 09 14:41:44 WEST 2023 mapping_channel=parchment mod_id=psi -forge_version=43.3.0 -jei_version=11.6.0.1013 +forge_version=47.1.3 +jei_version=15.2.0.27 build_number=101 -patchy_version=1.19.2-77 +patchy_version=1.20.1-83-FORGE dir_output=../Build Output/Psi/ -version=1.19 -mapping_version=2022.11.27-1.19.2 +version=1.20 +mapping_version=2023.09.03-1.20.1 mod_name=Psi -mc_version=1.19.2 \ No newline at end of file +mc_version=1.20.1 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 41dfb879..068cdb2d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/vazkii/psi/api/PsiAPI.java b/src/main/java/vazkii/psi/api/PsiAPI.java index 93d58ff8..113e666c 100644 --- a/src/main/java/vazkii/psi/api/PsiAPI.java +++ b/src/main/java/vazkii/psi/api/PsiAPI.java @@ -25,6 +25,7 @@ import net.minecraftforge.common.capabilities.CapabilityManager; import net.minecraftforge.common.capabilities.CapabilityToken; import net.minecraftforge.fml.DistExecutor; +import net.minecraftforge.registries.ForgeRegistries; import org.apache.logging.log4j.LogManager; @@ -72,15 +73,16 @@ public final class PsiAPI { public static final String MOD_ID = "psi"; - public static final ResourceKey>> SPELL_PIECE_REGISTRY_TYPE_KEY = Registry.createRegistryKey("spell_piece_registry_type_key"); + public static final ResourceKey>> SPELL_PIECE_REGISTRY_TYPE_KEY = ResourceKey.createRegistryKey(new ResourceLocation(MOD_ID, "spell_piece_registry_type_key")); + //private static final MappedRegistry> spellPieceRegistry = (MappedRegistry>) Registry.registerSimple(SPELL_PIECE_REGISTRY_TYPE_KEY, Lifecycle.stable(), () -> PieceTrickDebug.class); - private static final MappedRegistry> spellPieceRegistry = new MappedRegistry<>(SPELL_PIECE_REGISTRY_TYPE_KEY, Lifecycle.stable(), null); //TODO (circa 1.18.2): un-duct-tape this + private static final MappedRegistry> spellPieceRegistry = new MappedRegistry<>(SPELL_PIECE_REGISTRY_TYPE_KEY, Lifecycle.stable()); //TODO (circa 1.18.2): un-duct-tape this private static final Multimap> advancementGroups = HashMultimap.create(); private static final Map, ResourceLocation> advancementGroupsInverse = new HashMap<>(); private static final Map> mainPieceForGroup = new HashMap<>(); public static final PsimetalArmorMaterial PSIMETAL_ARMOR_MATERIAL = new PsimetalArmorMaterial("psimetal", 18, new int[] { 2, 5, 6, 2 }, - 12, SoundEvents.ARMOR_EQUIP_IRON, 0F, () -> Ingredient.of(Registry.ITEM.get(new ResourceLocation(MOD_ID, "psimetal"))), 0.0f); + 12, SoundEvents.ARMOR_EQUIP_IRON, 0F, () -> Ingredient.of(ForgeRegistries.ITEMS.getValue(new ResourceLocation(MOD_ID, "psimetal"))), 0.0f); public static final PsimetalToolMaterial PSIMETAL_TOOL_MATERIAL = new PsimetalToolMaterial(); /** @@ -104,7 +106,7 @@ public static void registerSpellPiece(ResourceLocation resourceLocation, Class clazz) { registerSpellPiece(id, clazz); - DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> ClientPsiAPI.registerPieceTexture(id, new ResourceLocation(id.getNamespace(), "spell/" + id.getPath()))); + DistExecutor.safeRunWhenOn(Dist.CLIENT, () -> () -> ClientPsiAPI.registerPieceTexture(id, new ResourceLocation(id.getNamespace(), "spell/" + id.getPath()))); } /** diff --git a/src/main/java/vazkii/psi/api/internal/MathHelper.java b/src/main/java/vazkii/psi/api/internal/MathHelper.java index 0b329d5c..3c1d7fd4 100644 --- a/src/main/java/vazkii/psi/api/internal/MathHelper.java +++ b/src/main/java/vazkii/psi/api/internal/MathHelper.java @@ -37,7 +37,7 @@ public static LinkedHashSet getBlocksAlongRay(Vec3 origin, Vec3 end, i return positions; } if(origin.equals(end)) { - positions.add(new BlockPos(origin.x, origin.y, origin.z)); + positions.add(new BlockPos((int) origin.x, (int) origin.y, (int) origin.z)); } else { double endX = end.x; double endY = end.y; diff --git a/src/main/java/vazkii/psi/api/internal/Vector3.java b/src/main/java/vazkii/psi/api/internal/Vector3.java index 29754bc4..f6e07a80 100644 --- a/src/main/java/vazkii/psi/api/internal/Vector3.java +++ b/src/main/java/vazkii/psi/api/internal/Vector3.java @@ -10,6 +10,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.phys.AABB; @@ -249,8 +250,10 @@ public Vec3 toVec3D() { return new Vec3(x, y, z); } + public Vec3i toVec3i() { return new Vec3i((int) x, (int) y, (int) z); } + public BlockPos toBlockPos() { - return new BlockPos(toVec3D()); + return new BlockPos(toVec3i()); } public double angle(Vector3 vec) { diff --git a/src/main/java/vazkii/psi/api/material/PsimetalArmorMaterial.java b/src/main/java/vazkii/psi/api/material/PsimetalArmorMaterial.java index 0f7c11fa..6a89f271 100644 --- a/src/main/java/vazkii/psi/api/material/PsimetalArmorMaterial.java +++ b/src/main/java/vazkii/psi/api/material/PsimetalArmorMaterial.java @@ -11,6 +11,7 @@ import net.minecraft.sounds.SoundEvent; import net.minecraft.util.LazyLoadedValue; import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterial; import net.minecraft.world.item.crafting.Ingredient; import net.minecraftforge.api.distmarker.Dist; @@ -40,14 +41,15 @@ public PsimetalArmorMaterial(String nameIn, int maxDamageFactorIn, int[] damageR this.knockbackResistance = knockbackResistance; } + @Override - public int getDurabilityForSlot(EquipmentSlot slotIn) { - return MAX_DAMAGE_ARRAY[slotIn.getIndex()] * this.maxDamageFactor; + public int getDurabilityForType(ArmorItem.Type pType) { + return MAX_DAMAGE_ARRAY[pType.ordinal()] * this.maxDamageFactor; } @Override - public int getDefenseForSlot(EquipmentSlot slotIn) { - return this.damageReductionAmountArray[slotIn.getIndex()]; + public int getDefenseForType(ArmorItem.Type pType) { + return this.damageReductionAmountArray[pType.ordinal()]; } @Override diff --git a/src/main/java/vazkii/psi/api/material/PsimetalToolMaterial.java b/src/main/java/vazkii/psi/api/material/PsimetalToolMaterial.java index a7f4cf10..7418284c 100644 --- a/src/main/java/vazkii/psi/api/material/PsimetalToolMaterial.java +++ b/src/main/java/vazkii/psi/api/material/PsimetalToolMaterial.java @@ -13,12 +13,13 @@ import net.minecraft.util.LazyLoadedValue; import net.minecraft.world.item.Tier; import net.minecraft.world.item.crafting.Ingredient; +import net.minecraftforge.registries.ForgeRegistries; import vazkii.psi.api.PsiAPI; public class PsimetalToolMaterial implements Tier { private static final LazyLoadedValue REPAIR_MATERIAL = new LazyLoadedValue<>( - () -> Ingredient.of(Registry.ITEM.get(new ResourceLocation(PsiAPI.MOD_ID, "psimetal")))); + () -> Ingredient.of(ForgeRegistries.ITEMS.getValue(new ResourceLocation(PsiAPI.MOD_ID, "psimetal")))); @Override public int getUses() { diff --git a/src/main/java/vazkii/psi/api/recipe/ITrickRecipe.java b/src/main/java/vazkii/psi/api/recipe/ITrickRecipe.java index 9061990f..851c07ff 100644 --- a/src/main/java/vazkii/psi/api/recipe/ITrickRecipe.java +++ b/src/main/java/vazkii/psi/api/recipe/ITrickRecipe.java @@ -10,12 +10,14 @@ import net.minecraft.core.NonNullList; import net.minecraft.core.Registry; +import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.Recipe; import net.minecraft.world.item.crafting.RecipeType; import net.minecraftforge.items.wrapper.RecipeWrapper; +import net.minecraftforge.registries.ForgeRegistries; import vazkii.psi.api.PsiAPI; import vazkii.psi.api.spell.piece.PieceCraftingTrick; @@ -42,8 +44,7 @@ public interface ITrickRecipe extends Recipe { Ingredient getInput(); @Override - @Nonnull - ItemStack getResultItem(); + ItemStack getResultItem(RegistryAccess pRegistryAccess); /** * @return a recommended minimum CAD assembly that can craft this recipe, for JEI display purposes. @@ -53,7 +54,7 @@ public interface ITrickRecipe extends Recipe { @Nonnull @Override default RecipeType getType() { - return Registry.RECIPE_TYPE.get(TYPE_ID); + return ForgeRegistries.RECIPE_TYPES.getValue(TYPE_ID); } @Nonnull diff --git a/src/main/java/vazkii/psi/api/spell/SpellPiece.java b/src/main/java/vazkii/psi/api/spell/SpellPiece.java index 75a3b0fc..a8bf9cf0 100644 --- a/src/main/java/vazkii/psi/api/spell/SpellPiece.java +++ b/src/main/java/vazkii/psi/api/spell/SpellPiece.java @@ -15,7 +15,6 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexFormat; -import com.mojang.math.Matrix4f; import net.minecraft.ChatFormatting; import net.minecraft.client.gui.screens.Screen; @@ -32,6 +31,8 @@ import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.ModList; +import org.joml.Matrix4f; + import vazkii.psi.api.ClientPsiAPI; import vazkii.psi.api.PsiAPI; import vazkii.psi.api.internal.PsiRenderHelper; diff --git a/src/main/java/vazkii/psi/client/core/handler/ClientTickHandler.java b/src/main/java/vazkii/psi/client/core/handler/ClientTickHandler.java index db76e4e9..20d4dfa3 100644 --- a/src/main/java/vazkii/psi/client/core/handler/ClientTickHandler.java +++ b/src/main/java/vazkii/psi/client/core/handler/ClientTickHandler.java @@ -59,7 +59,7 @@ public static void clientTick(TickEvent.ClientTickEvent event) { if(event.phase == TickEvent.Phase.START) { boolean pressed = mc.options.keyJump.consumeClick(); - if(mc.player != null && pressed && (!lastJumpKeyState && !mc.player.isOnGround())) { + if(mc.player != null && pressed && (!lastJumpKeyState && !mc.player.onGround())) { PsiArmorEvent.post(new PsiArmorEvent(mc.player, PsiArmorEvent.JUMP)); MessageRegister.HANDLER.sendToServer(new MessageTriggerJumpSpell()); } diff --git a/src/main/java/vazkii/psi/client/core/handler/HUDHandler.java b/src/main/java/vazkii/psi/client/core/handler/HUDHandler.java index 9cd3764c..40d79ca2 100644 --- a/src/main/java/vazkii/psi/client/core/handler/HUDHandler.java +++ b/src/main/java/vazkii/psi/client/core/handler/HUDHandler.java @@ -13,7 +13,7 @@ import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.player.Player; @@ -108,7 +108,7 @@ private static boolean showsBar(PlayerData data, ItemStack stack) { } @OnlyIn(Dist.CLIENT) - public static void drawPsiBar(PoseStack poseStack, float partialTick, int screenWidth, int screenHeight) { + public static void drawPsiBar(GuiGraphics graphics, float partialTick, int screenWidth, int screenHeight) { Minecraft mc = Minecraft.getInstance(); ItemStack cadStack = PsiAPI.getPlayerCAD(mc.player); @@ -128,7 +128,7 @@ public static void drawPsiBar(PoseStack poseStack, float partialTick, int screen return; } - poseStack.pushPose(); + graphics.pose().pushPose(); boolean right = ConfigHandler.CLIENT.psiBarOnRight.get(); @@ -149,8 +149,7 @@ public static void drawPsiBar(PoseStack poseStack, float partialTick, int screen } RenderSystem.enableBlend(); - RenderSystem.setShaderTexture(0, psiBar); - GuiComponent.blit(poseStack, x, y, 0, 0, width, height, 64, 256); + graphics.blit(psiBar, x, y, 0, 0, width, height, 64, 256); x += 8; y += 26; @@ -184,7 +183,7 @@ public static void drawPsiBar(PoseStack poseStack, float partialTick, int screen y = origY + v; usePsiBarShader(a, d.shatter, data.overflowed); - GuiComponent.blit(poseStack, x, y, 32, v, width, height, 64, 256); + graphics.blit(psiBar, x, y, 32, v, width, height, 64, 256); } float textY = origY; @@ -206,12 +205,12 @@ public static void drawPsiBar(PoseStack poseStack, float partialTick, int screen RenderSystem.setShaderColor(r, g, b, 1F); usePsiBarShader(1F, false, data.overflowed); - GuiComponent.blit(poseStack, x, y, 32, v, width, height, 64, 256); + graphics.blit(psiBar, x, y, 32, v, width, height, 64, 256); RenderSystem.setShaderColor(1F, 1F, 1F, 1F); - poseStack.pushPose(); - poseStack.translate(0F, textY, 0F); + graphics.pose().pushPose(); + graphics.pose().translate(0F, textY, 0F); width = 44; height = 3; @@ -235,22 +234,22 @@ public static void drawPsiBar(PoseStack poseStack, float partialTick, int screen PsiRenderHelper.g(color) / 255F, PsiRenderHelper.b(color) / 255F, 1F); - GuiComponent.blit(poseStack, x - offBar, -2, 0, 140, width, height, 64, 256); - mc.font.drawShadow(poseStack, s1, x - offStr1, -11, 0xFFFFFF); - poseStack.popPose(); + graphics.blit(psiBar, x - offBar, -2, 0, 140, width, height, 64, 256); + graphics.drawString(mc.font, s1, x - offStr1, -11, 0xFFFFFF, true); + graphics.pose().popPose(); if(storedPsi != -1) { - poseStack.pushPose(); - poseStack.translate(0F, Math.max(textY + 3, origY + 100), 0F); - mc.font.drawShadow(poseStack, s2, x - offStr2, 0, 0xFFFFFF); - poseStack.popPose(); + graphics.pose().pushPose(); + graphics.pose().translate(0F, Math.max(textY + 3, origY + 100), 0F); + graphics.drawString(mc.font, s2, x - offStr2, 0, 0xFFFFFF, true); + graphics.pose().popPose(); } RenderSystem.disableBlend(); - poseStack.popPose(); + graphics.pose().popPose(); } @OnlyIn(Dist.CLIENT) - private static void renderSocketableEquippedName(PoseStack poseStack, float partialTick, int screenWidth, int screenHeight) { + private static void renderSocketableEquippedName(GuiGraphics graphics, float partialTick, int screenWidth, int screenHeight) { Minecraft mc = Minecraft.getInstance(); ItemStack stack = mc.player.getItemInHand(InteractionHand.MAIN_HAND); if(!ISocketable.isSocketable(stack)) { @@ -277,19 +276,19 @@ private static void renderSocketableEquippedName(PoseStack poseStack, float part y += 14; } - mc.font.drawShadow(poseStack, name, x, y, color); + graphics.drawString(mc.font, name, x, y, color, true); int w = mc.font.width(name); - poseStack.pushPose(); - poseStack.translate(x + w, y - 6, 0); - poseStack.scale(alpha / 255F, 1F, 1); - PsiRenderHelper.transferMsToGl(poseStack, () -> mc.getItemRenderer().renderGuiItem(bullet, 0, 0)); - poseStack.popPose(); + graphics.pose().pushPose(); + graphics.pose().translate(x + w, y - 6, 0); + graphics.pose().scale(alpha / 255F, 1F, 1); + graphics.renderFakeItem(bullet, 0, 0); + graphics.pose().popPose(); } } @OnlyIn(Dist.CLIENT) - private static void renderRemainingItems(PoseStack poseStack, float partialTick, int screenWidth, int screenHeight) { + private static void renderRemainingItems(GuiGraphics graphics, float partialTick, int screenWidth, int screenHeight) { if(remainingTime > 0 && !remainingDisplayStack.isEmpty()) { int pos = maxRemainingTicks - remainingTime; Minecraft mc = Minecraft.getInstance(); @@ -302,12 +301,12 @@ private static void renderRemainingItems(PoseStack poseStack, float partialTick, RenderSystem.setShaderColor(1F, 1F, 1F, alpha); int xp = x + (int) (16F * (1F - alpha)); - poseStack.pushPose(); - poseStack.translate(xp, y, 0F); - poseStack.scale(alpha, 1F, 1F); - PsiRenderHelper.transferMsToGl(poseStack, () -> mc.getItemRenderer().renderAndDecorateItem(remainingDisplayStack, 0, 0)); - poseStack.scale(1F / alpha, 1F, 1F); - poseStack.translate(-xp, -y, 0F); + graphics.pose().pushPose(); + graphics.pose().translate(xp, y, 0F); + graphics.pose().scale(alpha, 1F, 1F); + graphics.renderFakeItem(remainingDisplayStack, 0, 0); + graphics.pose().scale(1F / alpha, 1F, 1F); + graphics.pose().translate(-xp, -y, 0F); RenderSystem.setShaderColor(1F, 1F, 1F, 1F); String text = remainingDisplayStack.getHoverName().plainCopy().withStyle(ChatFormatting.GREEN).getString(); @@ -328,23 +327,23 @@ private static void renderRemainingItems(PoseStack poseStack, float partialTick, } int color = 0x00FFFFFF | (int) (alpha * 0xFF) << 24; - mc.font.drawShadow(poseStack, text, x + 20, y + 6, color); + graphics.drawString(mc.font, text, x + 20, y + 6, color, true); - poseStack.popPose(); + graphics.pose().popPose(); } } @OnlyIn(Dist.CLIENT) - private static void renderHUDItem(PoseStack poseStack, float partialTicks, int screenWidth, int screenHeight) { + private static void renderHUDItem(GuiGraphics graphics, float partialTicks, int screenWidth, int screenHeight) { Minecraft mc = Minecraft.getInstance(); ItemStack stack = mc.player.getMainHandItem(); if(!stack.isEmpty() && stack.getItem() instanceof IHUDItem) { - ((IHUDItem) stack.getItem()).drawHUD(poseStack, partialTicks, screenWidth, screenHeight, stack); + ((IHUDItem) stack.getItem()).drawHUD(graphics, partialTicks, screenWidth, screenHeight, stack); } stack = mc.player.getOffhandItem(); if(!stack.isEmpty() && stack.getItem() instanceof IHUDItem) { - ((IHUDItem) stack.getItem()).drawHUD(poseStack, partialTicks, screenWidth, screenHeight, stack); + ((IHUDItem) stack.getItem()).drawHUD(graphics, partialTicks, screenWidth, screenHeight, stack); } } @@ -358,7 +357,7 @@ public static void setRemaining(Player player, ItemStack displayStack, Pattern p int count = 0; for(int i = 0; i < player.getInventory().getContainerSize(); i++) { ItemStack stack = player.getInventory().getItem(i); - if(!stack.isEmpty() && (pattern == null ? ItemStack.isSame(displayStack, stack) : pattern.matcher(stack.getDescriptionId()).find())) { + if(!stack.isEmpty() && (pattern == null ? ItemStack.isSameItem(displayStack, stack) : pattern.matcher(stack.getDescriptionId()).find())) { count += stack.getCount(); } } diff --git a/src/main/java/vazkii/psi/client/core/handler/ShaderHandler.java b/src/main/java/vazkii/psi/client/core/handler/ShaderHandler.java index 35920ff6..19073a7d 100644 --- a/src/main/java/vazkii/psi/client/core/handler/ShaderHandler.java +++ b/src/main/java/vazkii/psi/client/core/handler/ShaderHandler.java @@ -30,7 +30,7 @@ public final class ShaderHandler { @SubscribeEvent static void registerShaders(RegisterShadersEvent event) throws IOException { event.registerShader( - new ShaderInstance(event.getResourceManager(), new ResourceLocation(LibMisc.MOD_ID, LibResources.SHADER_PSI_BAR), DefaultVertexFormat.POSITION_TEX_COLOR), + new ShaderInstance(event.getResourceProvider(), new ResourceLocation(LibMisc.MOD_ID, LibResources.SHADER_PSI_BAR), DefaultVertexFormat.POSITION_TEX_COLOR), shader -> psiBarShader = shader ); } diff --git a/src/main/java/vazkii/psi/client/core/helper/TextHelper.java b/src/main/java/vazkii/psi/client/core/helper/TextHelper.java deleted file mode 100644 index 0affbf89..00000000 --- a/src/main/java/vazkii/psi/client/core/helper/TextHelper.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * This class is distributed as part of the Psi Mod. - * Get the Source Code in github: - * https://github.com/Vazkii/Psi - * - * Psi is Open Source and distributed under the - * Psi License: https://psi.vazkii.net/license.php - */ -package vazkii.psi.client.core.helper; - -import com.mojang.blaze3d.vertex.PoseStack; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Font; -import net.minecraft.client.resources.language.I18n; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -import java.util.ArrayList; -import java.util.List; - -public final class TextHelper { - - @OnlyIn(Dist.CLIENT) - public static List renderText(int x, int y, int width, String unlocalizedText, boolean centered, boolean doit, Object... format) { - PoseStack matrixStack = new PoseStack(); - Font font = Minecraft.getInstance().font; - String text = I18n.get(unlocalizedText, format); - - String[] textEntries = text.split("
"); - List> lines = new ArrayList<>(); - - String controlCodes; - for(String s : textEntries) { - List words = new ArrayList<>(); - String lineStr = ""; - String[] tokens = s.split(" "); - for(String token : tokens) { - String prev = lineStr; - String spaced = token + " "; - lineStr += spaced; - - controlCodes = toControlCodes(getControlCodes(prev)); - if(font.width(lineStr) > width) { - lines.add(words); - lineStr = controlCodes + spaced; - words = new ArrayList<>(); - } - - words.add(controlCodes + token); - } - - if(!lineStr.isEmpty()) { - lines.add(words); - } - lines.add(new ArrayList<>()); - } - - List textLines = new ArrayList<>(); - - String lastLine = ""; - for(List words : lines) { - words.size(); - int xi = x; - int spacing = 4; - - StringBuilder lineStr = new StringBuilder(); - for(String s : words) { - int extra = 0; - - int swidth = font.width(s); - if(doit) { - if(centered) { - font.draw(matrixStack, s, xi + width / 2 - swidth / 2, y, 0xFFFFFF); - } else { - font.draw(matrixStack, s, xi, y, 0xFFFFFF); - } - } - xi += swidth + spacing + extra; - lineStr.append(s).append(" "); - } - - if((lineStr.length() > 0) || lastLine.isEmpty()) { - y += 10; - textLines.add(lineStr.toString()); - } - lastLine = lineStr.toString(); - } - return textLines; - } - - public static String getControlCodes(String s) { - String controls = s.replaceAll("(? { Pair errorPos = ex.location; if(errorPos != null && errorPos.getRight() != -1 && errorPos.getLeft() != -1) { - font.drawShadow(ms, "!!", errorPos.getLeft() * 18 + 12, errorPos.getRight() * 18 + 8, 0xFF0000); + graphics.drawString(getMinecraft().font, "!!", errorPos.getLeft() * 18 + 12, errorPos.getRight() * 18 + 8, 0xFF0000, true); } }); - ms.popPose(); - RenderSystem.setShaderColor(1F, 1F, 1F, 1F);; - ms.translate(0, 0, 1); - RenderSystem.setShaderTexture(0, texture); + graphics.pose().popPose(); + graphics.setColor(1F, 1F, 1F, 1F); + graphics.pose().translate(0, 0, 1); if(selectedX != -1 && selectedY != -1 && !takingScreenshot) { - blit(ms, gridLeft + selectedX * 18, gridTop + selectedY * 18, 32, ySize, 16, 16); + graphics.blit(texture, gridLeft + selectedX * 18, gridTop + selectedY * 18, 32, ySize, 16, 16); } if(hasAltDown()) { @@ -361,20 +359,20 @@ public void render(PoseStack ms, int mouseX, int mouseY, float partialTicks) { if(takingScreenshot) { Set addons = spell.getPieceNamespaces().stream().filter(namespace -> !namespace.equals("psi")).collect(Collectors.toSet()); - if(addons.size() > 0) { + if(!addons.isEmpty()) { String requiredAddons = ChatFormatting.GREEN + "Required Addons:"; - font.drawShadow(ms, requiredAddons, left - font.width(requiredAddons) - 5, top + 40, 0xFFFFFF); + graphics.drawString(getMinecraft().font, requiredAddons, left - font.width(requiredAddons) - 5, top + 40, 0xFFFFFF, true); int i = 1; for(String addon : addons) { if(ModList.get().getModContainerById(addon).isPresent()) { String modName = ModList.get().getModContainerById(addon).get().getModInfo().getDisplayName(); - font.drawShadow(ms, "* " + modName, left - font.width(requiredAddons) - 5, top + 40 + 10 * i, 0xFFFFFF); + graphics.drawString(getMinecraft().font, "* " + modName, left - font.width(requiredAddons) - 5, top + 40 + 10 * i, 0xFFFFFF, true); i++; } } } String version = "Psi " + ModList.get().getModContainerById("psi").get().getModInfo().getVersion().toString(); - font.drawShadow(ms, version, left + xSize / 2f - font.width(version) / 2f, top - 22, 0xFFFFFF); + graphics.drawString(getMinecraft().font, version, left + xSize / 2f - font.width(version) / 2f, (float) top - 22, 0xFFFFFF, true); } SpellPiece pieceAtCursor = null; @@ -387,9 +385,9 @@ public void render(PoseStack ms, int mouseX, int mouseY, float partialTicks) { if(!takingScreenshot) { if(cursorX == selectedX && cursorY == selectedY) { - blit(ms, gridLeft + cursorX * 18, gridTop + cursorY * 18, 16, ySize, 8, 16); + graphics.blit(texture, gridLeft + cursorX * 18, gridTop + cursorY * 18, 16, ySize, 8, 16); } else { - blit(ms, gridLeft + cursorX * 18, gridTop + cursorY * 18, 16, ySize, 16, 16); + graphics.blit(texture, gridLeft + cursorX * 18, gridTop + cursorY * 18, 16, ySize, 16, 16); } } } @@ -400,17 +398,17 @@ public void render(PoseStack ms, int mouseX, int mouseY, float partialTicks) { int topYText = topY; if(spectator) { String spectator = ChatFormatting.RED + I18n.get("psimisc.spectator"); - font.drawShadow(ms, spectator, left + xSize / 2f - font.width(spectator) / 2f, topYText, 0xFFFFFF); + graphics.drawString(getMinecraft().font, spectator, left + xSize / 2f - font.width(spectator) / 2f, topYText, 0xFFFFFF, true); topYText -= 10; } if(piece != null) { String pieceName = I18n.get(piece.getUnlocalizedName()); - font.drawShadow(ms, pieceName, left + xSize / 2f - font.width(pieceName) / 2f, topYText, 0xFFFFFF); + graphics.drawString(getMinecraft().font, pieceName, left + xSize / 2f - font.width(pieceName) / 2f, topYText, 0xFFFFFF, true); topYText -= 10; } if(LibMisc.BETA_TESTING) { String betaTest = ChatFormatting.GOLD + I18n.get("psimisc.wip"); - font.drawShadow(ms, betaTest, left + xSize / 2f - font.width(betaTest) / 2f, topYText, 0xFFFFFF); + graphics.drawString(getMinecraft().font, betaTest, left + xSize / 2f - font.width(betaTest) / 2f, topYText, 0xFFFFFF, true); } @@ -420,24 +418,24 @@ public void render(PoseStack ms, int mouseX, int mouseY, float partialTicks) { } else { coords = I18n.get("psimisc.programmer_coords_no_cursor", convertIntToLetter(selectedX + 1), selectedY + 1); } - font.draw(ms, coords, left + 4, topY + ySize + 24, 0x44FFFFFF); + graphics.drawString(getMinecraft().font, coords, left + 4, topY + ySize + 24, 0x44FFFFFF); String version = "Psi " + ModList.get().getModContainerById("psi").get().getModInfo().getVersion().toString(); - font.drawShadow(ms, version, left + xSize / 2f - font.width(version) / 2f, topY + ySize + 24 + font.wordWrapHeight(coords, font.width(coords)) + 5, 0x44FFFFFF); + graphics.drawString(getMinecraft().font, version, left + xSize / 2f - font.width(version) / 2f, topY + ySize + 24 + font.wordWrapHeight(coords, font.width(coords)) + 5, 0x44FFFFFF, true); } if(Psi.magical) { - font.draw(ms, I18n.get("psimisc.name"), left + padLeft, spellNameField.y + 1, color); + graphics.drawString(getMinecraft().font, I18n.get("psimisc.name"), left + padLeft, spellNameField.getY() + 1, color); } else { - font.drawShadow(ms, I18n.get("psimisc.name"), left + padLeft, spellNameField.y + 1, color); + graphics.drawString(getMinecraft().font, I18n.get("psimisc.name"), left + padLeft, spellNameField.getY() + 1, color, true); } //Add here comment if(commentEnabled) { String enterCommit = I18n.get("psimisc.enter_commit"); - font.drawShadow(ms, enterCommit, left + xSize / 2f - font.width(enterCommit) / 2f, commentField.y + 24, 0xFFFFFF); + graphics.drawString(getMinecraft().font, enterCommit, left + xSize / 2f - font.width(enterCommit) / 2f, commentField.getY() + 24, 0xFFFFFF, true); String semicolonLine = I18n.get("psimisc.semicolon_line"); - font.drawShadow(ms, semicolonLine, left + xSize / 2f - font.width(semicolonLine) / 2f, commentField.y + 34, 0xFFFFFF); + graphics.drawString(getMinecraft().font, semicolonLine, left + xSize / 2f - font.width(semicolonLine) / 2f, commentField.getY() + 34, 0xFFFFFF, true); } List legitTooltip = null; @@ -449,23 +447,23 @@ public void render(PoseStack ms, int mouseX, int mouseY, float partialTicks) { tooltip = legitTooltip; } - super.render(ms, mouseX, mouseY, partialTicks); + super.render(graphics, mouseX, mouseY, partialTicks); if(!takingScreenshot && tooltip != null && !tooltip.isEmpty() && pieceAtCursor == null && mouseMoved) { - this.renderComponentTooltip(ms, tooltip, mouseX, mouseY); + graphics.renderTooltip(getMinecraft().font, tooltip, Optional.empty(), mouseX, mouseY); } if(!takingScreenshot && pieceAtCursor != null && mouseMoved) { if(tooltip != null && !tooltip.isEmpty()) { - pieceAtCursor.drawTooltip(ms, mouseX, mouseY, tooltip, this); + pieceAtCursor.drawTooltip(graphics.pose(), mouseX, mouseY, tooltip, this); } if(comment != null && !comment.isEmpty()) { List commentList = Arrays.stream(comment.split(";")).map(Component::literal).collect(Collectors.toList()); - pieceAtCursor.drawCommentText(ms, mouseX, mouseY, commentList, this); + pieceAtCursor.drawCommentText(graphics.pose(), mouseX, mouseY, commentList, this); } } - ms.popPose(); + graphics.pose().popPose(); if(takingScreenshot) { String name = spell.name; @@ -600,7 +598,8 @@ public boolean charTyped(char character, int keyCode) { @Override public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - getMinecraft().keyboardHandler.setSendRepeatsToGui(true); + //TODO(Kamefrede): 1.20 find alternative to this + //getMinecraft().keyboardHandler.setSendRepeatsToGui(true); if(programmer != null) { spell = programmer.spell; } @@ -635,7 +634,7 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { } } if(spellNameField.isFocused() && keyCode == GLFW.GLFW_KEY_TAB) { - spellNameField.setFocus(false); + spellNameField.setFocused(false); return true; } if(!spellNameField.isFocused() && !panelWidget.panelEnabled && !commentEnabled) { @@ -665,7 +664,7 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { } break; case GLFW.GLFW_KEY_TAB: - spellNameField.setFocus(!spellNameField.isFocused()); + spellNameField.setFocused(!spellNameField.isFocused()); setInitialFocus(spellNameField); return true; case GLFW.GLFW_KEY_UP: @@ -831,11 +830,11 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { case GLFW.GLFW_KEY_D: if(piece != null && hasControlDown()) { commentField.setVisible(true); - commentField.setFocus(true); + commentField.setFocused(true); commentField.setEditable(true); spellNameField.setEditable(false); commentField.setValue(piece.comment); - commentField.setFocus(true); + commentField.setFocused(true); setInitialFocus(commentField); commentEnabled = true; return true; @@ -942,7 +941,7 @@ private void closeComment(boolean save) { } spellNameField.setEditable(!spectator && (piece == null || !piece.interceptKeystrokes())); - commentField.setFocus(false); + commentField.setFocused(false); commentField.setVisible(false); commentField.setEditable(false); commentField.setValue(""); @@ -954,7 +953,7 @@ public boolean shouldCloseOnEsc() { return !panelWidget.panelEnabled && !commentEnabled; } - public List getButtons() { + public List getButtons() { return this.renderables; } diff --git a/src/main/java/vazkii/psi/client/gui/widget/PiecePanelWidget.java b/src/main/java/vazkii/psi/client/gui/widget/PiecePanelWidget.java index df7318c9..f0e32899 100644 --- a/src/main/java/vazkii/psi/client/gui/widget/PiecePanelWidget.java +++ b/src/main/java/vazkii/psi/client/gui/widget/PiecePanelWidget.java @@ -8,13 +8,10 @@ */ package vazkii.psi.client.gui.widget; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; - +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.EditBox; -import net.minecraft.client.gui.components.Widget; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.narration.NarrationElementOutput; import net.minecraft.client.gui.screens.Screen; @@ -44,7 +41,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -public class PiecePanelWidget extends AbstractWidget implements Widget, GuiEventListener { +public class PiecePanelWidget extends AbstractWidget implements GuiEventListener { public final GuiProgrammer parent; public boolean panelEnabled = false; @@ -61,24 +58,22 @@ public PiecePanelWidget(int x, int y, int width, int height, String message, Gui } @Override - public void renderButton(PoseStack ms, int mouseX, int mouseY, float pTicks) { + public void renderWidget(GuiGraphics graphics, int mouseX, int mouseY, float pTicks) { if(panelEnabled) { - RenderSystem.setShaderTexture(0, GuiProgrammer.texture); - - fill(ms, x, y, x + width, y + height, 0x88000000); + graphics.fill(getX(), getY(), getY() + width, getY() + height, 0x88000000); - if(visibleButtons.size() > 0) { + if(!visibleButtons.isEmpty()) { Button button = visibleButtons.get(Math.max(0, Math.min(panelCursor + (page * PIECES_PER_PAGE), visibleButtons.size() - 1))); - int panelPieceX = button.x; - int panelPieceY = button.y; - fill(ms, panelPieceX - 1, panelPieceY - 1, panelPieceX + 17, panelPieceY + 17, 0x559999FF); + int panelPieceX = button.getX(); + int panelPieceY = button.getY(); + graphics.fill(panelPieceX - 1, panelPieceY - 1, panelPieceX + 17, panelPieceY + 17, 0x559999FF); } - RenderSystem.setShaderColor(1F, 1F, 1F, 1F);; - blit(ms, searchField.x - 14, searchField.y - 2, 0, parent.ySize + 16, 12, 12); + graphics.setColor(1f, 1f, 1f ,1f); + graphics.blit(GuiProgrammer.texture, searchField.getX() - 14, searchField.getY() - 2, 0, parent.ySize + 16, 12, 12); String s = Math.min(Math.max(getPageCount(), 1), page + 1) + "/" + Math.max(getPageCount(), 1); - parent.getMinecraft().font.drawShadow(ms, s, x + width / 2f - parent.getMinecraft().font.width(s) / 2f, y + height - 12, 0xFFFFFF); + graphics.drawString(parent.getMinecraft().font, s, getX() + width / 2f - parent.getMinecraft().font.width(s) / 2f, getY() + height - 12, 0xFFFFFF, true); } } @@ -110,13 +105,13 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { closePanel(); return true; case GLFW.GLFW_KEY_ENTER: - if(visibleButtons.size() >= 1) { + if(!visibleButtons.isEmpty()) { visibleButtons.get(panelCursor).onPress(); return true; } return false; case GLFW.GLFW_KEY_TAB: - if(visibleButtons.size() >= 1) { + if(!visibleButtons.isEmpty()) { int newCursor = panelCursor + (Screen.hasAltDown() ? -1 : 1); if(newCursor >= (Math.min(visibleButtons.size(), 25))) { panelCursor = 0; @@ -246,14 +241,14 @@ public void updatePanelButtons() { } else if(button instanceof GuiButtonPage) { GuiButtonPage page = (GuiButtonPage) button; if(page.isRight() && this.page < getPageCount() - 1) { - page.x = x + width - 22; - page.y = y + height - 15; + page.setX( getX() + width - 22); + page.setY(getY() + height - 15); page.visible = true; page.active = true; } else if(!page.isRight() && this.page > 0) { - page.x = x + 4; - page.y = y + height - 15; + page.setX(getX() + 4); + page.setX(getY() + height - 15); page.visible = true; page.active = true; } @@ -291,8 +286,8 @@ public void updatePanelButtons() { GuiButtonSpellPiece piece = visibleButtons.get(i); GuiButtonSpellPiece buttonSpellPiece = (GuiButtonSpellPiece) parent.getButtons().stream().filter(el -> el.equals(piece)).findFirst().orElse(null); - buttonSpellPiece.x = x + 5 + c % 5 * 18; - buttonSpellPiece.y = y + 20 + c / 5 * 18; + buttonSpellPiece.setX(getX() + 5 + c % 5 * 18); + buttonSpellPiece.setY(getY() + 20 + c / 5 * 18); buttonSpellPiece.visible = true; buttonSpellPiece.active = true; } @@ -305,7 +300,7 @@ public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { return true; } - if(panelEnabled && (mouseX < x || mouseY < y || mouseX > x + width || mouseY > y + height) && !parent.isSpectator()) { + if(panelEnabled && (mouseX < getX() || mouseY < getY() || mouseX > getX() + width || mouseY > getY() + height) && !parent.isSpectator()) { closePanel(); return true; } @@ -444,31 +439,30 @@ public void closePanel() { }); searchField.visible = false; searchField.setEditable(false); - searchField.setFocus(false); + searchField.setFocused(true); parent.setFocused(parent.statusWidget); - parent.changeFocus(true); } public void openPanel() { closePanel(); panelEnabled = true; page = Math.min(page, Math.max(0, getPageCount() - 1)); - x = parent.gridLeft + (GuiProgrammer.selectedX + 1) * 18; - y = parent.gridTop; + setX(parent.gridLeft + (GuiProgrammer.selectedX + 1) * 18); + setY(parent.gridTop); - searchField.x = x + 18; - searchField.y = y + 4; + searchField.setX(getX() + 18); + searchField.setY(getY() + 4); searchField.setValue(""); searchField.setVisible(true); searchField.active = true; searchField.setEditable(true); - searchField.setFocus(true); + searchField.setFocused(true); parent.setFocused(searchField); updatePanelButtons(); } @Override - public void updateNarration(NarrationElementOutput p_169152_) { - + protected void updateWidgetNarration(NarrationElementOutput pNarrationElementOutput) { + this.defaultButtonNarrationText(pNarrationElementOutput); } } diff --git a/src/main/java/vazkii/psi/client/jei/crafting/DriveDuplicateExtension.java b/src/main/java/vazkii/psi/client/jei/crafting/DriveDuplicateExtension.java index d8b04f26..5e09c8a8 100644 --- a/src/main/java/vazkii/psi/client/jei/crafting/DriveDuplicateExtension.java +++ b/src/main/java/vazkii/psi/client/jei/crafting/DriveDuplicateExtension.java @@ -18,6 +18,7 @@ import mezz.jei.api.recipe.category.extensions.vanilla.crafting.ICraftingCategoryExtension; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.resources.language.I18n; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -56,8 +57,8 @@ public ResourceLocation getRegistryName() { } @Override - public void drawInfo(int recipeWidth, int recipeHeight, PoseStack matrixStack, double mouseX, double mouseY) { - Minecraft.getInstance().font.draw(matrixStack, I18n.get("jei.psi.spell_copy"), 57, 46, 0x808080); + public void drawInfo(int recipeWidth, int recipeHeight, GuiGraphics graphics, double mouseX, double mouseY) { + graphics.drawString(this, I18n.get("jei.psi.spell_copy"), 57, 46, 0x808080); //RenderSystem.enableAlphaTest(); // Prevents state leak affecting the shapeless icon } } diff --git a/src/main/java/vazkii/psi/client/jei/tricks/DrawablePiece.java b/src/main/java/vazkii/psi/client/jei/tricks/DrawablePiece.java index 5c7ffa80..5e3a254c 100644 --- a/src/main/java/vazkii/psi/client/jei/tricks/DrawablePiece.java +++ b/src/main/java/vazkii/psi/client/jei/tricks/DrawablePiece.java @@ -13,6 +13,7 @@ import mezz.jei.api.gui.drawable.IDrawableStatic; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.renderer.MultiBufferSource; import vazkii.psi.api.spell.SpellPiece; @@ -26,16 +27,16 @@ public DrawablePiece(SpellPiece piece) { } @Override - public void draw(PoseStack ms, int xOffset, int yOffset, int maskTop, int maskBottom, int maskLeft, int maskRight) { - ms.pushPose(); - ms.translate(xOffset, yOffset, 0); + public void draw(GuiGraphics graphics, int xOffset, int yOffset, int maskTop, int maskBottom, int maskLeft, int maskRight) { + graphics.pose().pushPose(); + graphics.pose().translate(xOffset, yOffset, 0); MultiBufferSource.BufferSource buffers = MultiBufferSource.immediate(Tesselator.getInstance().getBuilder()); - piece.drawBackground(ms, buffers, 0xF000F0); + piece.drawBackground(graphics.pose(), buffers, 0xF000F0); buffers.endBatch(); - ms.popPose(); + graphics.pose().popPose(); } @Override @@ -49,7 +50,7 @@ public int getHeight() { } @Override - public void draw(PoseStack ms, int xOff, int yOff) { - draw(ms, xOff, yOff, 0, 0, 0, 0); + public void draw(GuiGraphics graphics, int xOff, int yOff) { + draw(graphics, xOff, yOff, 0, 0, 0, 0); } } diff --git a/src/main/java/vazkii/psi/client/jei/tricks/TrickCraftingCategory.java b/src/main/java/vazkii/psi/client/jei/tricks/TrickCraftingCategory.java index b4931539..51ec02f4 100644 --- a/src/main/java/vazkii/psi/client/jei/tricks/TrickCraftingCategory.java +++ b/src/main/java/vazkii/psi/client/jei/tricks/TrickCraftingCategory.java @@ -20,7 +20,9 @@ import mezz.jei.api.recipe.RecipeType; import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.resources.language.I18n; +import net.minecraft.core.RegistryAccess; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -82,15 +84,15 @@ public IDrawable getIcon() { } @Override - public void draw(ITrickRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack poseStack, double mouseX, double mouseY) { + public void draw(ITrickRecipe recipe, IRecipeSlotsView recipeSlotsView, GuiGraphics guiGraphics, double mouseX, double mouseY) { if(recipe.getPiece() != null) { IDrawable trickIcon = trickIcons.computeIfAbsent(recipe.getPiece().registryKey, key -> new DrawablePiece(recipe.getPiece())); - trickIcon.draw(poseStack, trickX, trickY); + trickIcon.draw(guiGraphics, trickX, trickY); if(onTrick(mouseX, mouseY)) { - programmerHover.draw(poseStack, trickX, trickY); + programmerHover.draw(guiGraphics, trickX, trickY); } } } @@ -114,6 +116,6 @@ private static boolean onTrick(double mouseX, double mouseY) { public void setRecipe(IRecipeLayoutBuilder builder, ITrickRecipe recipe, IFocusGroup focuses) { builder.addSlot(RecipeIngredientRole.INPUT, 1, 6).addIngredients(recipe.getInput()); builder.addSlot(RecipeIngredientRole.CATALYST, 22, 24).addItemStack(recipe.getAssembly()); - builder.addSlot(RecipeIngredientRole.OUTPUT, 74, 6).addItemStack(recipe.getResultItem()); + builder.addSlot(RecipeIngredientRole.OUTPUT, 74, 6).addItemStack(recipe.getResultItem(RegistryAccess.EMPTY)); } } diff --git a/src/main/java/vazkii/psi/client/model/ArmorModels.java b/src/main/java/vazkii/psi/client/model/ArmorModels.java index 40665420..522a9787 100644 --- a/src/main/java/vazkii/psi/client/model/ArmorModels.java +++ b/src/main/java/vazkii/psi/client/model/ArmorModels.java @@ -42,7 +42,7 @@ public static void init(EntityRendererProvider.Context ctx) { public static ModelArmor get(ItemStack stack) { Item item = stack.getItem(); if(item instanceof ItemPsimetalArmor armor) { - return exosuit.get(armor.getSlot()); + return exosuit.get(armor.getEquipmentSlot()); } return null; diff --git a/src/main/java/vazkii/psi/client/patchouli/MultiCraftingProcessor.java b/src/main/java/vazkii/psi/client/patchouli/MultiCraftingProcessor.java index f1ce2c68..876ffd92 100644 --- a/src/main/java/vazkii/psi/client/patchouli/MultiCraftingProcessor.java +++ b/src/main/java/vazkii/psi/client/patchouli/MultiCraftingProcessor.java @@ -10,10 +10,12 @@ import net.minecraft.client.Minecraft; import net.minecraft.core.NonNullList; +import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.CraftingRecipe; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; import net.minecraftforge.common.crafting.IShapedRecipe; import vazkii.patchouli.api.IComponentProcessor; @@ -34,7 +36,7 @@ public class MultiCraftingProcessor implements IComponentProcessor { private boolean hasCustomHeading; @Override - public void setup(IVariableProvider variables) { + public void setup(Level level, IVariableProvider variables) { Map recipeMap = Minecraft.getInstance().level.getRecipeManager().byType(RecipeType.CRAFTING); List names = variables.get("recipes").asStream().map(IVariable::asString).collect(Collectors.toList()); this.recipes = new ArrayList<>(); @@ -59,13 +61,13 @@ public void setup(IVariableProvider variables) { } @Override - public IVariable process(String key) { + public IVariable process(Level level, String key) { if(recipes.isEmpty()) { return null; } if(key.equals("heading")) { if(!hasCustomHeading) { - return IVariable.from(recipes.get(0).getResultItem().getHoverName()); + return IVariable.from(recipes.get(0).getResultItem(RegistryAccess.EMPTY).getHoverName()); } return null; } @@ -93,7 +95,7 @@ public IVariable process(String key) { return PatchouliUtils.interweaveIngredients(ingredients, longestIngredientSize); } if(key.equals("output")) { - return IVariable.wrapList(recipes.stream().map(CraftingRecipe::getResultItem).map(IVariable::from).collect(Collectors.toList())); + return IVariable.wrapList(recipes.stream().map(recipe -> recipe.getResultItem(RegistryAccess.EMPTY)).map(IVariable::from).collect(Collectors.toList())); } if(key.equals("shapeless")) { return IVariable.wrap(shapeless); diff --git a/src/main/java/vazkii/psi/client/patchouli/SpellGridComponent.java b/src/main/java/vazkii/psi/client/patchouli/SpellGridComponent.java index 0fcf2073..664db0cf 100644 --- a/src/main/java/vazkii/psi/client/patchouli/SpellGridComponent.java +++ b/src/main/java/vazkii/psi/client/patchouli/SpellGridComponent.java @@ -8,11 +8,10 @@ */ package vazkii.psi.client.patchouli; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.Tesselator; import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.resources.language.I18n; import net.minecraft.nbt.CompoundTag; @@ -55,26 +54,26 @@ public void build(int componentX, int componentY, int pageNum) { } } + @Override - public void render(PoseStack ms, IComponentRenderContext context, float pticks, int mouseX, int mouseY) { + public void render(GuiGraphics graphics, IComponentRenderContext context, float pticks, int mouseX, int mouseY) { float scale = 0.65f; - ms.pushPose(); - ms.scale(scale, scale, 0f); + graphics.pose().pushPose(); + graphics.pose().scale(scale, scale, 0f); // Draw the Programmer BG - RenderSystem.setShaderColor(1F, 1F, 1F, 1F); - RenderSystem.setShaderTexture(0, texture); - context.getGui().blit(ms, 0, 0, 0, 0, 174, 184); + graphics.setColor(1F, 1F, 1F, 1F); + graphics.blit(texture, 0, 0, 0, 0, 174, 184); // Draw the name label and spell name - context.getGui().getMinecraft().font.drawShadow(ms, I18n.get("psimisc.name"), 7, 171, 0xFFFFFF); - context.getGui().getMinecraft().font.drawShadow(ms, spellName, 44, 170, 0xFFFFFF); + graphics.drawString(context.getGui().getMinecraft().font, I18n.get("psimisc.name"), 7, 171, 0xFFFFFF, true); + graphics.drawString(context.getGui().getMinecraft().font, spellName, 44, 170, 0xFFFFFF, true); // Pad the spell pieces and draw them - ms.translate(7f, 7f, 0f); + graphics.pose().translate(7f, 7f, 0f); MultiBufferSource.BufferSource buffer = MultiBufferSource.immediate(Tesselator.getInstance().getBuilder()); - grid.draw(ms, buffer, 0xF000F0); + grid.draw(graphics.pose(), buffer, 0xF000F0); buffer.endBatch(); float scaledSize = 18 * scale; @@ -90,7 +89,7 @@ public void render(PoseStack ms, IComponentRenderContext context, float pticks, } } } - ms.popPose(); + graphics.pose().popPose(); } @Override diff --git a/src/main/java/vazkii/psi/client/patchouli/SpellPieceComponent.java b/src/main/java/vazkii/psi/client/patchouli/SpellPieceComponent.java index 4039221f..52b232e6 100644 --- a/src/main/java/vazkii/psi/client/patchouli/SpellPieceComponent.java +++ b/src/main/java/vazkii/psi/client/patchouli/SpellPieceComponent.java @@ -11,6 +11,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.Tesselator; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.resources.ResourceLocation; @@ -39,17 +40,17 @@ public void build(int componentX, int componentY, int pageNum) { } @Override - public void render(PoseStack ms, IComponentRenderContext context, float pticks, int mouseX, int mouseY) { + public void render(GuiGraphics graphics, IComponentRenderContext context, float pticks, int mouseX, int mouseY) { MultiBufferSource.BufferSource buffer = MultiBufferSource.immediate(Tesselator.getInstance().getBuilder()); - ms.pushPose(); - ms.translate(x, y, 0); - piece.draw(ms, buffer, 0xF000F0); + graphics.pose().pushPose(); + graphics.pose().translate(x, y, 0); + piece.draw(graphics.pose(), buffer, 0xF000F0); buffer.endBatch(); if(context.isAreaHovered(mouseX, mouseY, x - 1, y - 1, 16, 16)) { PatchouliUtils.setPieceTooltip(context, piece); } - ms.popPose(); + graphics.pose().popPose(); } @Override diff --git a/src/main/java/vazkii/psi/client/render/entity/RenderSpellCircle.java b/src/main/java/vazkii/psi/client/render/entity/RenderSpellCircle.java index c4b6b505..4c308e5f 100644 --- a/src/main/java/vazkii/psi/client/render/entity/RenderSpellCircle.java +++ b/src/main/java/vazkii/psi/client/render/entity/RenderSpellCircle.java @@ -12,8 +12,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexFormat; -import com.mojang.math.Matrix4f; -import com.mojang.math.Vector3f; +import com.mojang.math.Axis; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderStateShard; @@ -23,6 +22,9 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; +import org.joml.Matrix4f; +import org.joml.Vector3f; + import vazkii.psi.api.internal.PsiRenderHelper; import vazkii.psi.client.model.ArmorModels; import vazkii.psi.common.Psi; @@ -78,9 +80,9 @@ public static void renderSpellCircle(float alive, float scale, float horizontalS zDir /= mag; if(zDir == -1) { - ms.mulPose(Vector3f.XP.rotationDegrees(180)); + ms.mulPose(Axis.XP.rotationDegrees(180)); } else if(zDir != 1) { - ms.mulPose(new Vector3f(-yDir / mag, xDir / mag, 0).rotationDegrees((float) (Math.acos(zDir) * 180 / Math.PI))); + ms.mulPose(new Vector3f(-yDir / mag, xDir / mag, 0).rotate((float) (Math.acos(zDir) * 180 / Math.PI))); } ms.translate(0, 0, 0.1); ms.scale((float) ratio * scale, (float) ratio * scale, (float) ratio); @@ -117,7 +119,7 @@ public static void renderSpellCircle(float alive, float scale, float horizontalS } ms.pushPose(); - ms.mulPose(Vector3f.ZP.rotationDegrees(i == 0 ? -alive : alive)); + ms.mulPose(Axis.ZP.rotationDegrees(i == 0 ? -alive : alive)); VertexConsumer buffer = buffers.getBuffer(LAYERS[i]); Matrix4f mat = ms.last().pose(); diff --git a/src/main/java/vazkii/psi/client/render/tile/RenderTileProgrammer.java b/src/main/java/vazkii/psi/client/render/tile/RenderTileProgrammer.java index dced700c..ccbb1d5b 100644 --- a/src/main/java/vazkii/psi/client/render/tile/RenderTileProgrammer.java +++ b/src/main/java/vazkii/psi/client/render/tile/RenderTileProgrammer.java @@ -10,10 +10,10 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.math.Matrix4f; -import com.mojang.math.Vector3f; +import com.mojang.math.Axis; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; @@ -22,6 +22,8 @@ import net.minecraft.world.level.block.FaceAttachedHorizontalDirectionalBlock; import net.minecraft.world.level.block.state.BlockState; +import org.joml.Matrix4f; + import vazkii.psi.client.core.handler.ClientTickHandler; import vazkii.psi.client.gui.GuiProgrammer; import vazkii.psi.common.Psi; @@ -38,8 +40,8 @@ public void render(TileProgrammer te, float partialticks, PoseStack ms, MultiBuf int light = Psi.magical ? worldLight : 0xF000F0; ms.translate(0, 1.62F, 0); - ms.mulPose(Vector3f.ZP.rotationDegrees(180F)); - ms.mulPose(Vector3f.YP.rotationDegrees(-90F)); + ms.mulPose(Axis.ZP.rotationDegrees(180F)); + ms.mulPose(Axis.YP.rotationDegrees(-90F)); float rot = 90F; BlockState state = te.getBlockState(); @@ -60,16 +62,16 @@ public void render(TileProgrammer te, float partialticks, PoseStack ms, MultiBuf } ms.translate(0.5F, 0F, 0.5F); - ms.mulPose(Vector3f.YP.rotationDegrees(rot)); + ms.mulPose(Axis.YP.rotationDegrees(rot)); ms.translate(-0.5F, 0F, -0.5F); float f = 1F / 300F; ms.scale(f, f, -f); if(Psi.magical) { - ms.mulPose(Vector3f.XP.rotationDegrees(90F)); + ms.mulPose(Axis.XP.rotationDegrees(90F)); ms.translate(70F, -220F, -100F + Math.sin(ClientTickHandler.total / 50) * 10); - ms.mulPose(Vector3f.XP.rotationDegrees(-16F + (float) Math.cos(ClientTickHandler.total / 100) * 10F)); + ms.mulPose(Axis.XP.rotationDegrees(-16F + (float) Math.cos(ClientTickHandler.total / 100) * 10F)); } else { ms.translate(70F, 0F, -200F); } @@ -94,8 +96,8 @@ public void render(TileProgrammer te, float partialticks, PoseStack ms, MultiBuf int color = Psi.magical ? 0 : 0xFFFFFF; Minecraft mc = Minecraft.getInstance(); - mc.font.drawInBatch(I18n.get("psimisc.name"), 0, 164, color, false, ms.last().pose(), buffers, false, 0, 0xF000F0); - mc.font.drawInBatch(te.spell.name, 38, 164, color, false, ms.last().pose(), buffers, false, 0, 0xF000F0); + mc.font.drawInBatch(I18n.get("psimisc.name"), 0, 164, color, false, ms.last().pose(), buffers, Font.DisplayMode.NORMAL, 0, 0xF000F0); + mc.font.drawInBatch(te.spell.name, 38, 164, color, false, ms.last().pose(), buffers, Font.DisplayMode.NORMAL, 0, 0xF000F0); ms.popPose(); } diff --git a/src/main/java/vazkii/psi/common/block/base/ModBlocks.java b/src/main/java/vazkii/psi/common/block/base/ModBlocks.java index d0e501f4..76307c1b 100644 --- a/src/main/java/vazkii/psi/common/block/base/ModBlocks.java +++ b/src/main/java/vazkii/psi/common/block/base/ModBlocks.java @@ -18,7 +18,8 @@ import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.block.state.properties.NoteBlockInstrument; +import net.minecraft.world.level.material.MapColor; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.common.extensions.IForgeMenuType; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -63,18 +64,21 @@ public class ModBlocks { @SubscribeEvent public static void register(RegisterEvent evt) { evt.register(ForgeRegistries.Keys.BLOCKS, helper -> { - cadAssembler = new BlockCADAssembler(Block.Properties.of(Material.METAL).strength(5, 10).sound(SoundType.METAL).noOcclusion()); - programmer = new BlockProgrammer(Block.Properties.of(Material.METAL).strength(5, 10).sound(SoundType.METAL).noOcclusion()); - conjured = new BlockConjured(Block.Properties.of(Material.GLASS).noLootTable().lightLevel(state -> state.getValue(BlockConjured.LIGHT) ? 15 : 0).noOcclusion().isValidSpawn(NO_SPAWN).isRedstoneConductor(NO_SUFFOCATION).isSuffocating(NO_SUFFOCATION).isViewBlocking(NO_SUFFOCATION)); - psidustBlock = new Block(Block.Properties.of(Material.METAL).strength(5, 10).sound(SoundType.METAL)); - psimetalBlock = new Block(Block.Properties.of(Material.METAL).strength(5, 10).sound(SoundType.METAL)); - psigemBlock = new Block(Block.Properties.of(Material.METAL).strength(5, 10).sound(SoundType.METAL)); - psimetalPlateBlack = new Block(Block.Properties.of(Material.METAL).strength(5, 10).sound(SoundType.METAL)); - psimetalPlateBlackLight = new Block(Block.Properties.of(Material.METAL).strength(5, 10).sound(SoundType.METAL).lightLevel((blockState) -> 15)); - psimetalPlateWhite = new Block(Block.Properties.of(Material.METAL).strength(5, 10).sound(SoundType.METAL)); - psimetalPlateWhiteLight = new Block(Block.Properties.of(Material.METAL).strength(5, 10).sound(SoundType.METAL).lightLevel((blockstate) -> 15)); - psimetalEbony = new Block(Block.Properties.of(Material.METAL).strength(5, 10).sound(SoundType.METAL)); - psimetalIvory = new Block(Block.Properties.of(Material.METAL).strength(5, 10).sound(SoundType.METAL)); + BlockBehaviour.Properties metalBlockProperties = BlockBehaviour.Properties.of().mapColor(MapColor.METAL).instrument(NoteBlockInstrument.IRON_XYLOPHONE).requiresCorrectToolForDrops().strength(5.0F, 6.0F).sound(SoundType.METAL); + BlockBehaviour metalBehaviour = new Block(metalBlockProperties); + + cadAssembler = new BlockCADAssembler(Block.Properties.copy(metalBehaviour).strength(5, 10).sound(SoundType.METAL).noOcclusion()); + programmer = new BlockProgrammer(Block.Properties.copy(metalBehaviour).strength(5, 10).sound(SoundType.METAL).noOcclusion()); + conjured = new BlockConjured(Block.Properties.of().mapColor(MapColor.NONE).instrument(NoteBlockInstrument.HAT).strength(0.3F).sound(SoundType.GLASS).noOcclusion().noLootTable().lightLevel(state -> state.getValue(BlockConjured.LIGHT) ? 15 : 0).noOcclusion().isValidSpawn(NO_SPAWN).isRedstoneConductor(NO_SUFFOCATION).isSuffocating(NO_SUFFOCATION).isViewBlocking(NO_SUFFOCATION)); + psidustBlock = new Block(Block.Properties.copy(metalBehaviour).strength(5, 10).sound(SoundType.METAL)); + psimetalBlock = new Block(Block.Properties.copy(metalBehaviour).strength(5, 10).sound(SoundType.METAL)); + psigemBlock = new Block(Block.Properties.copy(metalBehaviour).strength(5, 10).sound(SoundType.METAL)); + psimetalPlateBlack = new Block(Block.Properties.copy(metalBehaviour).strength(5, 10).sound(SoundType.METAL)); + psimetalPlateBlackLight = new Block(Block.Properties.copy(metalBehaviour).strength(5, 10).sound(SoundType.METAL).lightLevel((blockState) -> 15)); + psimetalPlateWhite = new Block(Block.Properties.copy(metalBehaviour).strength(5, 10).sound(SoundType.METAL)); + psimetalPlateWhiteLight = new Block(Block.Properties.copy(metalBehaviour).strength(5, 10).sound(SoundType.METAL).lightLevel((blockstate) -> 15)); + psimetalEbony = new Block(Block.Properties.copy(metalBehaviour).strength(5, 10).sound(SoundType.METAL)); + psimetalIvory = new Block(Block.Properties.copy(metalBehaviour).strength(5, 10).sound(SoundType.METAL)); helper.register(new ResourceLocation(LibMisc.MOD_ID, LibBlockNames.CAD_ASSEMBLER), cadAssembler); helper.register(new ResourceLocation(LibMisc.MOD_ID, LibBlockNames.PROGRAMMER), programmer); @@ -112,7 +116,7 @@ public static void register(RegisterEvent evt) { evt.register(ForgeRegistries.Keys.MENU_TYPES, helper -> { helper.register(ForgeRegistries.BLOCKS.getKey(cadAssembler), containerCADAssembler); - DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> { + DistExecutor.safeRunWhenOn(Dist.CLIENT, () -> () -> { MenuScreens.register(containerCADAssembler, GuiCADAssembler::new); }); }); diff --git a/src/main/java/vazkii/psi/common/block/tile/container/ContainerCADAssembler.java b/src/main/java/vazkii/psi/common/block/tile/container/ContainerCADAssembler.java index 546eac7f..a9d16daf 100644 --- a/src/main/java/vazkii/psi/common/block/tile/container/ContainerCADAssembler.java +++ b/src/main/java/vazkii/psi/common/block/tile/container/ContainerCADAssembler.java @@ -64,7 +64,7 @@ public class ContainerCADAssembler extends AbstractContainerMenu { public static ContainerCADAssembler fromNetwork(int windowId, Inventory playerInventory, FriendlyByteBuf buf) { BlockPos pos = buf.readBlockPos(); - return new ContainerCADAssembler(windowId, playerInventory, (TileCADAssembler) playerInventory.player.level.getBlockEntity(pos)); + return new ContainerCADAssembler(windowId, playerInventory, (TileCADAssembler) playerInventory.player.level().getBlockEntity(pos)); } public ContainerCADAssembler(int windowId, Inventory playerInventory, TileCADAssembler assembler) { @@ -189,7 +189,7 @@ public ItemStack quickMoveStack(Player playerIn, int from) { } } else if(stackInSlot.getItem() instanceof ArmorItem) { ArmorItem armor = (ArmorItem) stackInSlot.getItem(); - int armorSlot = armorStart + armor.getSlot().getFilterFlag() - 1; + int armorSlot = armorStart + armor.getType().ordinal() - 1; if(!moveItemStackTo(stackInSlot, armorSlot, armorSlot + 1, true) && !moveItemStackTo(stackInSlot, playerStart, hotbarEnd, true)) { return ItemStack.EMPTY; diff --git a/src/main/java/vazkii/psi/common/core/handler/DamageTypeHandler.java b/src/main/java/vazkii/psi/common/core/handler/DamageTypeHandler.java new file mode 100644 index 00000000..038bd7a9 --- /dev/null +++ b/src/main/java/vazkii/psi/common/core/handler/DamageTypeHandler.java @@ -0,0 +1,47 @@ +/* + * This class is distributed as part of the Psi Mod. + * Get the Source Code in github: + * https://github.com/Vazkii/Psi + * + * Psi is Open Source and distributed under the + * Psi License: https://psi.vazkii.net/license.php + */ +package vazkii.psi.common.core.handler; + +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegisterEvent; +import net.minecraftforge.registries.RegistryManager; + +import vazkii.psi.api.recipe.ITrickRecipe; +import vazkii.psi.common.crafting.recipe.AssemblyScavengeRecipe; +import vazkii.psi.common.crafting.recipe.BulletToDriveRecipe; +import vazkii.psi.common.crafting.recipe.BulletUpgradeRecipe; +import vazkii.psi.common.crafting.recipe.ColorizerChangeRecipe; +import vazkii.psi.common.crafting.recipe.DimensionTrickRecipe; +import vazkii.psi.common.crafting.recipe.DriveDuplicateRecipe; +import vazkii.psi.common.crafting.recipe.SensorAttachRecipe; +import vazkii.psi.common.crafting.recipe.SensorRemoveRecipe; +import vazkii.psi.common.crafting.recipe.TrickRecipe; +import vazkii.psi.common.lib.LibMisc; +import vazkii.psi.common.lib.LibResources; +import vazkii.psi.data.MagicalPsiCondition; + +@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD, modid = LibMisc.MOD_ID) +public class DamageTypeHandler { + public static final DamageType psiDamageType = new DamageType("psi_overload", 0f); + + @SubscribeEvent + public static void registerSerializers(RegisterEvent event) { + event.register(Registries.DAMAGE_TYPE, helper -> { + helper.register(LibResources.PSI_DAMAGE_TYPE, psiDamageType); + }); + } +} diff --git a/src/main/java/vazkii/psi/common/core/handler/PlayerDataHandler.java b/src/main/java/vazkii/psi/common/core/handler/PlayerDataHandler.java index c909e069..416a7085 100644 --- a/src/main/java/vazkii/psi/common/core/handler/PlayerDataHandler.java +++ b/src/main/java/vazkii/psi/common/core/handler/PlayerDataHandler.java @@ -16,15 +16,19 @@ import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.protocol.game.ClientboundPlayerPositionPacket.RelativeArgument; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.damagesource.DamageTypes; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.RelativeMovement; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.dimension.DimensionType; @@ -40,6 +44,7 @@ import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.registries.RegistryManager; import vazkii.psi.api.PsiAPI; import vazkii.psi.api.cad.EnumCADStat; @@ -66,6 +71,7 @@ import vazkii.psi.common.Psi; import vazkii.psi.common.item.ItemCAD; import vazkii.psi.common.lib.LibMisc; +import vazkii.psi.common.lib.LibResources; import vazkii.psi.common.network.MessageRegister; import vazkii.psi.common.network.message.MessageDataSync; import vazkii.psi.common.network.message.MessageDeductPsi; @@ -91,15 +97,13 @@ public class PlayerDataHandler { private static final String DATA_TAG = "PsiData"; - public static final DamageSource damageSourceOverload = new DamageSource("psi-overload").bypassArmor().bypassMagic(); - @Nonnull public static PlayerData get(Player player) { if(player == null) { return new PlayerData(); } - Map dataMap = player.level.isClientSide ? remotePlayerData : playerData; + Map dataMap = player.level().isClientSide ? remotePlayerData : playerData; PlayerData data = dataMap.computeIfAbsent(player, PlayerData::new); if(data.playerWR != null && data.playerWR.get() != player) { @@ -173,7 +177,7 @@ public static void onEntityDamage(LivingHurtEvent event) { } PsiArmorEvent.post(new PsiArmorEvent(player, PsiArmorEvent.DAMAGE, event.getAmount(), attacker)); - if(event.getSource().isFire()) { + if(event.getSource().is(DamageTypes.ON_FIRE) || event.getSource().is(DamageTypes.IN_FIRE)) { PsiArmorEvent.post(new PsiArmorEvent(player, PsiArmorEvent.ON_FIRE)); } } @@ -189,7 +193,7 @@ public static void onPlayerLogin(PlayerEvent.PlayerLoggedInEvent event) { @SubscribeEvent public static void onEntityJump(LivingJumpEvent event) { - if(event.getEntity() instanceof Player && event.getEntity().level.isClientSide && !event.getEntity().isSpectator()) { + if(event.getEntity() instanceof Player && event.getEntity().level().isClientSide && !event.getEntity().isSpectator()) { Player player = (Player) event.getEntity(); PsiArmorEvent.post(new PsiArmorEvent(player, PsiArmorEvent.JUMP)); MessageRegister.HANDLER.sendToServer(new MessageTriggerJumpSpell()); @@ -377,7 +381,7 @@ public void tick() { } if(lastTickLoopcastStack != null) { - if(!ItemStack.isSame(lastTickLoopcastStack, stackInHand) || + if(!ItemStack.isSameItem(lastTickLoopcastStack, stackInHand) || !ISocketable.isSocketable(lastTickLoopcastStack)) { stopLoopcast(); break loopcast; @@ -495,7 +499,7 @@ public void tick() { Vector3 vec = eidosChangelog.pop(); if(player instanceof ServerPlayer) { ServerPlayer pmp = (ServerPlayer) player; - pmp.connection.teleport(vec.x, vec.y, vec.z, 0, 0, ImmutableSet.of(RelativeArgument.X_ROT, RelativeArgument.Y_ROT)); + pmp.connection.teleport(vec.x, vec.y, vec.z, 0, 0, ImmutableSet.of(RelativeMovement.X_ROT, RelativeMovement.Y_ROT)); pmp.connection.resetPosition(); } else { player.setPos(vec.x, vec.y, vec.z); @@ -508,7 +512,7 @@ public void tick() { riding = riding.getVehicle(); } - if(player.level.isClientSide) { + if(player.level().isClientSide) { for(int i = 0; i < 5; i++) { double spread = 0.6; @@ -686,7 +690,9 @@ public void deductPsi(int psi, int cd, boolean sync, boolean shatter) { if(!shatter && overflow > 0) { float dmg = (float) overflow / (loopcasting ? 50 : 125); if(!client) { - player.hurt(damageSourceOverload, dmg); + Holder holder = RegistryManager.VANILLA.getRegistry(Registries.DAMAGE_TYPE).getHolder(LibResources.PSI_DAMAGE_TYPE).get(); + DamageSource overloadSource = new DamageSource(holder); + player.hurt(overloadSource, dmg); } overflowed = true; } diff --git a/src/main/java/vazkii/psi/common/crafting/ModCraftingRecipes.java b/src/main/java/vazkii/psi/common/crafting/ModCraftingRecipes.java index fd3498a9..9487383c 100644 --- a/src/main/java/vazkii/psi/common/crafting/ModCraftingRecipes.java +++ b/src/main/java/vazkii/psi/common/crafting/ModCraftingRecipes.java @@ -8,7 +8,6 @@ */ package vazkii.psi.common.crafting; -import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.Recipe; import net.minecraft.world.item.crafting.RecipeType; @@ -60,7 +59,7 @@ public static void registerSerializers(RegisterEvent event) { private static class PsiRecipeType> implements RecipeType { @Override public String toString() { - return Registry.RECIPE_TYPE.getKey(this).toString(); + return ForgeRegistries.RECIPE_TYPES.getKey(this).toString(); } } } diff --git a/src/main/java/vazkii/psi/common/crafting/recipe/AssemblyScavengeRecipe.java b/src/main/java/vazkii/psi/common/crafting/recipe/AssemblyScavengeRecipe.java index 49cca98e..82c2ac51 100644 --- a/src/main/java/vazkii/psi/common/crafting/recipe/AssemblyScavengeRecipe.java +++ b/src/main/java/vazkii/psi/common/crafting/recipe/AssemblyScavengeRecipe.java @@ -8,12 +8,14 @@ */ package vazkii.psi.common.crafting.recipe; +import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingBookCategory; import net.minecraft.world.item.crafting.CustomRecipe; import net.minecraft.world.item.crafting.RecipeSerializer; -import net.minecraft.world.item.crafting.SimpleRecipeSerializer; +import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; import net.minecraft.world.level.Level; import vazkii.psi.api.cad.EnumCADComponent; @@ -22,10 +24,10 @@ import javax.annotation.Nonnull; public class AssemblyScavengeRecipe extends CustomRecipe { - public static final SimpleRecipeSerializer SERIALIZER = new SimpleRecipeSerializer<>(AssemblyScavengeRecipe::new); + public static final SimpleCraftingRecipeSerializer SERIALIZER = new SimpleCraftingRecipeSerializer<>(AssemblyScavengeRecipe::new); - public AssemblyScavengeRecipe(ResourceLocation id) { - super(id); + public AssemblyScavengeRecipe(ResourceLocation id, CraftingBookCategory category) { + super(id, category); } @Override @@ -64,7 +66,7 @@ public boolean matches(@Nonnull CraftingContainer inv, @Nonnull Level world) { @Nonnull @Override - public ItemStack assemble(@Nonnull CraftingContainer inv) { + public ItemStack assemble(@Nonnull CraftingContainer inv, RegistryAccess access) { ItemStack target = ItemStack.EMPTY; for(int i = 0; i < inv.getContainerSize(); i++) { diff --git a/src/main/java/vazkii/psi/common/crafting/recipe/BulletToDriveRecipe.java b/src/main/java/vazkii/psi/common/crafting/recipe/BulletToDriveRecipe.java index b4be4c36..f24c1468 100644 --- a/src/main/java/vazkii/psi/common/crafting/recipe/BulletToDriveRecipe.java +++ b/src/main/java/vazkii/psi/common/crafting/recipe/BulletToDriveRecipe.java @@ -9,12 +9,14 @@ package vazkii.psi.common.crafting.recipe; import net.minecraft.core.NonNullList; +import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingBookCategory; import net.minecraft.world.item.crafting.CustomRecipe; import net.minecraft.world.item.crafting.RecipeSerializer; -import net.minecraft.world.item.crafting.SimpleRecipeSerializer; +import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; import net.minecraft.world.level.Level; import vazkii.psi.api.spell.ISpellAcceptor; @@ -24,10 +26,10 @@ import javax.annotation.Nonnull; public class BulletToDriveRecipe extends CustomRecipe { - public static final SimpleRecipeSerializer SERIALIZER = new SimpleRecipeSerializer<>(BulletToDriveRecipe::new); + public static final SimpleCraftingRecipeSerializer SERIALIZER = new SimpleCraftingRecipeSerializer<>(BulletToDriveRecipe::new); - public BulletToDriveRecipe(ResourceLocation id) { - super(id); + public BulletToDriveRecipe(ResourceLocation resourceLocation, CraftingBookCategory craftingBookCategory) { + super(resourceLocation, craftingBookCategory); } @Override @@ -57,14 +59,13 @@ public boolean matches(@Nonnull CraftingContainer inv, @Nonnull Level world) { return foundSource && foundTarget; } - @Nonnull @Override - public ItemStack assemble(@Nonnull CraftingContainer inv) { + public ItemStack assemble(CraftingContainer pContainer, RegistryAccess pRegistryAccess) { Spell source = null; ItemStack target = ItemStack.EMPTY; - for(int i = 0; i < inv.getContainerSize(); i++) { - ItemStack stack = inv.getItem(i); + for(int i = 0; i < pContainer.getContainerSize(); i++) { + ItemStack stack = pContainer.getItem(i); if(!stack.isEmpty()) { if(ISpellAcceptor.hasSpell(stack)) { source = ISpellAcceptor.acceptor(stack).getSpell(); diff --git a/src/main/java/vazkii/psi/common/crafting/recipe/ColorizerChangeRecipe.java b/src/main/java/vazkii/psi/common/crafting/recipe/ColorizerChangeRecipe.java index a21a6700..3e8f5551 100644 --- a/src/main/java/vazkii/psi/common/crafting/recipe/ColorizerChangeRecipe.java +++ b/src/main/java/vazkii/psi/common/crafting/recipe/ColorizerChangeRecipe.java @@ -9,12 +9,14 @@ package vazkii.psi.common.crafting.recipe; import net.minecraft.core.NonNullList; +import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingBookCategory; import net.minecraft.world.item.crafting.CustomRecipe; import net.minecraft.world.item.crafting.RecipeSerializer; -import net.minecraft.world.item.crafting.SimpleRecipeSerializer; +import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; import net.minecraft.world.level.Level; import net.minecraftforge.common.ForgeHooks; @@ -26,10 +28,10 @@ import javax.annotation.Nonnull; public class ColorizerChangeRecipe extends CustomRecipe { - public static final SimpleRecipeSerializer SERIALIZER = new SimpleRecipeSerializer<>(ColorizerChangeRecipe::new); + public static final SimpleCraftingRecipeSerializer SERIALIZER = new SimpleCraftingRecipeSerializer<>(ColorizerChangeRecipe::new); - public ColorizerChangeRecipe(ResourceLocation id) { - super(id); + public ColorizerChangeRecipe(ResourceLocation id, CraftingBookCategory category) { + super(id, category); } @Override @@ -61,7 +63,7 @@ public boolean matches(@Nonnull CraftingContainer inv, @Nonnull Level world) { @Nonnull @Override - public ItemStack assemble(@Nonnull CraftingContainer inv) { + public ItemStack assemble(@Nonnull CraftingContainer inv, RegistryAccess access) { ItemStack colorizer = ItemStack.EMPTY; ItemStack cad = ItemStack.EMPTY; diff --git a/src/main/java/vazkii/psi/common/crafting/recipe/DriveDuplicateRecipe.java b/src/main/java/vazkii/psi/common/crafting/recipe/DriveDuplicateRecipe.java index 8029b4e1..4488ec8e 100644 --- a/src/main/java/vazkii/psi/common/crafting/recipe/DriveDuplicateRecipe.java +++ b/src/main/java/vazkii/psi/common/crafting/recipe/DriveDuplicateRecipe.java @@ -9,12 +9,14 @@ package vazkii.psi.common.crafting.recipe; import net.minecraft.core.NonNullList; +import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingBookCategory; import net.minecraft.world.item.crafting.CustomRecipe; import net.minecraft.world.item.crafting.RecipeSerializer; -import net.minecraft.world.item.crafting.SimpleRecipeSerializer; +import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; import net.minecraft.world.level.Level; import vazkii.psi.api.spell.Spell; @@ -23,10 +25,10 @@ import javax.annotation.Nonnull; public class DriveDuplicateRecipe extends CustomRecipe { - public static final SimpleRecipeSerializer SERIALIZER = new SimpleRecipeSerializer<>(DriveDuplicateRecipe::new); + public static final SimpleCraftingRecipeSerializer SERIALIZER = new SimpleCraftingRecipeSerializer<>(DriveDuplicateRecipe::new); - public DriveDuplicateRecipe(ResourceLocation id) { - super(id); + public DriveDuplicateRecipe(ResourceLocation id, CraftingBookCategory category) { + super(id, category); } @Override @@ -60,7 +62,7 @@ public boolean matches(@Nonnull CraftingContainer inv, @Nonnull Level world) { @Nonnull @Override - public ItemStack assemble(@Nonnull CraftingContainer inv) { + public ItemStack assemble(@Nonnull CraftingContainer inv, RegistryAccess access) { Spell source = null; ItemStack target = ItemStack.EMPTY; diff --git a/src/main/java/vazkii/psi/common/crafting/recipe/SensorAttachRecipe.java b/src/main/java/vazkii/psi/common/crafting/recipe/SensorAttachRecipe.java index c73ddd37..e112144c 100644 --- a/src/main/java/vazkii/psi/common/crafting/recipe/SensorAttachRecipe.java +++ b/src/main/java/vazkii/psi/common/crafting/recipe/SensorAttachRecipe.java @@ -8,12 +8,14 @@ */ package vazkii.psi.common.crafting.recipe; +import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingBookCategory; import net.minecraft.world.item.crafting.CustomRecipe; import net.minecraft.world.item.crafting.RecipeSerializer; -import net.minecraft.world.item.crafting.SimpleRecipeSerializer; +import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; import net.minecraft.world.level.Level; import vazkii.psi.api.exosuit.IExosuitSensor; @@ -22,10 +24,10 @@ import javax.annotation.Nonnull; public class SensorAttachRecipe extends CustomRecipe { - public static final SimpleRecipeSerializer SERIALIZER = new SimpleRecipeSerializer<>(SensorAttachRecipe::new); + public static final SimpleCraftingRecipeSerializer SERIALIZER = new SimpleCraftingRecipeSerializer<>(SensorAttachRecipe::new); - public SensorAttachRecipe(ResourceLocation id) { - super(id); + public SensorAttachRecipe(ResourceLocation id, CraftingBookCategory category) { + super(id, category); } @Override @@ -57,7 +59,7 @@ public boolean matches(@Nonnull CraftingContainer inv, @Nonnull Level world) { @Nonnull @Override - public ItemStack assemble(@Nonnull CraftingContainer inv) { + public ItemStack assemble(@Nonnull CraftingContainer inv, RegistryAccess access) { ItemStack sensor = ItemStack.EMPTY; ItemStack target = ItemStack.EMPTY; diff --git a/src/main/java/vazkii/psi/common/crafting/recipe/SensorRemoveRecipe.java b/src/main/java/vazkii/psi/common/crafting/recipe/SensorRemoveRecipe.java index 191d36ec..0760e8d1 100644 --- a/src/main/java/vazkii/psi/common/crafting/recipe/SensorRemoveRecipe.java +++ b/src/main/java/vazkii/psi/common/crafting/recipe/SensorRemoveRecipe.java @@ -9,12 +9,14 @@ package vazkii.psi.common.crafting.recipe; import net.minecraft.core.NonNullList; +import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingBookCategory; import net.minecraft.world.item.crafting.CustomRecipe; import net.minecraft.world.item.crafting.RecipeSerializer; -import net.minecraft.world.item.crafting.SimpleRecipeSerializer; +import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; import net.minecraft.world.level.Level; import vazkii.psi.api.exosuit.ISensorHoldable; @@ -23,10 +25,10 @@ public class SensorRemoveRecipe extends CustomRecipe { - public static final SimpleRecipeSerializer SERIALIZER = new SimpleRecipeSerializer<>(SensorRemoveRecipe::new); + public static final SimpleCraftingRecipeSerializer SERIALIZER = new SimpleCraftingRecipeSerializer<>(SensorRemoveRecipe::new); - public SensorRemoveRecipe(ResourceLocation id) { - super(id); + public SensorRemoveRecipe(ResourceLocation id, CraftingBookCategory category) { + super(id, category); } @Override @@ -49,7 +51,7 @@ public boolean matches(@Nonnull CraftingContainer inv, @Nonnull Level world) { @Nonnull @Override - public ItemStack assemble(@Nonnull CraftingContainer inv) { + public ItemStack assemble(@Nonnull CraftingContainer inv, RegistryAccess access) { ItemStack holdableItem = ItemStack.EMPTY; for(int i = 0; i < inv.getContainerSize(); i++) { diff --git a/src/main/java/vazkii/psi/common/entity/EntitySpellCircle.java b/src/main/java/vazkii/psi/common/entity/EntitySpellCircle.java index 8f022a3f..2146a122 100644 --- a/src/main/java/vazkii/psi/common/entity/EntitySpellCircle.java +++ b/src/main/java/vazkii/psi/common/entity/EntitySpellCircle.java @@ -10,6 +10,7 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; @@ -172,7 +173,7 @@ public void tick() { } } - if(level.isClientSide) { + if(level().isClientSide) { ItemStack colorizer = entityData.get(COLORIZER_DATA); int colorVal = Psi.proxy.getColorForColorizer(colorizer); @@ -223,7 +224,7 @@ public boolean isIgnoringBlockTriggers() { @Nonnull @Override - public Packet getAddEntityPacket() { + public Packet getAddEntityPacket() { return NetworkHooks.getEntitySpawningPacket(this); } } diff --git a/src/main/java/vazkii/psi/common/item/ItemVectorRuler.java b/src/main/java/vazkii/psi/common/item/ItemVectorRuler.java index 2ad493ee..ec140f00 100644 --- a/src/main/java/vazkii/psi/common/item/ItemVectorRuler.java +++ b/src/main/java/vazkii/psi/common/item/ItemVectorRuler.java @@ -12,6 +12,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; import net.minecraft.world.InteractionResult; @@ -101,11 +102,11 @@ public static Vector3 getRulerVector(Player player) { @Override @OnlyIn(Dist.CLIENT) - public void drawHUD(PoseStack ms, float partTicks, int screenWidth, int screenHeight, ItemStack stack) { + public void drawHUD(GuiGraphics graphics, float partTicks, int screenWidth, int screenHeight, ItemStack stack) { String s = getVector(stack).toString(); Font font = Minecraft.getInstance().font; int w = font.width(s); - font.draw(ms, s, screenWidth / 2f - w / 2f, screenHeight / 2f + 10, 0xFFFFFFFF); + graphics.drawString(font, s, screenWidth / 2f - w / 2f, screenHeight / 2f + 10, 0xFFFFFFFF, false); } } diff --git a/src/main/java/vazkii/psi/common/item/base/IHUDItem.java b/src/main/java/vazkii/psi/common/item/base/IHUDItem.java index cbb0679a..c84045f8 100644 --- a/src/main/java/vazkii/psi/common/item/base/IHUDItem.java +++ b/src/main/java/vazkii/psi/common/item/base/IHUDItem.java @@ -10,6 +10,7 @@ import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.world.item.ItemStack; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -17,6 +18,6 @@ public interface IHUDItem { @OnlyIn(Dist.CLIENT) - void drawHUD(PoseStack ms, float partTicks, int screenWidth, int screenHeight, ItemStack stack); + void drawHUD(GuiGraphics graphics, float partTicks, int screenWidth, int screenHeight, ItemStack stack); } diff --git a/src/main/java/vazkii/psi/common/lib/LibResources.java b/src/main/java/vazkii/psi/common/lib/LibResources.java index 772ee681..ebeaa620 100644 --- a/src/main/java/vazkii/psi/common/lib/LibResources.java +++ b/src/main/java/vazkii/psi/common/lib/LibResources.java @@ -15,6 +15,8 @@ public class LibResources { public static final String PREFIX_MOD = "psi:"; public static final ResourceLocation PATCHOULI_BOOK = new ResourceLocation(LibMisc.MOD_ID, "encyclopaedia_psionica"); + public static final ResourceLocation PSI_DAMAGE_TYPE = new ResourceLocation(LibMisc.MOD_ID, "psi_overload"); + public static final String PREFIX_GUI = PREFIX_MOD + "textures/gui/"; public static final String PREFIX_MODEL = PREFIX_MOD + "textures/model/"; public static final String PREFIX_MISC = PREFIX_MOD + "textures/misc/"; diff --git a/src/main/java/vazkii/psi/common/lib/ModTags.java b/src/main/java/vazkii/psi/common/lib/ModTags.java index 84df977a..ec5143fd 100644 --- a/src/main/java/vazkii/psi/common/lib/ModTags.java +++ b/src/main/java/vazkii/psi/common/lib/ModTags.java @@ -9,10 +9,13 @@ package vazkii.psi.common.lib; import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; +import net.minecraft.world.damagesource.DamageType; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; +import net.minecraftforge.registries.ForgeRegistries; public class ModTags { @@ -32,12 +35,17 @@ public class ModTags { public static final TagKey INGOT_IVORY_PSIMETAL = forgeTag("ingots/ivory_psimetal"); public static final TagKey BLOCK_IVORY_PSIMETAL = forgeTag("storage_blocks/ivory_psimetal"); + public static final TagKey PSI_OVERLOAD = damageTag(LibResources.PSI_DAMAGE_TYPE); + private static TagKey damageTag(ResourceLocation rl) { + return TagKey.create(Registries.DAMAGE_TYPE, rl); + } + private static TagKey tag(String name) { - return TagKey.create(Registry.ITEM_REGISTRY, prefix(name)); + return TagKey.create(Registries.ITEM, prefix(name)); } private static TagKey forgeTag(String name) { - return TagKey.create(Registry.ITEM_REGISTRY, new ResourceLocation("forge", name)); + return TagKey.create(Registries.ITEM, new ResourceLocation("forge", name)); } public static ResourceLocation prefix(String path) { @@ -51,7 +59,7 @@ public static class Blocks { public static final TagKey BLOCK_IVORY_PSIMETAL = fromTag(ModTags.BLOCK_IVORY_PSIMETAL); private static TagKey fromTag(TagKey tag) { - return TagKey.create(Registry.BLOCK_REGISTRY, tag.location()); + return TagKey.create(Registries.BLOCK, tag.location()); } } } diff --git a/src/main/java/vazkii/psi/common/spell/other/PieceConnector.java b/src/main/java/vazkii/psi/common/spell/other/PieceConnector.java index 7f49d097..debeb4ef 100644 --- a/src/main/java/vazkii/psi/common/spell/other/PieceConnector.java +++ b/src/main/java/vazkii/psi/common/spell/other/PieceConnector.java @@ -10,7 +10,6 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.math.Matrix4f; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.resources.model.Material; @@ -19,6 +18,8 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import org.joml.Matrix4f; + import vazkii.psi.api.ClientPsiAPI; import vazkii.psi.api.spell.EnumPieceType; import vazkii.psi.api.spell.IRedirector; diff --git a/src/main/java/vazkii/psi/common/spell/other/PieceCrossConnector.java b/src/main/java/vazkii/psi/common/spell/other/PieceCrossConnector.java index acd05f75..803c12f7 100644 --- a/src/main/java/vazkii/psi/common/spell/other/PieceCrossConnector.java +++ b/src/main/java/vazkii/psi/common/spell/other/PieceCrossConnector.java @@ -10,7 +10,6 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.math.Matrix4f; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.resources.model.Material; @@ -19,6 +18,8 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import org.joml.Matrix4f; + import vazkii.psi.api.ClientPsiAPI; import vazkii.psi.api.internal.PsiRenderHelper; import vazkii.psi.api.spell.EnumPieceType; diff --git a/src/main/java/vazkii/psi/common/spell/trick/PieceTrickTorrent.java b/src/main/java/vazkii/psi/common/spell/trick/PieceTrickTorrent.java index b3cc7328..bc2135e9 100644 --- a/src/main/java/vazkii/psi/common/spell/trick/PieceTrickTorrent.java +++ b/src/main/java/vazkii/psi/common/spell/trick/PieceTrickTorrent.java @@ -15,10 +15,10 @@ import net.minecraft.sounds.SoundSource; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.LiquidBlockContainer; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Fluids; -import net.minecraft.world.level.material.Material; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.util.BlockSnapshot; import net.minecraftforge.event.level.BlockEvent; @@ -80,7 +80,6 @@ public static boolean placeWater(@Nullable Player playerIn, Level worldIn, Block return false; } BlockState blockstate = worldIn.getBlockState(pos); - Material material = blockstate.getMaterial(); boolean flag = blockstate.canBeReplaced(Fluids.WATER); if(blockstate.isAir() || flag || blockstate.getBlock() instanceof LiquidBlockContainer && ((LiquidBlockContainer) blockstate.getBlock()).canPlaceLiquid(worldIn, pos, blockstate, Fluids.WATER)) { if(worldIn.dimensionType().ultraWarm()) { @@ -97,7 +96,7 @@ public static boolean placeWater(@Nullable Player playerIn, Level worldIn, Block worldIn.playSound(playerIn, pos, SoundEvents.BUCKET_EMPTY, SoundSource.BLOCKS, 1.0F, 1.0F); } } else { - if(!worldIn.isClientSide && flag && !material.isLiquid()) { + if(!worldIn.isClientSide && flag && !isLiquid(blockstate)) { worldIn.destroyBlock(pos, true); } @@ -110,4 +109,7 @@ public static boolean placeWater(@Nullable Player playerIn, Level worldIn, Block return false; } + private static boolean isLiquid(BlockState pState) { + return pState == Blocks.WATER.defaultBlockState() || pState == Blocks.LAVA.defaultBlockState(); + } } diff --git a/src/main/java/vazkii/psi/data/DataGenerator.java b/src/main/java/vazkii/psi/data/DataGenerator.java index d3481308..f79778f5 100644 --- a/src/main/java/vazkii/psi/data/DataGenerator.java +++ b/src/main/java/vazkii/psi/data/DataGenerator.java @@ -23,10 +23,11 @@ public static void gatherData(GatherDataEvent event) { ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); if(event.includeServer()) { - PsiBlockTagProvider blockTagProvider = new PsiBlockTagProvider(event.getGenerator(), existingFileHelper); + PsiBlockTagProvider blockTagProvider = new PsiBlockTagProvider(event.getGenerator().getPackOutput(), event.getLookupProvider(), existingFileHelper); event.getGenerator().addProvider(true, blockTagProvider); + event.getGenerator().addProvider(true, new PsiDamageTypeTagsProvider(event.getGenerator().getPackOutput(), event.getLookupProvider(), existingFileHelper)); event.getGenerator().addProvider(true, new PsiItemTagProvider(event.getGenerator(), blockTagProvider, existingFileHelper)); - event.getGenerator().addProvider(true, new PsiRecipeGenerator(event.getGenerator())); + event.getGenerator().addProvider(true, new PsiRecipeGenerator(event.getGenerator().getPackOutput())); event.getGenerator().addProvider(true, new PsiTrickRecipeGenerator(event.getGenerator())); } diff --git a/src/main/java/vazkii/psi/data/PsiBlockTagProvider.java b/src/main/java/vazkii/psi/data/PsiBlockTagProvider.java index 76706bb8..a5618320 100644 --- a/src/main/java/vazkii/psi/data/PsiBlockTagProvider.java +++ b/src/main/java/vazkii/psi/data/PsiBlockTagProvider.java @@ -8,23 +8,31 @@ */ package vazkii.psi.data; -import net.minecraft.data.DataGenerator; -import net.minecraft.data.tags.BlockTagsProvider; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; import net.minecraftforge.common.Tags; +import net.minecraftforge.common.data.BlockTagsProvider; import net.minecraftforge.common.data.ExistingFileHelper; import vazkii.psi.common.block.base.ModBlocks; import vazkii.psi.common.lib.LibMisc; import vazkii.psi.common.lib.ModTags; +import java.util.concurrent.CompletableFuture; + public class PsiBlockTagProvider extends BlockTagsProvider { - public PsiBlockTagProvider(DataGenerator dataGenerator, ExistingFileHelper existingFileHelper) { - super(dataGenerator, LibMisc.MOD_ID, existingFileHelper); + public PsiBlockTagProvider(PackOutput output, CompletableFuture lookupProvider, ExistingFileHelper existingFileHelper) { + super(output, lookupProvider, LibMisc.MOD_ID, existingFileHelper); + } + + @Override + public String getName() { + return "Psi block tags"; } @Override - protected void addTags() { + protected void addTags(HolderLookup.Provider pProvider) { tag(ModTags.Blocks.BLOCK_PSIMETAL).add(ModBlocks.psimetalBlock); tag(ModTags.Blocks.BLOCK_PSIGEM).add(ModBlocks.psigemBlock); tag(ModTags.Blocks.BLOCK_EBONY_PSIMETAL).add(ModBlocks.psimetalEbony); @@ -35,9 +43,4 @@ protected void addTags() { tag(Tags.Blocks.STORAGE_BLOCKS).add(ModBlocks.psimetalEbony); tag(Tags.Blocks.STORAGE_BLOCKS).add(ModBlocks.psimetalIvory); } - - @Override - public String getName() { - return "Psi block tags"; - } } diff --git a/src/main/java/vazkii/psi/data/PsiDamageTypeTagsProvider.java b/src/main/java/vazkii/psi/data/PsiDamageTypeTagsProvider.java new file mode 100644 index 00000000..510ff0ea --- /dev/null +++ b/src/main/java/vazkii/psi/data/PsiDamageTypeTagsProvider.java @@ -0,0 +1,34 @@ +package vazkii.psi.data; + +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraft.data.tags.DamageTypeTagsProvider; +import net.minecraft.tags.DamageTypeTags; +import net.minecraftforge.common.data.ExistingFileHelper; + +import vazkii.psi.common.lib.LibMisc; +import vazkii.psi.common.lib.ModTags; + +import java.util.concurrent.CompletableFuture; + +public class PsiDamageTypeTagsProvider extends DamageTypeTagsProvider { + + public PsiDamageTypeTagsProvider(PackOutput pOutput, CompletableFuture pLookupProvider, ExistingFileHelper existingFileHelper) { + super(pOutput, pLookupProvider, LibMisc.MOD_ID, existingFileHelper); + } + + @Override + protected void addTags(HolderLookup.Provider pProvider) { + this.tag(DamageTypeTags.BYPASSES_ARMOR).addTag(ModTags.PSI_OVERLOAD); + this.tag(DamageTypeTags.BYPASSES_SHIELD).addTag(ModTags.PSI_OVERLOAD); + this.tag(DamageTypeTags.BYPASSES_RESISTANCE).addTag(ModTags.PSI_OVERLOAD); + this.tag(DamageTypeTags.BYPASSES_EFFECTS).addTag(ModTags.PSI_OVERLOAD); + this.tag(DamageTypeTags.BYPASSES_ENCHANTMENTS).addTag(ModTags.PSI_OVERLOAD); + } + + + @Override + public String getName() { + return "Psi damage type tags"; + } +} diff --git a/src/main/java/vazkii/psi/data/PsiRecipeGenerator.java b/src/main/java/vazkii/psi/data/PsiRecipeGenerator.java index 786325b7..50ed301a 100644 --- a/src/main/java/vazkii/psi/data/PsiRecipeGenerator.java +++ b/src/main/java/vazkii/psi/data/PsiRecipeGenerator.java @@ -9,9 +9,9 @@ package vazkii.psi.data; import net.minecraft.advancements.CriterionTriggerInstance; -import net.minecraft.core.Registry; -import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.data.recipes.RecipeCategory; import net.minecraft.data.recipes.RecipeProvider; import net.minecraft.data.recipes.ShapedRecipeBuilder; import net.minecraft.data.recipes.ShapelessRecipeBuilder; @@ -21,14 +21,20 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.crafting.Ingredient; -import net.minecraft.world.item.crafting.SimpleRecipeSerializer; +import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; import net.minecraftforge.common.Tags; import net.minecraftforge.common.crafting.conditions.IConditionBuilder; import net.minecraftforge.registries.ForgeRegistries; import vazkii.psi.common.Psi; import vazkii.psi.common.block.base.ModBlocks; -import vazkii.psi.common.crafting.recipe.*; +import vazkii.psi.common.crafting.recipe.AssemblyScavengeRecipe; +import vazkii.psi.common.crafting.recipe.BulletToDriveRecipe; +import vazkii.psi.common.crafting.recipe.BulletUpgradeRecipe; +import vazkii.psi.common.crafting.recipe.ColorizerChangeRecipe; +import vazkii.psi.common.crafting.recipe.DriveDuplicateRecipe; +import vazkii.psi.common.crafting.recipe.SensorAttachRecipe; +import vazkii.psi.common.crafting.recipe.SensorRemoveRecipe; import vazkii.psi.common.item.base.ModItems; import vazkii.psi.common.lib.LibItemNames; import vazkii.psi.common.lib.ModTags; @@ -38,12 +44,11 @@ public class PsiRecipeGenerator extends RecipeProvider implements IConditionBuilder { - public PsiRecipeGenerator(DataGenerator generator) { - super(generator); + public PsiRecipeGenerator(PackOutput output) { + super(output); } - @Override - protected void buildCraftingRecipes(Consumer consumer) { + protected void buildRecipes(Consumer consumer) { specialRecipe(AssemblyScavengeRecipe.SERIALIZER, consumer); specialRecipe(BulletToDriveRecipe.SERIALIZER, consumer); specialRecipe(ColorizerChangeRecipe.SERIALIZER, consumer); @@ -57,7 +62,7 @@ protected void buildCraftingRecipes(Consumer consumer) { CriterionTriggerInstance hasIvoryPsimetal = has(ModTags.INGOT_IVORY_PSIMETAL); CriterionTriggerInstance hasPsidust = has(ModTags.PSIDUST); - ShapedRecipeBuilder.shaped(ModBlocks.cadAssembler) + ShapedRecipeBuilder.shaped(RecipeCategory.MISC,ModBlocks.cadAssembler) .define('I', Tags.Items.INGOTS_IRON) .define('P', Items.PISTON) .pattern("IPI") @@ -65,7 +70,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern(" I ") .unlockedBy("has_iron", hasIron) .save(consumer, Psi.location("assembler")); - ShapedRecipeBuilder.shaped(ModBlocks.programmer) + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModBlocks.programmer) .define('I', Tags.Items.INGOTS_IRON) .define('D', ModTags.PSIDUST) .pattern("IDI") @@ -73,7 +78,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern(" I ") .unlockedBy("has_psidust", hasPsidust) .save(consumer, Psi.location("programmer")); - ShapedRecipeBuilder.shaped(ModItems.ebonyPsimetal) + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.ebonyPsimetal) .define('S', ModTags.EBONY_SUBSTANCE) .define('I', ModTags.INGOT_PSIMETAL) .pattern("SSS") @@ -81,7 +86,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern("SSS") .unlockedBy("has_ebony_substance", has(ModItems.ebonySubstance)) .save(consumer, Psi.location("ebony_psimetal")); - ShapedRecipeBuilder.shaped(ModItems.ivoryPsimetal) + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.ivoryPsimetal) .define('S', ModTags.IVORY_SUBSTANCE) .define('I', ModTags.INGOT_PSIMETAL) .pattern("SSS") @@ -89,37 +94,37 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern("SSS") .unlockedBy("has_ivory_substance", has(ModItems.ivorySubstance)) .save(consumer, Psi.location("ivory_psimetal")); - ShapedRecipeBuilder.shaped(ModItems.cadAssemblyIron) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, ModItems.cadAssemblyIron) .define('I', Tags.Items.INGOTS_IRON) .pattern("III") .pattern("I ") .unlockedBy("has_iron", hasIron) .save(consumer, Psi.location("cad_assembly_iron")); - ShapedRecipeBuilder.shaped(ModItems.cadAssemblyGold) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, ModItems.cadAssemblyGold) .define('I', Tags.Items.INGOTS_GOLD) .pattern("III") .pattern("I ") .unlockedBy("has_gold", has(Tags.Items.INGOTS_GOLD)) .save(consumer, Psi.location("cad_assembly_gold")); - ShapedRecipeBuilder.shaped(ModItems.cadAssemblyPsimetal) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.cadAssemblyPsimetal) .define('I', ModTags.INGOT_PSIMETAL) .pattern("III") .pattern("I ") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("cad_assembly_psimetal")); - ShapedRecipeBuilder.shaped(ModItems.cadAssemblyEbony) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.cadAssemblyEbony) .define('I', ModTags.INGOT_EBONY_PSIMETAL) .pattern("III") .pattern("I ") .unlockedBy("has_ebony_psimetal", hasEbonyPsimetal) .save(consumer, Psi.location("cad_assembly_ebony")); - ShapedRecipeBuilder.shaped(ModItems.cadAssemblyIvory) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.cadAssemblyIvory) .define('I', ModTags.INGOT_IVORY_PSIMETAL) .pattern("III") .pattern("I ") .unlockedBy("has_ivory_psimetal", hasIvoryPsimetal) .save(consumer, Psi.location("cad_assembly_ivory")); - ShapedRecipeBuilder.shaped(ModItems.cadCoreBasic) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.cadCoreBasic) .define('I', Tags.Items.INGOTS_IRON) .define('D', ModTags.PSIDUST) .pattern(" I ") @@ -127,7 +132,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern(" I ") .unlockedBy("has_psidust", hasPsidust) .save(consumer, Psi.location("cad_core_basic")); - ShapedRecipeBuilder.shaped(ModItems.cadCoreOverclocked) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.cadCoreOverclocked) .define('I', ModTags.INGOT_PSIMETAL) .define('D', Tags.Items.DUSTS_REDSTONE) .pattern(" I ") @@ -135,7 +140,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern(" I ") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("cad_core_overclocked")); - ShapedRecipeBuilder.shaped(ModItems.cadCoreConductive) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.cadCoreConductive) .define('I', ModTags.INGOT_PSIMETAL) .define('D', Tags.Items.DUSTS_GLOWSTONE) .pattern(" I ") @@ -143,7 +148,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern(" I ") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("cad_core_conductive")); - ShapedRecipeBuilder.shaped(ModItems.cadCoreHyperClocked) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.cadCoreHyperClocked) .define('I', ModTags.INGOT_PSIMETAL) .define('D', Tags.Items.DUSTS_REDSTONE) .define('G', ModTags.GEM_PSIGEM) @@ -152,7 +157,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern(" G ") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("cad_core_hyperclocked")); - ShapedRecipeBuilder.shaped(ModItems.cadCoreRadiative) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.cadCoreRadiative) .define('I', ModTags.INGOT_PSIMETAL) .define('D', Tags.Items.DUSTS_GLOWSTONE) .define('G', ModTags.GEM_PSIGEM) @@ -161,28 +166,28 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern(" G ") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("cad_core_radiative")); - ShapedRecipeBuilder.shaped(ModItems.cadSocketBasic) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.cadSocketBasic) .define('I', Tags.Items.INGOTS_IRON) .define('D', ModTags.PSIDUST) .pattern("DI ") .pattern("I ") .unlockedBy("has_psidust", hasPsidust) .save(consumer, Psi.location("cad_socket_basic")); - ShapedRecipeBuilder.shaped(ModItems.cadSocketSignaling) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.cadSocketSignaling) .define('I', ModTags.INGOT_PSIMETAL) .define('D', Tags.Items.DUSTS_REDSTONE) .pattern("DI ") .pattern("I ") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("cad_socket_signaling")); - ShapedRecipeBuilder.shaped(ModItems.cadSocketLarge) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.cadSocketLarge) .define('I', ModTags.INGOT_PSIMETAL) .define('D', Tags.Items.DUSTS_GLOWSTONE) .pattern("DI ") .pattern("I ") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("cad_socket_large")); - ShapedRecipeBuilder.shaped(ModItems.cadSocketTransmissive) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.cadSocketTransmissive) .define('I', ModTags.INGOT_PSIMETAL) .define('D', Tags.Items.DUSTS_REDSTONE) .define('G', ModTags.GEM_PSIGEM) @@ -190,7 +195,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern("IG ") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("cad_socket_transmissive")); - ShapedRecipeBuilder.shaped(ModItems.cadSocketHuge) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.cadSocketHuge) .define('I', ModTags.INGOT_PSIMETAL) .define('D', Tags.Items.DUSTS_GLOWSTONE) .define('G', ModTags.GEM_PSIGEM) @@ -198,7 +203,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern("IG ") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("cad_socket_huge")); - ShapedRecipeBuilder.shaped(ModItems.cadBatteryBasic) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.cadBatteryBasic) .define('I', Tags.Items.INGOTS_IRON) .define('D', ModTags.PSIDUST) .define('G', Tags.Items.INGOTS_GOLD) @@ -207,7 +212,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern("G") .unlockedBy("has_psidust", hasPsidust) .save(consumer, Psi.location("cad_battery_basic")); - ShapedRecipeBuilder.shaped(ModItems.cadBatteryExtended) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.cadBatteryExtended) .define('I', Tags.Items.INGOTS_IRON) .define('D', ModTags.INGOT_PSIMETAL) .define('G', Tags.Items.INGOTS_GOLD) @@ -216,7 +221,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern("G") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("cad_battery_extended")); - ShapedRecipeBuilder.shaped(ModItems.cadBatteryUltradense) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.cadBatteryUltradense) .define('I', Tags.Items.INGOTS_IRON) .define('D', ModTags.GEM_PSIGEM) .define('G', Tags.Items.INGOTS_GOLD) @@ -227,7 +232,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .save(consumer, Psi.location("cad_battery_ultradense")); for(DyeColor color : DyeColor.values()) { - ShapedRecipeBuilder.shaped(Registry.ITEM.get(Psi.location(LibItemNames.CAD_COLORIZER + color.getSerializedName()))) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, ForgeRegistries.ITEMS.getDelegateOrThrow(Psi.location(LibItemNames.CAD_COLORIZER + color.getSerializedName())).get()) .group("psi:colorizer") .define('D', ModTags.PSIDUST) .define('I', Tags.Items.INGOTS_IRON) @@ -240,7 +245,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .save(consumer, Psi.location(LibItemNames.CAD_COLORIZER + color.getSerializedName())); } - ShapedRecipeBuilder.shaped(ModItems.cadColorizerRainbow) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.cadColorizerRainbow) .group("psi:colorizer") .define('D', ModTags.PSIDUST) .define('I', Tags.Items.INGOTS_IRON) @@ -251,7 +256,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern(" I ") .unlockedBy("has_psidust", hasPsidust) .save(consumer, Psi.location("cad_colorizer_rainbow")); - ShapedRecipeBuilder.shaped(ModItems.cadColorizerPsi) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.cadColorizerPsi) .group("psi:colorizer") .define('D', ModTags.PSIDUST) .define('I', Tags.Items.INGOTS_IRON) @@ -263,38 +268,38 @@ protected void buildCraftingRecipes(Consumer consumer) { .unlockedBy("has_psidust", hasPsidust) .save(consumer, Psi.location("cad_colorizer_psi")); - ShapedRecipeBuilder.shaped(ModItems.spellBullet) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.spellBullet) .define('I', Tags.Items.INGOTS_IRON) .define('D', ModTags.PSIDUST) .pattern("ID") .unlockedBy("has_psidust", hasPsidust) .save(consumer, Psi.location("spell_bullet_basic")); - ShapedRecipeBuilder.shaped(ModItems.projectileSpellBullet) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.projectileSpellBullet) .define('I', Tags.Items.INGOTS_IRON) .define('D', ModTags.PSIDUST) .define('A', ItemTags.ARROWS) .pattern("AID") .unlockedBy("has_psidust", hasPsidust) .save(consumer, Psi.location("spell_bullet_projectile")); - ShapelessRecipeBuilder.shapeless(ModItems.projectileSpellBullet) + ShapelessRecipeBuilder.shapeless(RecipeCategory.TOOLS,ModItems.projectileSpellBullet) .requires(ModItems.spellBullet) .requires(ItemTags.ARROWS) .unlockedBy("has_psidust", has(ModItems.psidust)) .save(WrapperResult.ofType(BulletUpgradeRecipe.SERIALIZER, consumer), Psi.location("spell_bullet_projectile_upgrade")); - ShapedRecipeBuilder.shaped(ModItems.loopSpellBullet) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.loopSpellBullet) .define('I', Tags.Items.INGOTS_IRON) .define('D', ModTags.PSIDUST) .define('A', Tags.Items.STRING) .pattern("AID") .unlockedBy("has_psidust", hasPsidust) .save(consumer, Psi.location("spell_bullet_loopcast")); - ShapelessRecipeBuilder.shapeless(ModItems.loopSpellBullet) + ShapelessRecipeBuilder.shapeless(RecipeCategory.TOOLS,ModItems.loopSpellBullet) .requires(ModItems.spellBullet) .requires(Tags.Items.STRING) .unlockedBy("has_psidust", has(ModItems.psidust)) .save(WrapperResult.ofType(BulletUpgradeRecipe.SERIALIZER, consumer), Psi.location("spell_bullet_loopcast_upgrade")); - ShapedRecipeBuilder.shaped(ModItems.circleSpellBullet) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.circleSpellBullet) .define('I', Tags.Items.INGOTS_IRON) .define('D', ModTags.PSIDUST) .define('A', Ingredient.fromValues(Stream.of( @@ -303,51 +308,51 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern("AID") .unlockedBy("has_psidust", hasPsidust) .save(consumer, Psi.location("spell_bullet_circle")); - ShapelessRecipeBuilder.shapeless(ModItems.circleSpellBullet) + ShapelessRecipeBuilder.shapeless(RecipeCategory.TOOLS,ModItems.circleSpellBullet) .requires(ModItems.spellBullet) .requires(Ingredient.fromValues(Stream.of( new Ingredient.TagValue(Tags.Items.SLIMEBALLS), new Ingredient.ItemValue(new ItemStack(Items.SNOWBALL))))) .unlockedBy("has_psidust", has(ModItems.psidust)) .save(WrapperResult.ofType(BulletUpgradeRecipe.SERIALIZER, consumer), Psi.location("spell_bullet_circle_upgrade")); - ShapedRecipeBuilder.shaped(ModItems.grenadeSpellBullet) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.grenadeSpellBullet) .define('I', Tags.Items.INGOTS_IRON) .define('D', ModTags.PSIDUST) .define('A', Tags.Items.GUNPOWDER) .pattern("AID") .unlockedBy("has_psidust", hasPsidust) .save(consumer, Psi.location("spell_bullet_grenade")); - ShapelessRecipeBuilder.shapeless(ModItems.grenadeSpellBullet) + ShapelessRecipeBuilder.shapeless(RecipeCategory.TOOLS,ModItems.grenadeSpellBullet) .requires(ModItems.spellBullet) .requires(Tags.Items.GUNPOWDER) .unlockedBy("has_psidust", has(ModItems.psidust)) .save(WrapperResult.ofType(BulletUpgradeRecipe.SERIALIZER, consumer), Psi.location("spell_bullet_grenade_upgrade")); - ShapedRecipeBuilder.shaped(ModItems.chargeSpellBullet) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.chargeSpellBullet) .define('I', Tags.Items.INGOTS_IRON) .define('D', ModTags.PSIDUST) .define('A', Tags.Items.DUSTS_REDSTONE) .pattern("AID") .unlockedBy("has_psidust", hasPsidust) .save(consumer, Psi.location("spell_bullet_charge")); - ShapelessRecipeBuilder.shapeless(ModItems.chargeSpellBullet) + ShapelessRecipeBuilder.shapeless(RecipeCategory.TOOLS,ModItems.chargeSpellBullet) .requires(ModItems.spellBullet) .requires(Tags.Items.DUSTS_REDSTONE) .unlockedBy("has_psidust", has(ModItems.psidust)) .save(WrapperResult.ofType(BulletUpgradeRecipe.SERIALIZER, consumer), Psi.location("spell_bullet_charge_upgrade")); - ShapedRecipeBuilder.shaped(ModItems.mineSpellBullet) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.mineSpellBullet) .define('I', Tags.Items.INGOTS_IRON) .define('D', ModTags.PSIDUST) .define('A', ItemTags.BUTTONS) .pattern("AID") .unlockedBy("has_psidust", hasPsidust) .save(consumer, Psi.location("spell_bullet_mine")); - ShapelessRecipeBuilder.shapeless(ModItems.mineSpellBullet) + ShapelessRecipeBuilder.shapeless(RecipeCategory.TOOLS,ModItems.mineSpellBullet) .requires(ModItems.spellBullet) .requires(ItemTags.BUTTONS) .unlockedBy("has_psidust", has(ModItems.psidust)) .save(WrapperResult.ofType(BulletUpgradeRecipe.SERIALIZER, consumer), Psi.location("spell_bullet_mine_upgrade")); - ShapedRecipeBuilder.shaped(ModItems.spellDrive) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.spellDrive) .define('I', ModTags.INGOT_PSIMETAL) .define('R', Tags.Items.DUSTS_REDSTONE) .pattern("I") @@ -355,7 +360,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern("I") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("spell_drive")); - ShapedRecipeBuilder.shaped(ModItems.psimetalShovel) + ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT,ModItems.psimetalShovel) .define('P', ModTags.INGOT_PSIMETAL) .define('G', ModTags.GEM_PSIGEM) .define('I', Tags.Items.INGOTS_IRON) @@ -364,7 +369,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern(" I") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("psimetal_shovel")); - ShapedRecipeBuilder.shaped(ModItems.psimetalPickaxe) + ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT,ModItems.psimetalPickaxe) .define('P', ModTags.INGOT_PSIMETAL) .define('G', ModTags.GEM_PSIGEM) .define('I', Tags.Items.INGOTS_IRON) @@ -373,7 +378,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern(" I ") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("psimetal_pickaxe")); - ShapedRecipeBuilder.shaped(ModItems.psimetalAxe) + ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT,ModItems.psimetalAxe) .define('P', ModTags.INGOT_PSIMETAL) .define('G', ModTags.GEM_PSIGEM) .define('I', Tags.Items.INGOTS_IRON) @@ -382,7 +387,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern(" I") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("psimetal_axe")); - ShapedRecipeBuilder.shaped(ModItems.psimetalSword) + ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT,ModItems.psimetalSword) .define('P', ModTags.INGOT_PSIMETAL) .define('G', ModTags.GEM_PSIGEM) .define('I', Tags.Items.INGOTS_IRON) @@ -391,14 +396,14 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern("I") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("psimetal_sword")); - ShapedRecipeBuilder.shaped(ModItems.psimetalExosuitHelmet) + ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, ModItems.psimetalExosuitHelmet) .define('P', ModTags.INGOT_PSIMETAL) .define('G', ModTags.GEM_PSIGEM) .pattern("GPG") .pattern("P P") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("psimetal_exosuit_helmet")); - ShapedRecipeBuilder.shaped(ModItems.psimetalExosuitChestplate) + ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, ModItems.psimetalExosuitChestplate) .define('P', ModTags.INGOT_PSIMETAL) .define('G', ModTags.GEM_PSIGEM) .pattern("P P") @@ -406,7 +411,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern("PPP") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("psimetal_exosuit_chestplate")); - ShapedRecipeBuilder.shaped(ModItems.psimetalExosuitLeggings) + ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, ModItems.psimetalExosuitLeggings) .define('P', ModTags.INGOT_PSIMETAL) .define('G', ModTags.GEM_PSIGEM) .pattern("GPG") @@ -414,14 +419,14 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern("P P") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("psimetal_exosuit_leggings")); - ShapedRecipeBuilder.shaped(ModItems.psimetalExosuitBoots) + ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, ModItems.psimetalExosuitBoots) .define('P', ModTags.INGOT_PSIMETAL) .define('G', ModTags.GEM_PSIGEM) .pattern("G G") .pattern("P P") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("psimetal_exosuit_boots")); - ShapedRecipeBuilder.shaped(ModItems.detonator) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, ModItems.detonator) .define('P', ModTags.PSIDUST) .define('B', ItemTags.BUTTONS) .define('I', Tags.Items.INGOTS_IRON) @@ -429,7 +434,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern("IPI") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("detonator")); - ShapedRecipeBuilder.shaped(ModItems.exosuitController) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, ModItems.exosuitController) .define('R', Tags.Items.DUSTS_REDSTONE) .define('G', Tags.Items.GLASS) .define('I', ModTags.INGOT_PSIMETAL) @@ -438,7 +443,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern("I") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("exosuit_controller")); - ShapedRecipeBuilder.shaped(ModItems.vectorRuler) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.vectorRuler) .define('D', ModTags.PSIDUST) .define('I', Tags.Items.INGOTS_IRON) .pattern("D") @@ -446,7 +451,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern("I") .unlockedBy("has_psidust", hasPsidust) .save(consumer, Psi.location("vector_ruler")); - ShapedRecipeBuilder.shaped(ModItems.exosuitSensorLight) + ShapedRecipeBuilder.shaped(RecipeCategory.MISC,ModItems.exosuitSensorLight) .define('M', Tags.Items.DUSTS_GLOWSTONE) .define('R', Tags.Items.INGOTS_IRON) .define('I', ModTags.INGOT_PSIMETAL) @@ -455,7 +460,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern(" R ") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("exosuit_sensor_light")); - ShapedRecipeBuilder.shaped(ModItems.exosuitSensorWater) + ShapedRecipeBuilder.shaped(RecipeCategory.MISC,ModItems.exosuitSensorWater) .define('M', Tags.Items.GEMS_PRISMARINE) .define('R', Tags.Items.INGOTS_IRON) .define('I', ModTags.INGOT_PSIMETAL) @@ -464,7 +469,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern(" R ") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("exosuit_sensor_water")); - ShapedRecipeBuilder.shaped(ModItems.exosuitSensorHeat) + ShapedRecipeBuilder.shaped(RecipeCategory.MISC,ModItems.exosuitSensorHeat) .define('M', Items.FIRE_CHARGE) .define('R', Tags.Items.INGOTS_IRON) .define('I', ModTags.INGOT_PSIMETAL) @@ -473,7 +478,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern(" R ") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("exosuit_sensor_heat")); - ShapedRecipeBuilder.shaped(ModItems.exosuitSensorStress) + ShapedRecipeBuilder.shaped(RecipeCategory.MISC,ModItems.exosuitSensorStress) .define('M', Items.GLISTERING_MELON_SLICE) .define('R', Tags.Items.INGOTS_IRON) .define('I', ModTags.INGOT_PSIMETAL) @@ -482,7 +487,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern(" R ") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("exosuit_sensor_stress")); - ShapedRecipeBuilder.shaped(ModItems.exosuitSensorTrigger) + ShapedRecipeBuilder.shaped(RecipeCategory.MISC,ModItems.exosuitSensorTrigger) .define('M', Items.GUNPOWDER) .define('R', Tags.Items.INGOTS_IRON) .define('I', ModTags.INGOT_PSIMETAL) @@ -491,7 +496,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern(" R ") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("exosuit_sensor_trigger")); - ShapedRecipeBuilder.shaped(ModItems.cadColorizerEmpty) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS,ModItems.cadColorizerEmpty) .define('D', ModTags.PSIDUST) .define('G', Tags.Items.GLASS) .define('I', Tags.Items.INGOTS_IRON) @@ -500,62 +505,62 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern(" I ") .unlockedBy("has_psidust", hasPsidust) .save(consumer, Psi.location("cad_colorizer_empty")); - ShapedRecipeBuilder.shaped(ModBlocks.psidustBlock.asItem()) + ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS,ModBlocks.psidustBlock.asItem()) .define('I', ModItems.psidust) .pattern("III") .pattern("III") .pattern("III") .unlockedBy("has_psidust", hasPsidust) .save(consumer, Psi.location("psidust_block")); - ShapedRecipeBuilder.shaped(ModBlocks.psimetalBlock.asItem()) + ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, ModBlocks.psimetalBlock.asItem()) .define('I', ModItems.psimetal) .pattern("III") .pattern("III") .pattern("III") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("psimetal_block")); - ShapedRecipeBuilder.shaped(ModBlocks.psigemBlock.asItem()) + ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, ModBlocks.psigemBlock.asItem()) .define('I', ModItems.psigem) .pattern("III") .pattern("III") .pattern("III") .unlockedBy("has_psigem", has(ModItems.psigem)) .save(consumer, Psi.location("psigem_block")); - ShapedRecipeBuilder.shaped(ModBlocks.psimetalEbony.asItem()) + ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, ModBlocks.psimetalEbony.asItem()) .define('I', ModItems.ebonyPsimetal) .pattern("III") .pattern("III") .pattern("III") .unlockedBy("has_ebony_psimetal", hasEbonyPsimetal) .save(consumer, Psi.location("ebony_block")); - ShapedRecipeBuilder.shaped(ModBlocks.psimetalIvory.asItem()) + ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, ModBlocks.psimetalIvory.asItem()) .define('I', ModItems.ivoryPsimetal) .pattern("III") .pattern("III") .pattern("III") .unlockedBy("has_ivory_psimetal", hasIvoryPsimetal) .save(consumer, Psi.location("ivory_block")); - ShapelessRecipeBuilder.shapeless(ModItems.psidust, 9) + ShapelessRecipeBuilder.shapeless(RecipeCategory.BUILDING_BLOCKS, ModItems.psidust, 9) .requires(ModBlocks.psidustBlock.asItem()) .unlockedBy("has_psidust", hasPsidust) .save(consumer, Psi.location("psidust_shapeless")); - ShapelessRecipeBuilder.shapeless(ModItems.psimetal, 9) + ShapelessRecipeBuilder.shapeless(RecipeCategory.BUILDING_BLOCKS, ModItems.psimetal, 9) .requires(ModBlocks.psimetalBlock.asItem()) .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("psimetal_shapeless")); - ShapelessRecipeBuilder.shapeless(ModItems.psigem, 9) + ShapelessRecipeBuilder.shapeless(RecipeCategory.BUILDING_BLOCKS, ModItems.psigem, 9) .requires(ModBlocks.psigemBlock.asItem()) .unlockedBy("has_psigem", has(ModItems.psigem)) .save(consumer, Psi.location("psigem_shapeless")); - ShapelessRecipeBuilder.shapeless(ModItems.ebonyPsimetal, 9) + ShapelessRecipeBuilder.shapeless(RecipeCategory.BUILDING_BLOCKS, ModItems.ebonyPsimetal, 9) .requires(ModBlocks.psimetalEbony.asItem()) .unlockedBy("has_ebony_psimetal", hasEbonyPsimetal) .save(consumer, Psi.location("ebony_ingot_shapeless")); - ShapelessRecipeBuilder.shapeless(ModItems.ivoryPsimetal, 9) + ShapelessRecipeBuilder.shapeless(RecipeCategory.BUILDING_BLOCKS, ModItems.ivoryPsimetal, 9) .requires(ModBlocks.psimetalIvory.asItem()) .unlockedBy("has_ivory_psimetal", hasIvoryPsimetal) .save(consumer, Psi.location("ivory_ingot_shapeless")); - ShapedRecipeBuilder.shaped(ModBlocks.psimetalPlateBlack.asItem()) + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, ModBlocks.psimetalPlateBlack.asItem()) .define('C', ItemTags.COALS) .define('I', ModTags.INGOT_PSIMETAL) .pattern(" C ") @@ -563,7 +568,7 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern(" C ") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("psimetal_plate_black")); - ShapedRecipeBuilder.shaped(ModBlocks.psimetalPlateWhite.asItem()) + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS,ModBlocks.psimetalPlateWhite.asItem()) .define('C', Tags.Items.GEMS_QUARTZ) .define('I', ModTags.INGOT_PSIMETAL) .pattern(" C ") @@ -571,24 +576,19 @@ protected void buildCraftingRecipes(Consumer consumer) { .pattern(" C ") .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("psimetal_plate_white")); - ShapelessRecipeBuilder.shapeless(ModBlocks.psimetalPlateBlackLight.asItem()) + ShapelessRecipeBuilder.shapeless(RecipeCategory.DECORATIONS,ModBlocks.psimetalPlateBlackLight.asItem()) .requires(Tags.Items.DUSTS_GLOWSTONE) .requires(ModBlocks.psimetalPlateBlack.asItem()) .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("psimetal_plate_black_light")); - ShapelessRecipeBuilder.shapeless(ModBlocks.psimetalPlateWhiteLight.asItem()) + ShapelessRecipeBuilder.shapeless(RecipeCategory.DECORATIONS,ModBlocks.psimetalPlateWhiteLight.asItem()) .requires(Tags.Items.DUSTS_GLOWSTONE) .requires(ModBlocks.psimetalPlateWhite.asItem()) .unlockedBy("has_psimetal", hasPsimetal) .save(consumer, Psi.location("psimetal_plate_white_light")); } - @Override - public String getName() { - return "Psi crafting recipes"; - } - - private static void specialRecipe(SimpleRecipeSerializer serializer, Consumer consumer) { + private static void specialRecipe(SimpleCraftingRecipeSerializer serializer, Consumer consumer) { SpecialRecipeBuilder.special(serializer).save(consumer, Psi.location("dynamic/" + ForgeRegistries.RECIPE_SERIALIZERS.getKey(serializer).getPath()).toString()); } diff --git a/src/main/resources/assets/psi/lang/en_us.json b/src/main/resources/assets/psi/lang/en_us.json index 1c18fb25..2740d066 100644 --- a/src/main/resources/assets/psi/lang/en_us.json +++ b/src/main/resources/assets/psi/lang/en_us.json @@ -1113,5 +1113,6 @@ "psi.book.entry.secondaryOperators": "Secondary Operators", "psi.book.page.secondaryOperators.0": "As its name implies, this group is composed of mathematical $(thing)Operators$(0) that aren't quite as important as the \"primary\" ones, like addition or subtraction. This group's just a mixed bag of all sorts of math or logic relates pieces that can be used to help with $(thing)Spell$(0) creation. We'll separate the pieces in two sets to make them easier to explain.", "psi.book.page.secondaryOperators.1": "The first set is related to raising numbers to power, including pieces like $(piece)Operator: Square$(0), $(piece)Operator: Power$(0), $(piece)Operator: Square Root$(0) and even $(piece)Operator: Logarithm$(0). Most of these operate exactly how you'd expect them to.$(p)Note that $(piece)Operator: Logarithm$(0) takes an optional Base argument; if no base is passed in, it'll default to base 10.$(p)$(piece)Constant: e$(0) can also be used to get a natural logarithm.", - "psi.book.page.secondaryOperators.2": "The second set of $(thing)Operators$(0) are related to logic. They're pieces that do rounding (to an integer).$(p)$(piece)Operator: Ceiling$(0), $(piece)Operator: Floor$(0) and $(piece)Operator: Round$(0) round up, down, and to the closest integer, respectively.$(p)This group also includes $(piece)Operator: Min$(0) and $(piece)Operator: Max$(0). These get the smallest and largest, respectively, of their parameters." + "psi.book.page.secondaryOperators.2": "The second set of $(thing)Operators$(0) are related to logic. They're pieces that do rounding (to an integer).$(p)$(piece)Operator: Ceiling$(0), $(piece)Operator: Floor$(0) and $(piece)Operator: Round$(0) round up, down, and to the closest integer, respectively.$(p)This group also includes $(piece)Operator: Min$(0) and $(piece)Operator: Max$(0). These get the smallest and largest, respectively, of their parameters.", + "psimisc.spellmaynotfunctionasintended": "lol" } \ No newline at end of file