Fixed 3rd person rendering
This commit is contained in:
parent
6f0c20077a
commit
08b2a41043
|
|
@ -39,22 +39,13 @@ import tschipp.carryon.common.scripting.Matchables.NBTCondition;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class ModelOverride
|
public class ModelOverride {
|
||||||
{
|
|
||||||
//public static Codec<ModelOverride> CODEC = Codec.STRING.comapFlatMap(ModelOverride::of, override -> override.raw);
|
|
||||||
|
|
||||||
private String raw;
|
|
||||||
private BlockResult parsedBlock;
|
private BlockResult parsedBlock;
|
||||||
private Type type;
|
|
||||||
private Either<ItemResult, BlockResult> parsedRHS;
|
|
||||||
private Either<ItemStack, BlockState> renderObject;
|
private Either<ItemStack, BlockState> renderObject;
|
||||||
|
|
||||||
private ModelOverride(String raw, BlockResult parsedBlock, Type type, Either<ItemResult, BlockResult> parsedRHS)
|
private ModelOverride(String raw, BlockResult parsedBlock, Type type, Either<ItemResult, BlockResult> parsedRHS)
|
||||||
{
|
{
|
||||||
this.raw = raw;
|
|
||||||
this.parsedBlock = parsedBlock;
|
this.parsedBlock = parsedBlock;
|
||||||
this.type = type;
|
|
||||||
this.parsedRHS = parsedRHS;
|
|
||||||
|
|
||||||
parsedRHS.ifLeft(res -> {
|
parsedRHS.ifLeft(res -> {
|
||||||
ItemStack stack = new ItemStack(res.item());
|
ItemStack stack = new ItemStack(res.item());
|
||||||
|
|
|
||||||
|
|
@ -35,10 +35,8 @@ import net.minecraft.world.entity.LivingEntity;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.item.ItemDisplayContext;
|
import net.minecraft.world.item.ItemDisplayContext;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.level.Level;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
import org.joml.Matrix4f;
|
|
||||||
import tschipp.carryon.Constants;
|
import tschipp.carryon.Constants;
|
||||||
import tschipp.carryon.common.carry.CarryOnData;
|
import tschipp.carryon.common.carry.CarryOnData;
|
||||||
import tschipp.carryon.common.carry.CarryOnData.CarryType;
|
import tschipp.carryon.common.carry.CarryOnData.CarryType;
|
||||||
|
|
@ -51,8 +49,7 @@ import java.util.*;
|
||||||
|
|
||||||
public class CarriedObjectRender
|
public class CarriedObjectRender
|
||||||
{
|
{
|
||||||
|
public static boolean draw(Player player, PoseStack matrix, int light, float partialTicks,SubmitNodeCollector nodeCollector, boolean firstPerson)
|
||||||
public static boolean drawFirstPerson(Player player, PoseStack matrix, int light, float partialTicks,SubmitNodeCollector nodeCollector)
|
|
||||||
{
|
{
|
||||||
if(Services.PLATFORM.isModLoaded("firstperson") || Services.PLATFORM.isModLoaded("firstpersonmod"))
|
if(Services.PLATFORM.isModLoaded("firstperson") || Services.PLATFORM.isModLoaded("firstpersonmod"))
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -60,9 +57,9 @@ public class CarriedObjectRender
|
||||||
CarryOnData carry = CarryOnDataManager.getCarryData(player);
|
CarryOnData carry = CarryOnDataManager.getCarryData(player);
|
||||||
try {
|
try {
|
||||||
if (carry.isCarrying(CarryType.BLOCK))
|
if (carry.isCarrying(CarryType.BLOCK))
|
||||||
drawFirstPersonBlock(player, matrix, light, CarryRenderHelper.getRenderState(player), nodeCollector);
|
drawBlock(player, matrix, light, CarryRenderHelper.getRenderState(player), nodeCollector, firstPerson);
|
||||||
else if (carry.isCarrying(CarryType.ENTITY))
|
else if (carry.isCarrying(CarryType.ENTITY))
|
||||||
drawFirstPersonEntity(player, matrix, light, partialTicks,nodeCollector);
|
drawEntity(player, matrix, light, partialTicks,nodeCollector, firstPerson);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|
@ -82,13 +79,18 @@ public class CarriedObjectRender
|
||||||
return carry.isCarrying();
|
return carry.isCarrying();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void drawFirstPersonBlock(Player player, PoseStack matrix, int light, BlockState state,SubmitNodeCollector nodeCollector)
|
private static void drawBlock(Player player, PoseStack matrix, int light, BlockState state,SubmitNodeCollector nodeCollector, boolean firstPerson)
|
||||||
{
|
{
|
||||||
matrix.pushPose();
|
matrix.pushPose();
|
||||||
matrix.scale(2.5f, 2.5f, 2.5f);
|
if (firstPerson){
|
||||||
matrix.translate(0, -0.5, -1);
|
matrix.scale(2.5f, 2.5f, 2.5f);
|
||||||
//RenderSystem.enableBlend();
|
matrix.translate(0, -0.5, -1);
|
||||||
//RenderSystem.disableCull();
|
}else{
|
||||||
|
matrix.scale(0.6f, 0.6f, 0.6f);
|
||||||
|
matrix.translate(0, 0.5, -0.8);
|
||||||
|
matrix.mulPose(Axis.ZN.rotationDegrees(180));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
CarryOnData carry = CarryOnDataManager.getCarryData(player);
|
CarryOnData carry = CarryOnDataManager.getCarryData(player);
|
||||||
ItemStackRenderState renderState = new ItemStackRenderState();
|
ItemStackRenderState renderState = new ItemStackRenderState();
|
||||||
|
|
@ -105,20 +107,13 @@ public class CarriedObjectRender
|
||||||
if(carry.getActiveScript().isPresent())
|
if(carry.getActiveScript().isPresent())
|
||||||
CarryRenderHelper.performScriptTransformation(matrix, carry.getActiveScript().get());
|
CarryRenderHelper.performScriptTransformation(matrix, carry.getActiveScript().get());
|
||||||
|
|
||||||
//RenderSystem.setShaderTexture(0, GpuTexture);
|
|
||||||
|
|
||||||
ItemStack renderStack = CarryRenderHelper.getRenderItemStack(player);
|
ItemStack renderStack = CarryRenderHelper.getRenderItemStack(player);
|
||||||
Minecraft.getInstance().getItemModelResolver().updateForTopItem(renderState, renderStack, ItemDisplayContext.NONE, player.level(), null, 0);
|
Minecraft.getInstance().getItemModelResolver().updateForTopItem(renderState, renderStack, ItemDisplayContext.NONE, player.level(), null, 0);
|
||||||
//renderState.render(matrix, light, OverlayTexture.NO_OVERLAY);
|
renderState.submit(matrix, nodeCollector, light, OverlayTexture.NO_OVERLAY, 0);
|
||||||
renderState.submit(matrix, nodeCollector, light, OverlayTexture.NO_OVERLAY, 0);
|
|
||||||
|
|
||||||
|
|
||||||
//RenderSystem.enableCull();
|
|
||||||
//RenderSystem.disableBlend();
|
|
||||||
matrix.popPose();
|
matrix.popPose();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void drawFirstPersonEntity(Player player, PoseStack matrix, int light, float partialTicks,SubmitNodeCollector nodeCollector) {
|
private static void drawEntity(Player player, PoseStack matrix, int light, float partialTicks,SubmitNodeCollector nodeCollector, boolean firstPerson) {
|
||||||
EntityRenderDispatcher manager = Minecraft.getInstance().getEntityRenderDispatcher();
|
EntityRenderDispatcher manager = Minecraft.getInstance().getEntityRenderDispatcher();
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -136,13 +131,17 @@ renderState.submit(matrix, nodeCollector, light, OverlayTexture.NO_OVERLAY, 0);
|
||||||
|
|
||||||
float height = entity.getBbHeight();
|
float height = entity.getBbHeight();
|
||||||
float width = entity.getBbWidth();
|
float width = entity.getBbWidth();
|
||||||
|
matrix.pushPose();
|
||||||
matrix.pushPose();
|
matrix.mulPose(Axis.YP.rotationDegrees(180));
|
||||||
matrix.scale(0.8f, 0.8f, 0.8f);
|
if (firstPerson){
|
||||||
matrix.mulPose(Axis.YP.rotationDegrees(180));
|
matrix.scale(0.8f, 0.8f, 0.8f);
|
||||||
matrix.translate(0.0, -height - .2, width * 1.3 + 0.1);
|
matrix.translate(0.0, -height - .2, width * 1.3 + 0.1);
|
||||||
|
}else{
|
||||||
// manager.setRenderShadow(false);
|
float multiplier = Math.min(9.9f, height * width) ;
|
||||||
|
matrix.scale((10 - multiplier) * 0.08f, (10 - multiplier) * 0.08f, (10 - multiplier) * 0.08f);
|
||||||
|
matrix.translate(0.0, height / 2 + -(height / 4) + 0.5f, width - 0.1 < 0.7 ? width - 0.1 + (0.7 - (width - 0.1)) : width - 0.1);
|
||||||
|
matrix.mulPose(Axis.ZN.rotationDegrees(180));
|
||||||
|
}
|
||||||
|
|
||||||
Optional<CarryOnScript> res = carry.getActiveScript();
|
Optional<CarryOnScript> res = carry.getActiveScript();
|
||||||
if(res.isPresent())
|
if(res.isPresent())
|
||||||
|
|
@ -158,111 +157,13 @@ renderState.submit(matrix, nodeCollector, light, OverlayTexture.NO_OVERLAY, 0);
|
||||||
((LivingEntity) entity).hurtTime = 0;
|
((LivingEntity) entity).hurtTime = 0;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
manager.submit(manager.extractEntity(entity, 0), new CameraRenderState(), 0, 0, 0, matrix, nodeCollector);
|
manager.submit(manager.extractEntity(entity, 0), new CameraRenderState(), 0, 0, 0, matrix, nodeCollector);
|
||||||
// manager.render(entity, 0, 0, 0, 0f, matrix, buffer, light);
|
|
||||||
//nodeCollector.submit
|
|
||||||
//manager.getRenderer(entity).submit(new EntityRenderState(), matrix, nodeCollector, null);
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
// manager.setRenderShadow(true);
|
|
||||||
matrix.popPose();
|
matrix.popPose();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// RenderSystem.disableAlphaTest();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Draws the third person view of entities and blocks
|
|
||||||
* @param partialticks
|
|
||||||
* @param mat
|
|
||||||
*/
|
|
||||||
public static void drawThirdPerson(float partialticks, Matrix4f mat) {
|
|
||||||
Minecraft mc = Minecraft.getInstance();
|
|
||||||
Level level = mc.level;
|
|
||||||
int perspective = CarryRenderHelper.getPerspective();
|
|
||||||
|
|
||||||
PoseStack matrix = new PoseStack();
|
|
||||||
matrix.mulPose(mat);
|
|
||||||
|
|
||||||
// RenderSystem.enableBlend();
|
|
||||||
// RenderSystem.disableCull();
|
|
||||||
// RenderSystem.disableDepthTest();
|
|
||||||
ItemStackRenderState renderState = new ItemStackRenderState();
|
|
||||||
var layer = renderState.newLayer();
|
|
||||||
layer.setRenderType(RenderType.glint());
|
|
||||||
|
|
||||||
for (Player player : level.players())
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
|
|
||||||
CarryOnData carry = CarryOnDataManager.getCarryData(player);
|
|
||||||
|
|
||||||
if (perspective == 0 && player == mc.player && !(Services.PLATFORM.isModLoaded("firstperson") || Services.PLATFORM.isModLoaded("firstpersonmod") || Services.PLATFORM.isModLoaded("realcamera")))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
|
|
||||||
if (carry.isCarrying(CarryType.BLOCK)) {
|
|
||||||
BlockState state = CarryRenderHelper.getRenderState(player);
|
|
||||||
|
|
||||||
CarryRenderHelper.applyBlockTransformations(player, partialticks, matrix, state.getBlock());
|
|
||||||
|
|
||||||
ItemStack renderItemStack = CarryRenderHelper.getRenderItemStack(player);
|
|
||||||
|
|
||||||
mc.getItemModelResolver().updateForTopItem(renderState, renderItemStack, ItemDisplayContext.NONE, level, null, 0);
|
|
||||||
|
|
||||||
Optional<CarryOnScript> res = carry.getActiveScript();
|
|
||||||
res.ifPresent(script -> CarryRenderHelper.performScriptTransformation(matrix, script));
|
|
||||||
|
|
||||||
//RenderSystem.setShaderTexture(0, TextureAtlas.LOCATION_BLOCKS);
|
|
||||||
//RenderSystem.enableCull();
|
|
||||||
|
|
||||||
PoseStack.Pose p = matrix.last();
|
|
||||||
PoseStack copy = new PoseStack();
|
|
||||||
copy.mulPose(p.pose());
|
|
||||||
matrix.popPose();
|
|
||||||
|
|
||||||
//RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
|
|
||||||
|
|
||||||
renderState.submit(copy, null, 0, OverlayTexture.NO_OVERLAY, 0);
|
|
||||||
|
|
||||||
// renderState.render(copy, buffer, light, OverlayTexture.NO_OVERLAY);
|
|
||||||
|
|
||||||
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();
|
|
||||||
res.ifPresent(script -> 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, matrix, buffer, light);
|
|
||||||
matrix.popPose();
|
|
||||||
// manager.setRenderShadow(true);
|
|
||||||
matrix.popPose();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -156,7 +156,7 @@ public class CarryRenderHelper
|
||||||
|
|
||||||
public static void applyBlockTransformations(Player player, float partialticks, PoseStack matrix, Block block)
|
public static void applyBlockTransformations(Player player, float partialticks, PoseStack matrix, Block block)
|
||||||
{
|
{
|
||||||
int perspective = CarryRenderHelper.getPerspective();
|
//int perspective = CarryRenderHelper.getPerspective();
|
||||||
|
|
||||||
applyGeneralTransformations(player, partialticks, matrix);
|
applyGeneralTransformations(player, partialticks, matrix);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
package tschipp.carryon.client.render;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
|
|
||||||
|
import net.minecraft.client.model.PlayerModel;
|
||||||
|
import net.minecraft.client.renderer.SubmitNodeCollector;
|
||||||
|
import net.minecraft.client.renderer.entity.RenderLayerParent;
|
||||||
|
import net.minecraft.client.renderer.entity.layers.RenderLayer;
|
||||||
|
import net.minecraft.client.renderer.entity.state.AvatarRenderState;
|
||||||
|
|
||||||
|
public class CarryingItemRenderLayer<M extends PlayerModel> extends RenderLayer<AvatarRenderState, M> {
|
||||||
|
public CarryingItemRenderLayer(RenderLayerParent<AvatarRenderState, M> renderer) {
|
||||||
|
super(renderer);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void submit(PoseStack poseStack, SubmitNodeCollector nodeCollector, int packedLight,
|
||||||
|
AvatarRenderState renderState, float yRot, float xRot) {
|
||||||
|
if (renderState instanceof ICarryOnRenderState carryOnRenderState){
|
||||||
|
CarriedObjectRender.draw(carryOnRenderState.getPlayer(), poseStack, packedLight, 0, nodeCollector,false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package tschipp.carryon.client.render;
|
package tschipp.carryon.client.render;
|
||||||
|
|
||||||
|
import net.minecraft.world.entity.player.Player;
|
||||||
import tschipp.carryon.common.carry.CarryOnData;
|
import tschipp.carryon.common.carry.CarryOnData;
|
||||||
|
|
||||||
public interface ICarryOnRenderState {
|
public interface ICarryOnRenderState {
|
||||||
|
|
@ -12,4 +13,8 @@ public interface ICarryOnRenderState {
|
||||||
|
|
||||||
void setRenderWidth(float val);
|
void setRenderWidth(float val);
|
||||||
|
|
||||||
|
Player getPlayer();
|
||||||
|
|
||||||
|
void setPlayer(Player player);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,13 +4,11 @@ import me.shedaniel.clothconfig2.api.ConfigBuilder;
|
||||||
import me.shedaniel.clothconfig2.api.ConfigCategory;
|
import me.shedaniel.clothconfig2.api.ConfigCategory;
|
||||||
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
|
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
|
||||||
import me.shedaniel.clothconfig2.impl.builders.SubCategoryBuilder;
|
import me.shedaniel.clothconfig2.impl.builders.SubCategoryBuilder;
|
||||||
import net.minecraft.client.Minecraft;
|
|
||||||
import net.minecraft.client.gui.screens.Screen;
|
import net.minecraft.client.gui.screens.Screen;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import tschipp.carryon.config.AnnotationData;
|
import tschipp.carryon.config.AnnotationData;
|
||||||
import tschipp.carryon.config.BuiltCategory;
|
import tschipp.carryon.config.BuiltCategory;
|
||||||
import tschipp.carryon.config.BuiltConfig;
|
import tschipp.carryon.config.BuiltConfig;
|
||||||
import tschipp.carryon.config.ConfigLoader;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
package tschipp.carryon.mixin;
|
||||||
|
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
import net.minecraft.client.entity.ClientAvatarEntity;
|
||||||
|
import net.minecraft.client.model.PlayerModel;
|
||||||
|
import net.minecraft.client.renderer.entity.EntityRendererProvider;
|
||||||
|
import net.minecraft.client.renderer.entity.EntityRendererProvider.Context;
|
||||||
|
import net.minecraft.client.renderer.entity.LivingEntityRenderer;
|
||||||
|
import net.minecraft.client.renderer.entity.player.AvatarRenderer;
|
||||||
|
import net.minecraft.client.renderer.entity.state.AvatarRenderState;
|
||||||
|
import net.minecraft.world.entity.Avatar;
|
||||||
|
import tschipp.carryon.client.render.CarryingItemRenderLayer;
|
||||||
|
|
||||||
|
@Mixin(AvatarRenderer.class)
|
||||||
|
public abstract class AvatarRendererMixin<AvatarlikeEntity extends Avatar & ClientAvatarEntity> extends LivingEntityRenderer<AvatarlikeEntity, AvatarRenderState, PlayerModel> {
|
||||||
|
|
||||||
|
public AvatarRendererMixin(Context context, PlayerModel model, float shadowRadius) {
|
||||||
|
super(context, model, shadowRadius);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "<init>(Lnet/minecraft/client/renderer/entity/EntityRendererProvider$Context;Z)V", at = @At("RETURN"))
|
||||||
|
public void init(EntityRendererProvider.Context context, boolean slim, CallbackInfo info) {
|
||||||
|
//Player
|
||||||
|
this.addLayer(new CarryingItemRenderLayer<PlayerModel>(this));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -95,7 +95,7 @@ public abstract class EntityMixin
|
||||||
@Inject(method = "onPassengerTurned(Lnet/minecraft/world/entity/Entity;)V", at = @At("HEAD"))
|
@Inject(method = "onPassengerTurned(Lnet/minecraft/world/entity/Entity;)V", at = @At("HEAD"))
|
||||||
private void onPassengerTurned(Entity toUpdate, CallbackInfo ci)
|
private void onPassengerTurned(Entity toUpdate, CallbackInfo ci)
|
||||||
{
|
{
|
||||||
if((Object)this instanceof Player thisPlayer && toUpdate instanceof Player otherPlayer)
|
if((Object)this instanceof Player thisPlayer && toUpdate instanceof Player)
|
||||||
{
|
{
|
||||||
CarryOnData carry = CarryOnDataManager.getCarryData(thisPlayer);
|
CarryOnData carry = CarryOnDataManager.getCarryData(thisPlayer);
|
||||||
if(carry.isCarrying(CarryType.PLAYER)) {
|
if(carry.isCarrying(CarryType.PLAYER)) {
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,8 @@ public class EntityRendererMixin {
|
||||||
ICarryOnRenderState carryOnRenderState = (ICarryOnRenderState) state;
|
ICarryOnRenderState carryOnRenderState = (ICarryOnRenderState) state;
|
||||||
carryOnRenderState.setCarryOnData(carry);
|
carryOnRenderState.setCarryOnData(carry);
|
||||||
carryOnRenderState.setRenderWidth(CarryRenderHelper.getRenderWidth(player));
|
carryOnRenderState.setRenderWidth(CarryRenderHelper.getRenderWidth(player));
|
||||||
|
|
||||||
|
carryOnRenderState.setPlayer(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,6 @@
|
||||||
|
|
||||||
package tschipp.carryon.mixin;
|
package tschipp.carryon.mixin;
|
||||||
|
|
||||||
|
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
|
||||||
import net.minecraft.world.effect.MobEffects;
|
import net.minecraft.world.effect.MobEffects;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.entity.EntityType;
|
import net.minecraft.world.entity.EntityType;
|
||||||
|
|
@ -30,13 +28,11 @@ import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.storage.ValueInput;
|
import net.minecraft.world.level.storage.ValueInput;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Unique;
|
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
import tschipp.carryon.common.carry.CarryOnData;
|
import tschipp.carryon.common.carry.CarryOnData;
|
||||||
import tschipp.carryon.common.carry.CarryOnDataManager;
|
import tschipp.carryon.common.carry.CarryOnDataManager;
|
||||||
import tschipp.carryon.common.carry.PlacementHandler;
|
|
||||||
import tschipp.carryon.common.carry.CarryOnData.CarryType;
|
import tschipp.carryon.common.carry.CarryOnData.CarryType;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
package tschipp.carryon.mixin;
|
package tschipp.carryon.mixin;
|
||||||
|
|
||||||
import net.minecraft.client.renderer.entity.state.HumanoidRenderState;
|
import net.minecraft.client.renderer.entity.state.HumanoidRenderState;
|
||||||
|
import net.minecraft.world.entity.player.Player;
|
||||||
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Unique;
|
import org.spongepowered.asm.mixin.Unique;
|
||||||
import tschipp.carryon.client.render.ICarryOnRenderState;
|
import tschipp.carryon.client.render.ICarryOnRenderState;
|
||||||
|
|
@ -15,6 +17,10 @@ public class PlayerRenderStateMixin implements ICarryOnRenderState {
|
||||||
@Unique
|
@Unique
|
||||||
public float renderWidth = 0f;
|
public float renderWidth = 0f;
|
||||||
|
|
||||||
|
|
||||||
|
@Unique
|
||||||
|
public Player player = null;
|
||||||
|
|
||||||
@Unique
|
@Unique
|
||||||
@Override
|
@Override
|
||||||
public CarryOnData getCarryOnData() {
|
public CarryOnData getCarryOnData() {
|
||||||
|
|
@ -38,4 +44,14 @@ public class PlayerRenderStateMixin implements ICarryOnRenderState {
|
||||||
public void setRenderWidth(float val) {
|
public void setRenderWidth(float val) {
|
||||||
renderWidth = val;
|
renderWidth = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Player getPlayer() {
|
||||||
|
return player;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPlayer(Player player) {
|
||||||
|
this.player = player;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,8 @@
|
||||||
"HumanoidModelMixin",
|
"HumanoidModelMixin",
|
||||||
"MinecraftMixin",
|
"MinecraftMixin",
|
||||||
"PlayerRenderStateMixin",
|
"PlayerRenderStateMixin",
|
||||||
"EntityRendererMixin"
|
"EntityRendererMixin",
|
||||||
|
"AvatarRendererMixin"
|
||||||
],
|
],
|
||||||
"server": [
|
"server": [
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -37,14 +37,15 @@ public class CarryOnFabricMod implements ModInitializer {
|
||||||
ResourceLocation.fromNamespaceAndPath(Constants.MOD_ID, "carry_on_data"),
|
ResourceLocation.fromNamespaceAndPath(Constants.MOD_ID, "carry_on_data"),
|
||||||
builder -> builder
|
builder -> builder
|
||||||
.initializer(() -> new CarryOnData(new CompoundTag()))
|
.initializer(() -> new CarryOnData(new CompoundTag()))
|
||||||
|
.persistent(CarryOnData.CODEC)
|
||||||
.syncWith(CarryOnData.STREAM_CODEC, (t, p) ->{
|
.syncWith(CarryOnData.STREAM_CODEC, (t, p) ->{
|
||||||
ServerPlayer player = (ServerPlayer) t;
|
ServerPlayer player = (ServerPlayer) t;
|
||||||
// the isAlive check avoids us syncing attachment data about dead players. Which causes a disconnect
|
// the isAlive check avoids us syncing attachment data about dead players. Which causes a disconnect
|
||||||
// player.tickCount > 0 avoids us syncing attachment data about players the instant they spawn.
|
// player.tickCount > 0 avoids us syncing attachment data about players the instant they spawn.
|
||||||
// Which also causes a disconnect as the player entity may not be synced yet.
|
// Which also causes a disconnect as the player entity may not be synced yet.
|
||||||
|
|
||||||
return p.connection != null && player.isAlive() && player.tickCount > 0;
|
return p.connection != null && player.isAlive() && player.tickCount > 0;
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ 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/SubmitNodeCollector;I)V", cancellable = true)
|
@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/SubmitNodeCollector;I)V", cancellable = true)
|
||||||
private void renderArmWithItem(AbstractClientPlayer player, float partialTick, float pitch, InteractionHand hand, float swingProgress, ItemStack item, float equippedProgress, PoseStack poseStack, SubmitNodeCollector nodeCollector, int packedLight, CallbackInfo ci)
|
private void renderArmWithItem(AbstractClientPlayer player, float partialTick, float pitch, InteractionHand hand, float swingProgress, ItemStack item, float equippedProgress, PoseStack poseStack, SubmitNodeCollector nodeCollector, int packedLight, CallbackInfo ci)
|
||||||
{
|
{
|
||||||
if(CarriedObjectRender.drawFirstPerson(player, poseStack, packedLight, partialTick,nodeCollector))
|
if(CarriedObjectRender.draw(player, poseStack, packedLight, partialTick,nodeCollector,true))
|
||||||
ci.cancel();
|
ci.cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package tschipp.carryon.carry;
|
||||||
|
|
||||||
import net.minecraftforge.common.capabilities.AutoRegisterCapability;
|
import net.minecraftforge.common.capabilities.AutoRegisterCapability;
|
||||||
import tschipp.carryon.common.carry.CarryOnData;
|
import tschipp.carryon.common.carry.CarryOnData;
|
||||||
import tschipp.carryon.common.carry.CarryOnDataManager;
|
|
||||||
|
|
||||||
@AutoRegisterCapability
|
@AutoRegisterCapability
|
||||||
public interface ICarryOnDataCapability {
|
public interface ICarryOnDataCapability {
|
||||||
|
|
|
||||||
|
|
@ -50,18 +50,9 @@ public class ClientEvents {
|
||||||
float partialTicks = event.getPartialTick();
|
float partialTicks = event.getPartialTick();
|
||||||
SubmitNodeCollector nodes =event.getNodeCollector();
|
SubmitNodeCollector nodes =event.getNodeCollector();
|
||||||
//If true, cancels event
|
//If true, cancels event
|
||||||
return CarriedObjectRender.drawFirstPerson(player, matrix, light, partialTicks,nodes) && CarryRenderHelper.getPerspective() == 0;
|
return CarriedObjectRender.draw(player, matrix, light, partialTicks,nodes,true) && CarryRenderHelper.getPerspective() == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
@SubscribeEvent
|
|
||||||
public static void onRenderLevel(Render event)
|
|
||||||
{
|
|
||||||
if(event.getStage() == Stage.AFTER_PARTICLES)
|
|
||||||
CarriedObjectRender.drawThirdPerson(Minecraft.getInstance().getTimer().getGameTimeDeltaPartialTick(true), event.getPoseStack());
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static boolean onGuiInit(ScreenEvent.Init.Pre event)
|
public static boolean onGuiInit(ScreenEvent.Init.Pre event)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -49,18 +49,12 @@ public class ClientEvents {
|
||||||
PoseStack matrix = event.getPoseStack();
|
PoseStack matrix = event.getPoseStack();
|
||||||
int light = event.getPackedLight();
|
int light = event.getPackedLight();
|
||||||
float partialTicks = event.getPartialTick();
|
float partialTicks = event.getPartialTick();
|
||||||
SubmitNodeCollector nodes =event.getSubmitNodeCollector();
|
SubmitNodeCollector nodes =event.getSubmitNodeCollector();
|
||||||
|
|
||||||
if(CarriedObjectRender.drawFirstPerson(player, matrix, light, partialTicks,nodes) && CarryRenderHelper.getPerspective() == 0)
|
if(CarriedObjectRender.draw(player, matrix, light, partialTicks,nodes,true) && CarryRenderHelper.getPerspective() == 0)
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
|
||||||
public static void onRenderLevel(RenderLevelStageEvent.AfterEntities event)
|
|
||||||
{
|
|
||||||
CarriedObjectRender.drawThirdPerson(event.getLevelRenderer().getTicks(), event.getPoseStack().last().pose());
|
|
||||||
}
|
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onGuiInit(ScreenEvent.Init.Pre event)
|
public static void onGuiInit(ScreenEvent.Init.Pre event)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user