diff --git a/Common/src/main/java/tschipp/carryon/client/render/CarriedObjectRender.java b/Common/src/main/java/tschipp/carryon/client/render/CarriedObjectRender.java index e945f30..28711ff 100644 --- a/Common/src/main/java/tschipp/carryon/client/render/CarriedObjectRender.java +++ b/Common/src/main/java/tschipp/carryon/client/render/CarriedObjectRender.java @@ -24,6 +24,7 @@ import tschipp.carryon.common.carry.CarryOnData.CarryType; import tschipp.carryon.common.carry.CarryOnDataManager; import tschipp.carryon.common.scripting.CarryOnScript; import tschipp.carryon.common.scripting.CarryOnScript.ScriptRender; +import tschipp.carryon.platform.Services; import java.util.Optional; @@ -32,6 +33,9 @@ public class CarriedObjectRender public static boolean drawFirstPerson(Player player, MultiBufferSource buffer, PoseStack matrix, int light, float partialTicks) { + if(Services.PLATFORM.isModLoaded("firstperson") || Services.PLATFORM.isModLoaded("firstpersonmod")) + return false; + CarryOnData carry = CarryOnDataManager.getCarryData(player); if(carry.isCarrying(CarryType.BLOCK)) drawFirstPersonBlock(player, buffer, matrix, light, CarryRenderHelper.getRenderState(player)); @@ -116,7 +120,12 @@ public class CarriedObjectRender if (entity instanceof LivingEntity) ((LivingEntity) entity).hurtTime = 0; - manager.render(entity, 0, 0, 0, 0f, 0, matrix, buffer, light); + try { + manager.render(entity, 0, 0, 0, 0f, 0, matrix, buffer, light); + } + catch (Exception e) + { + } manager.setRenderShadow(true); } @@ -143,76 +152,75 @@ public class CarriedObjectRender for (Player player : level.players()) { - CarryOnData carry = CarryOnDataManager.getCarryData(player); + try { + CarryOnData carry = CarryOnDataManager.getCarryData(player); - if (perspective == 0 && player == mc.player) - continue; + if (perspective == 0 && player == mc.player && !(Services.PLATFORM.isModLoaded("firstperson") || Services.PLATFORM.isModLoaded("firstpersonmod"))) + continue; - light = manager.getPackedLightCoords(player, partialticks); + light = manager.getPackedLightCoords(player, partialticks); - if (carry.isCarrying(CarryType.BLOCK)) - { - BlockState state = CarryRenderHelper.getRenderState(player); + if (carry.isCarrying(CarryType.BLOCK)) { + BlockState state = CarryRenderHelper.getRenderState(player); - CarryRenderHelper.applyBlockTransformations(player, partialticks, matrix, state.getBlock()); + CarryRenderHelper.applyBlockTransformations(player, partialticks, matrix, state.getBlock()); - ItemStack tileItem = new ItemStack(state.getBlock().asItem()); - BakedModel model = CarryRenderHelper.getRenderBlock(player); + ItemStack tileItem = new ItemStack(state.getBlock().asItem()); + BakedModel model = CarryRenderHelper.getRenderBlock(player); - //ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag, level, player) : tileItem.isEmpty() ? mc.getBlockRenderer().getBlockModel(state) : mc.getItemRenderer().getModel(tileItem, level, player, 0); + //ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag, level, player) : tileItem.isEmpty() ? mc.getBlockRenderer().getBlockModel(state) : mc.getItemRenderer().getModel(tileItem, level, player, 0); // - Optional res = carry.getActiveScript(); - if(res.isPresent()) - { - CarryOnScript script = res.get(); - CarryRenderHelper.performScriptTransformation(matrix, script); - } - - RenderSystem.setShaderTexture(0, InventoryMenu.BLOCK_ATLAS); - RenderSystem.enableCull(); - - PoseStack.Pose p = matrix.last(); - PoseStack copy = new PoseStack(); - copy.mulPoseMatrix(p.pose()); - matrix.popPose(); - - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - - CarryRenderHelper.renderBakedModel(tileItem, copy, buffer, light, model); - buffer.endBatch(); - - matrix.popPose(); - } - else if (carry.isCarrying(CarryType.ENTITY)) - { - Entity entity = CarryRenderHelper.getRenderEntity(player); - - if (entity != null) - { - CarryRenderHelper.applyEntityTransformations(player, partialticks, matrix, entity); - - manager.setRenderShadow(false); - Optional res = carry.getActiveScript(); - if(res.isPresent()) - { + if (res.isPresent()) { CarryOnScript script = res.get(); CarryRenderHelper.performScriptTransformation(matrix, script); } - if (entity instanceof LivingEntity le) - le.hurtTime = 0; + RenderSystem.setShaderTexture(0, InventoryMenu.BLOCK_ATLAS); + RenderSystem.enableCull(); + + PoseStack.Pose p = matrix.last(); + PoseStack copy = new PoseStack(); + copy.mulPoseMatrix(p.pose()); + matrix.popPose(); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - manager.render(entity, 0, 0, 0, 0f, 0, matrix, buffer, light); + CarryRenderHelper.renderBakedModel(tileItem, copy, buffer, light, model); buffer.endBatch(); matrix.popPose(); - manager.setRenderShadow(true); - matrix.popPose(); + } else if (carry.isCarrying(CarryType.ENTITY)) { + Entity entity = CarryRenderHelper.getRenderEntity(player); + + if (entity != null) { + CarryRenderHelper.applyEntityTransformations(player, partialticks, matrix, entity); + + manager.setRenderShadow(false); + + Optional res = carry.getActiveScript(); + if (res.isPresent()) { + CarryOnScript script = res.get(); + CarryRenderHelper.performScriptTransformation(matrix, script); + } + + if (entity instanceof LivingEntity le) + le.hurtTime = 0; + + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + + manager.render(entity, 0, 0, 0, 0f, 0, matrix, buffer, light); + buffer.endBatch(); + + matrix.popPose(); + manager.setRenderShadow(true); + matrix.popPose(); + } } } + catch (Exception e) + { + } } RenderSystem.enableDepthTest(); diff --git a/Common/src/main/java/tschipp/carryon/client/render/CarryRenderHelper.java b/Common/src/main/java/tschipp/carryon/client/render/CarryRenderHelper.java index 1015141..567f755 100644 --- a/Common/src/main/java/tschipp/carryon/client/render/CarryRenderHelper.java +++ b/Common/src/main/java/tschipp/carryon/client/render/CarryRenderHelper.java @@ -1,10 +1,12 @@ package tschipp.carryon.client.render; +import com.mojang.authlib.minecraft.client.MinecraftClient; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Quaternion; import com.mojang.math.Vector3f; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.block.model.ItemTransforms.TransformType; import net.minecraft.client.renderer.entity.ItemRenderer; import net.minecraft.client.renderer.texture.OverlayTexture; @@ -232,8 +234,13 @@ public class CarryRenderHelper public static void renderBakedModel(ItemStack stack, PoseStack matrix, MultiBufferSource buffer, int light, BakedModel model) { - ItemRenderer renderer = Minecraft.getInstance().getItemRenderer(); - renderer.render(stack, TransformType.NONE, false, matrix, buffer, light, OverlayTexture.NO_OVERLAY, model); + try { + ItemRenderer renderer = Minecraft.getInstance().getItemRenderer(); + renderer.render(stack, TransformType.NONE, false, matrix, buffer, light, OverlayTexture.NO_OVERLAY, model); + } + catch (Exception e) + { + } } public static BlockState getRenderState(Player player) diff --git a/Common/src/main/java/tschipp/carryon/common/config/CarryConfig.java b/Common/src/main/java/tschipp/carryon/common/config/CarryConfig.java index 7b83385..abb406a 100644 --- a/Common/src/main/java/tschipp/carryon/common/config/CarryConfig.java +++ b/Common/src/main/java/tschipp/carryon/common/config/CarryConfig.java @@ -231,7 +231,7 @@ public class CarryConfig { "magneticraft:multiblock_gap", "refinedstorage:*", "mcmultipart:*", "enderstorage:*", "betterstorage:*", "practicallogistics2:*", "wearablebackpacks:*", "rftools:screen", "rftools:creative_screen", "create:*", "magic_doorknob:*", "iceandfire:*", "ftbquests:*", - "waystones:*" + "waystones:*", "contact:*", "framedblocks:*" }; @Property( diff --git a/Common/src/main/java/tschipp/carryon/mixin/InventoryMixin.java b/Common/src/main/java/tschipp/carryon/mixin/InventoryMixin.java index 576649b..62a4f42 100644 --- a/Common/src/main/java/tschipp/carryon/mixin/InventoryMixin.java +++ b/Common/src/main/java/tschipp/carryon/mixin/InventoryMixin.java @@ -16,6 +16,8 @@ import tschipp.carryon.common.carry.CarryOnDataManager; @Mixin(Inventory.class) public class InventoryMixin { + private static final ItemStack DUMMY_STACK = new ItemStack(Blocks.COBBLESTONE, 1); + @Shadow public Player player; @@ -30,7 +32,7 @@ public class InventoryMixin { if(i == selected && CarryOnDataManager.getCarryData(player).isCarrying()) { - return (E) new ItemStack(Blocks.STONE, 1); + return (E) DUMMY_STACK; } else return instance.get(i); diff --git a/Fabric/src/main/java/tschipp/carryon/mixin/ItemInHandRendererMixin.java b/Fabric/src/main/java/tschipp/carryon/mixin/ItemInHandRendererMixin.java index 12e1c3e..42e3b40 100644 --- a/Fabric/src/main/java/tschipp/carryon/mixin/ItemInHandRendererMixin.java +++ b/Fabric/src/main/java/tschipp/carryon/mixin/ItemInHandRendererMixin.java @@ -1,31 +1,32 @@ package tschipp.carryon.mixin; import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.Minecraft; import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.ItemInHandRenderer; import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderBuffers; import net.minecraft.world.InteractionHand; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import tschipp.carryon.client.render.CarriedObjectRender; import tschipp.carryon.client.render.CarryRenderHelper; +import tschipp.carryon.platform.Services; @Mixin(ItemInHandRenderer.class) public class ItemInHandRendererMixin { - - @Shadow - private void renderArmWithItem(AbstractClientPlayer player, float partialTicks, float f2, InteractionHand hand, float f3, ItemStack stack, float f4, PoseStack poseStack, MultiBufferSource source, int light) {throw new RuntimeException("CarryOn InHandRendererMixin failed");} - - - @Redirect(at = @At(value = "INVOKE", ordinal = 0, target = "Lnet/minecraft/client/renderer/ItemInHandRenderer;renderArmWithItem(Lnet/minecraft/client/player/AbstractClientPlayer;FFLnet/minecraft/world/InteractionHand;FLnet/minecraft/world/item/ItemStack;FLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V"), method = "renderHandsWithItems(FLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;Lnet/minecraft/client/player/LocalPlayer;I)V") - private void onRenderHand(ItemInHandRenderer instance, AbstractClientPlayer player, float partialTicks, float f2, InteractionHand hand, float f3, ItemStack stack, float f4, PoseStack poseStack, MultiBufferSource source, int light) + @Inject(at = @At(value = "HEAD"), method = "renderArmWithItem(Lnet/minecraft/client/player/AbstractClientPlayer;FFLnet/minecraft/world/InteractionHand;FLnet/minecraft/world/item/ItemStack;FLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", cancellable = true) + private void onRenderHand(AbstractClientPlayer player, float partialTicks, float pitch, InteractionHand hand, float pSwingProgress, ItemStack pStack, float pEquippedProgress, PoseStack poseStack, MultiBufferSource buffer, int light, CallbackInfo ci) { - if(!CarriedObjectRender.drawFirstPerson(player, source, poseStack, light, partialTicks) && CarryRenderHelper.getPerspective() == 0) - renderArmWithItem(player, partialTicks, f2, hand, f3, stack, f4, poseStack, source, light); + if(CarryRenderHelper.getPerspective() == 0 && CarriedObjectRender.drawFirstPerson(player, buffer, poseStack, light, partialTicks)) + ci.cancel(); } } diff --git a/Fabric/src/main/resources/carryon.fabric.mixins.json b/Fabric/src/main/resources/carryon.fabric.mixins.json index 53b0cff..b2b70ac 100644 --- a/Fabric/src/main/resources/carryon.fabric.mixins.json +++ b/Fabric/src/main/resources/carryon.fabric.mixins.json @@ -7,7 +7,7 @@ "PlayerMixinFabric" ], "client": [ - "ItemInHandRendererMixin", + "ItemInHandRendererMixin", "LevelRendererMixin", "ScreenMixin" ], diff --git a/Forge/build.gradle b/Forge/build.gradle index 88050ee..ea3f577 100644 --- a/Forge/build.gradle +++ b/Forge/build.gradle @@ -101,6 +101,9 @@ repositories { maven { url 'https://maven.blamejared.com' } + flatDir { + dirs 'libs' + } } dependencies { @@ -109,6 +112,16 @@ dependencies { implementation fg.deobf("net.darkhax.gamestages:GameStages-Forge-1.19.2:11.0.2") implementation fg.deobf("net.darkhax.bookshelf:Bookshelf-Forge-1.19.2:16.1.9") annotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor' + + fileTree("libs").matching { + include "*.jar" + }.each { + String filename = it.getName(); + filename = filename.substring(0, filename.length() - 4); + int lastDash = filename.lastIndexOf("-"); + filename = filename.substring(0, lastDash) + ":" + filename.substring(lastDash+1, filename.length()); + implementation fg.deobf("blank:${filename}") + } } tasks.withType(JavaCompile) {