Added FirstPersonRender compat, augmented blacklist, fixed mixin conflict issue
This commit is contained in:
parent
b77e9ddd10
commit
ce00fa1f85
|
|
@ -24,6 +24,7 @@ import tschipp.carryon.common.carry.CarryOnData.CarryType;
|
||||||
import tschipp.carryon.common.carry.CarryOnDataManager;
|
import tschipp.carryon.common.carry.CarryOnDataManager;
|
||||||
import tschipp.carryon.common.scripting.CarryOnScript;
|
import tschipp.carryon.common.scripting.CarryOnScript;
|
||||||
import tschipp.carryon.common.scripting.CarryOnScript.ScriptRender;
|
import tschipp.carryon.common.scripting.CarryOnScript.ScriptRender;
|
||||||
|
import tschipp.carryon.platform.Services;
|
||||||
|
|
||||||
import java.util.Optional;
|
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)
|
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);
|
CarryOnData carry = CarryOnDataManager.getCarryData(player);
|
||||||
if(carry.isCarrying(CarryType.BLOCK))
|
if(carry.isCarrying(CarryType.BLOCK))
|
||||||
drawFirstPersonBlock(player, buffer, matrix, light, CarryRenderHelper.getRenderState(player));
|
drawFirstPersonBlock(player, buffer, matrix, light, CarryRenderHelper.getRenderState(player));
|
||||||
|
|
@ -116,7 +120,12 @@ public class CarriedObjectRender
|
||||||
if (entity instanceof LivingEntity)
|
if (entity instanceof LivingEntity)
|
||||||
((LivingEntity) entity).hurtTime = 0;
|
((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);
|
manager.setRenderShadow(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -143,76 +152,75 @@ public class CarriedObjectRender
|
||||||
|
|
||||||
for (Player player : level.players())
|
for (Player player : level.players())
|
||||||
{
|
{
|
||||||
CarryOnData carry = CarryOnDataManager.getCarryData(player);
|
try {
|
||||||
|
CarryOnData carry = CarryOnDataManager.getCarryData(player);
|
||||||
|
|
||||||
if (perspective == 0 && player == mc.player)
|
if (perspective == 0 && player == mc.player && !(Services.PLATFORM.isModLoaded("firstperson") || Services.PLATFORM.isModLoaded("firstpersonmod")))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
light = manager.getPackedLightCoords(player, partialticks);
|
light = manager.getPackedLightCoords(player, partialticks);
|
||||||
|
|
||||||
if (carry.isCarrying(CarryType.BLOCK))
|
if (carry.isCarrying(CarryType.BLOCK)) {
|
||||||
{
|
BlockState state = CarryRenderHelper.getRenderState(player);
|
||||||
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());
|
ItemStack tileItem = new ItemStack(state.getBlock().asItem());
|
||||||
BakedModel model = CarryRenderHelper.getRenderBlock(player);
|
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<CarryOnScript> 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<CarryOnScript> res = carry.getActiveScript();
|
Optional<CarryOnScript> res = carry.getActiveScript();
|
||||||
if(res.isPresent())
|
if (res.isPresent()) {
|
||||||
{
|
|
||||||
CarryOnScript script = res.get();
|
CarryOnScript script = res.get();
|
||||||
CarryRenderHelper.performScriptTransformation(matrix, script);
|
CarryRenderHelper.performScriptTransformation(matrix, script);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entity instanceof LivingEntity le)
|
RenderSystem.setShaderTexture(0, InventoryMenu.BLOCK_ATLAS);
|
||||||
le.hurtTime = 0;
|
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);
|
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();
|
buffer.endBatch();
|
||||||
|
|
||||||
matrix.popPose();
|
matrix.popPose();
|
||||||
manager.setRenderShadow(true);
|
} else if (carry.isCarrying(CarryType.ENTITY)) {
|
||||||
matrix.popPose();
|
Entity entity = CarryRenderHelper.getRenderEntity(player);
|
||||||
|
|
||||||
|
if (entity != null) {
|
||||||
|
CarryRenderHelper.applyEntityTransformations(player, partialticks, matrix, entity);
|
||||||
|
|
||||||
|
manager.setRenderShadow(false);
|
||||||
|
|
||||||
|
Optional<CarryOnScript> 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();
|
RenderSystem.enableDepthTest();
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,12 @@
|
||||||
package tschipp.carryon.client.render;
|
package tschipp.carryon.client.render;
|
||||||
|
|
||||||
|
import com.mojang.authlib.minecraft.client.MinecraftClient;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.mojang.math.Quaternion;
|
import com.mojang.math.Quaternion;
|
||||||
import com.mojang.math.Vector3f;
|
import com.mojang.math.Vector3f;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
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.block.model.ItemTransforms.TransformType;
|
||||||
import net.minecraft.client.renderer.entity.ItemRenderer;
|
import net.minecraft.client.renderer.entity.ItemRenderer;
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
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)
|
public static void renderBakedModel(ItemStack stack, PoseStack matrix, MultiBufferSource buffer, int light, BakedModel model)
|
||||||
{
|
{
|
||||||
ItemRenderer renderer = Minecraft.getInstance().getItemRenderer();
|
try {
|
||||||
renderer.render(stack, TransformType.NONE, false, matrix, buffer, light, OverlayTexture.NO_OVERLAY, model);
|
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)
|
public static BlockState getRenderState(Player player)
|
||||||
|
|
|
||||||
|
|
@ -231,7 +231,7 @@ public class CarryConfig {
|
||||||
"magneticraft:multiblock_gap", "refinedstorage:*", "mcmultipart:*", "enderstorage:*",
|
"magneticraft:multiblock_gap", "refinedstorage:*", "mcmultipart:*", "enderstorage:*",
|
||||||
"betterstorage:*", "practicallogistics2:*", "wearablebackpacks:*", "rftools:screen",
|
"betterstorage:*", "practicallogistics2:*", "wearablebackpacks:*", "rftools:screen",
|
||||||
"rftools:creative_screen", "create:*", "magic_doorknob:*", "iceandfire:*", "ftbquests:*",
|
"rftools:creative_screen", "create:*", "magic_doorknob:*", "iceandfire:*", "ftbquests:*",
|
||||||
"waystones:*"
|
"waystones:*", "contact:*", "framedblocks:*"
|
||||||
};
|
};
|
||||||
|
|
||||||
@Property(
|
@Property(
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,8 @@ import tschipp.carryon.common.carry.CarryOnDataManager;
|
||||||
@Mixin(Inventory.class)
|
@Mixin(Inventory.class)
|
||||||
public class InventoryMixin
|
public class InventoryMixin
|
||||||
{
|
{
|
||||||
|
private static final ItemStack DUMMY_STACK = new ItemStack(Blocks.COBBLESTONE, 1);
|
||||||
|
|
||||||
@Shadow
|
@Shadow
|
||||||
public Player player;
|
public Player player;
|
||||||
|
|
||||||
|
|
@ -30,7 +32,7 @@ public class InventoryMixin
|
||||||
{
|
{
|
||||||
if(i == selected && CarryOnDataManager.getCarryData(player).isCarrying())
|
if(i == selected && CarryOnDataManager.getCarryData(player).isCarrying())
|
||||||
{
|
{
|
||||||
return (E) new ItemStack(Blocks.STONE, 1);
|
return (E) DUMMY_STACK;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return instance.get(i);
|
return instance.get(i);
|
||||||
|
|
|
||||||
|
|
@ -1,31 +1,32 @@
|
||||||
package tschipp.carryon.mixin;
|
package tschipp.carryon.mixin;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.player.AbstractClientPlayer;
|
import net.minecraft.client.player.AbstractClientPlayer;
|
||||||
|
import net.minecraft.client.renderer.GameRenderer;
|
||||||
import net.minecraft.client.renderer.ItemInHandRenderer;
|
import net.minecraft.client.renderer.ItemInHandRenderer;
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
import net.minecraft.client.renderer.MultiBufferSource;
|
||||||
|
import net.minecraft.client.renderer.RenderBuffers;
|
||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
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.CarriedObjectRender;
|
||||||
import tschipp.carryon.client.render.CarryRenderHelper;
|
import tschipp.carryon.client.render.CarryRenderHelper;
|
||||||
|
import tschipp.carryon.platform.Services;
|
||||||
|
|
||||||
@Mixin(ItemInHandRenderer.class)
|
@Mixin(ItemInHandRenderer.class)
|
||||||
public class ItemInHandRendererMixin
|
public class ItemInHandRendererMixin
|
||||||
{
|
{
|
||||||
|
@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)
|
||||||
@Shadow
|
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)
|
||||||
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)
|
|
||||||
{
|
{
|
||||||
if(!CarriedObjectRender.drawFirstPerson(player, source, poseStack, light, partialTicks) && CarryRenderHelper.getPerspective() == 0)
|
if(CarryRenderHelper.getPerspective() == 0 && CarriedObjectRender.drawFirstPerson(player, buffer, poseStack, light, partialTicks))
|
||||||
renderArmWithItem(player, partialTicks, f2, hand, f3, stack, f4, poseStack, source, light);
|
ci.cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
"PlayerMixinFabric"
|
"PlayerMixinFabric"
|
||||||
],
|
],
|
||||||
"client": [
|
"client": [
|
||||||
"ItemInHandRendererMixin",
|
"ItemInHandRendererMixin",
|
||||||
"LevelRendererMixin",
|
"LevelRendererMixin",
|
||||||
"ScreenMixin"
|
"ScreenMixin"
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -101,6 +101,9 @@ repositories {
|
||||||
maven {
|
maven {
|
||||||
url 'https://maven.blamejared.com'
|
url 'https://maven.blamejared.com'
|
||||||
}
|
}
|
||||||
|
flatDir {
|
||||||
|
dirs 'libs'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
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.gamestages:GameStages-Forge-1.19.2:11.0.2")
|
||||||
implementation fg.deobf("net.darkhax.bookshelf:Bookshelf-Forge-1.19.2:16.1.9")
|
implementation fg.deobf("net.darkhax.bookshelf:Bookshelf-Forge-1.19.2:16.1.9")
|
||||||
annotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor'
|
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) {
|
tasks.withType(JavaCompile) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user