2024/11/22
好玩(
This commit is contained in:
parent
00eb0e8d68
commit
ce337667dc
|
|
@ -1,15 +1,23 @@
|
|||
package com.r3944realms.leashedplayer;
|
||||
|
||||
import com.r3944realms.leashedplayer.client.renders.entities.ChestItemFeatureRenderer;
|
||||
import com.r3944realms.leashedplayer.client.renders.entities.KidPlayerRenderer;
|
||||
import com.r3944realms.leashedplayer.client.renders.entities.LeashRopeArrowRenderer;
|
||||
import com.r3944realms.leashedplayer.client.renders.entities.SpectralLeashRopeArrowRenderer;
|
||||
import com.r3944realms.leashedplayer.content.entities.ModEntityRegister;
|
||||
import com.r3944realms.leashedplayer.content.items.ModItemRegister;
|
||||
import com.r3944realms.leashedplayer.content.items.type.ILeashRopeArrow;
|
||||
import net.minecraft.client.renderer.entity.EntityRenderer;
|
||||
import net.minecraft.client.renderer.entity.LivingEntityRenderer;
|
||||
import net.minecraft.client.renderer.entity.player.PlayerRenderer;
|
||||
import net.minecraft.client.renderer.item.ItemProperties;
|
||||
import net.minecraft.client.resources.PlayerSkin;
|
||||
import net.minecraft.core.component.DataComponents;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.util.FastColor;
|
||||
import net.minecraft.world.entity.EntityType;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.item.alchemy.PotionContents;
|
||||
import net.minecraft.world.item.component.ChargedProjectiles;
|
||||
|
|
@ -43,6 +51,21 @@ public class ClientEventHandler {
|
|||
event.registerEntityRenderer(ModEntityRegister.SPECTRAL_LEASH_ROPE_ARROW.get(), SpectralLeashRopeArrowRenderer::new);
|
||||
event.registerEntityRenderer(ModEntityRegister.KID.get(), KidPlayerRenderer::create);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onAddLayers(EntityRenderersEvent.AddLayers event) {
|
||||
|
||||
PlayerRenderer renderer = event.getSkin(PlayerSkin.Model.WIDE);
|
||||
if (renderer instanceof PlayerRenderer playerRenderer) {
|
||||
playerRenderer.addLayer(new ChestItemFeatureRenderer<>(playerRenderer, event.getContext().getItemInHandRenderer()));
|
||||
}
|
||||
|
||||
PlayerRenderer slimRenderer = event.getSkin(PlayerSkin.Model.SLIM);
|
||||
if (slimRenderer instanceof PlayerRenderer slimPlayerRenderer) {
|
||||
slimPlayerRenderer.addLayer(new ChestItemFeatureRenderer<>(slimPlayerRenderer, event.getContext().getItemInHandRenderer()));
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onRegisterItemColorHandlers(RegisterColorHandlersEvent.Item event) {
|
||||
event.register(
|
||||
|
|
|
|||
|
|
@ -11,14 +11,12 @@ import com.r3944realms.leashedplayer.content.entities.LeashRopeArrow;
|
|||
import com.r3944realms.leashedplayer.content.entities.LittlePlayer;
|
||||
import com.r3944realms.leashedplayer.content.entities.ModEntityRegister;
|
||||
import com.r3944realms.leashedplayer.content.items.ModItemRegister;
|
||||
import com.r3944realms.leashedplayer.content.items.repcipe.TippedLeashRopeArrowRecipe;
|
||||
import com.r3944realms.leashedplayer.content.misc.LeadBreakItemBehavior;
|
||||
import com.r3944realms.leashedplayer.modInterface.PlayerLeashable;
|
||||
import com.r3944realms.leashedplayer.utils.Util;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.commands.CommandSourceStack;
|
||||
import net.minecraft.core.component.DataComponents;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.tags.ItemTags;
|
||||
import net.minecraft.world.effect.MobEffectInstance;
|
||||
|
|
@ -27,13 +25,10 @@ import net.minecraft.world.entity.EquipmentSlot;
|
|||
import net.minecraft.world.entity.Leashable;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.animal.Fox;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.item.alchemy.PotionBrewing;
|
||||
import net.minecraft.world.item.alchemy.Potions;
|
||||
import net.minecraft.world.item.crafting.RecipeSerializer;
|
||||
import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.DispenserBlock;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
|
|
@ -44,7 +39,6 @@ import net.neoforged.neoforge.event.RegisterCommandsEvent;
|
|||
import net.neoforged.neoforge.event.brewing.RegisterBrewingRecipesEvent;
|
||||
import net.neoforged.neoforge.event.entity.EntityAttributeCreationEvent;
|
||||
import net.neoforged.neoforge.event.tick.EntityTickEvent;
|
||||
import net.neoforged.neoforge.registries.RegisterEvent;
|
||||
|
||||
|
||||
public class CommonEventHandler {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,115 @@
|
|||
package com.r3944realms.leashedplayer.client.renders.entities;
|
||||
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.mojang.math.Axis;
|
||||
import net.minecraft.client.model.EntityModel;
|
||||
import net.minecraft.client.model.PlayerModel;
|
||||
import net.minecraft.client.renderer.ItemInHandRenderer;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
import net.minecraft.client.renderer.entity.RenderLayerParent;
|
||||
import net.minecraft.client.renderer.entity.layers.RenderLayer;
|
||||
import net.minecraft.world.entity.EquipmentSlot;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.item.ItemDisplayContext;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ChestItemFeatureRenderer<T extends LivingEntity, M extends EntityModel<T>> extends RenderLayer<T, M> {
|
||||
|
||||
private final ItemInHandRenderer heldItemRenderer;
|
||||
|
||||
public ChestItemFeatureRenderer(RenderLayerParent<T, M> context, ItemInHandRenderer heldItemRenderer) {
|
||||
super(context);
|
||||
this.heldItemRenderer = heldItemRenderer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(@NotNull PoseStack matrices, @NotNull MultiBufferSource vertexConsumers, int light, @NotNull T entity, float limbAngle, float limbDistance, float tickDelta, float animationProgress, float headYaw, float headPitch) {
|
||||
ItemDisplayContext mode = ItemDisplayContext.FIXED;
|
||||
ItemStack chestStack = entity.getItemBySlot(EquipmentSlot.CHEST);
|
||||
if (!chestStack.isEmpty()) {
|
||||
if (!(entity.getEquipmentSlotForItem(chestStack).equals(EquipmentSlot.CHEST))) {
|
||||
matrices.pushPose();
|
||||
((PlayerModel<?>) this.getParentModel()).body.translateAndRotate(matrices);
|
||||
matrices.mulPose(Axis.XP.rotationDegrees(180));
|
||||
matrices.translate(0, -1 / 4f, 0);
|
||||
matrices.mulPose(Axis.YP.rotationDegrees(180));
|
||||
this.heldItemRenderer.renderItem((LivingEntity) entity, chestStack, mode, false, matrices, vertexConsumers, light);
|
||||
matrices.scale(1.01f, 1.01f, 1.01f);
|
||||
matrices.translate(0, -1 / 4f, 0);
|
||||
this.heldItemRenderer.renderItem((LivingEntity) entity, chestStack, mode, false, matrices, vertexConsumers, light);
|
||||
matrices.popPose();
|
||||
matrices.pushPose();
|
||||
((PlayerModel<?>) this.getParentModel()).rightArm.translateAndRotate(matrices);
|
||||
matrices.mulPose(Axis.XP.rotationDegrees(180));
|
||||
matrices.scale(2/3f, 2/3f, 2/3f);
|
||||
matrices.translate(-1/12f, 0, 0);
|
||||
matrices.mulPose(Axis.YP.rotationDegrees(180));
|
||||
this.heldItemRenderer.renderItem((LivingEntity) entity, chestStack, mode, false, matrices, vertexConsumers, light);
|
||||
matrices.scale(0.99f, 0.99f, 0.99f);
|
||||
matrices.translate(0, -1/2f, 0);
|
||||
this.heldItemRenderer.renderItem((LivingEntity) entity, chestStack, mode, false, matrices, vertexConsumers, light);
|
||||
matrices.popPose();
|
||||
matrices.pushPose();
|
||||
((PlayerModel<?>) this.getParentModel()).leftArm.translateAndRotate(matrices);
|
||||
matrices.mulPose(Axis.XP.rotationDegrees(180));
|
||||
matrices.scale(2/3f, 2/3f, 2/3f);
|
||||
matrices.translate(1/12f, 0, 0);
|
||||
matrices.mulPose(Axis.YP.rotationDegrees(180));
|
||||
this.heldItemRenderer.renderItem((LivingEntity) entity, chestStack, mode, false, matrices, vertexConsumers, light);
|
||||
matrices.scale(0.99f, 0.99f, 0.99f);
|
||||
matrices.translate(0, -1/2f, 0);
|
||||
this.heldItemRenderer.renderItem((LivingEntity) entity, chestStack, mode, false, matrices, vertexConsumers, light);
|
||||
matrices.popPose();
|
||||
}
|
||||
}
|
||||
ItemStack legsStack = ((LivingEntity) entity).getItemBySlot(EquipmentSlot.LEGS);
|
||||
if (!legsStack.isEmpty()) {
|
||||
if (!(entity.getEquipmentSlotForItem(legsStack).equals(EquipmentSlot.LEGS))) {
|
||||
matrices.pushPose();
|
||||
((PlayerModel) this.getParentModel()).rightLeg.translateAndRotate(matrices);
|
||||
matrices.mulPose(Axis.XP.rotationDegrees(180));
|
||||
matrices.scale(2/3f, 2/3f, 2/3f);
|
||||
matrices.translate(0, -1/6f, 0);
|
||||
matrices.mulPose(Axis.YP.rotationDegrees(180));
|
||||
this.heldItemRenderer.renderItem((LivingEntity) entity, legsStack, mode, false, matrices, vertexConsumers, light);
|
||||
matrices.scale(1.01f, 1.01f, 1.01f);
|
||||
matrices.translate(0, -1/3f, 0);
|
||||
this.heldItemRenderer.renderItem((LivingEntity) entity, legsStack, mode, false, matrices, vertexConsumers, light);
|
||||
matrices.popPose();
|
||||
matrices.pushPose();
|
||||
((PlayerModel) this.getParentModel()).leftLeg.translateAndRotate(matrices);
|
||||
matrices.mulPose(Axis.XP.rotationDegrees(180));
|
||||
matrices.scale(2/3f, 2/3f, 2/3f);
|
||||
matrices.translate(0, -1/6f, 0);
|
||||
matrices.mulPose(Axis.YP.rotationDegrees(180));
|
||||
this.heldItemRenderer.renderItem((LivingEntity) entity, legsStack, mode, false, matrices, vertexConsumers, light);
|
||||
matrices.scale(1.01f, 1.01f, 1.01f);
|
||||
matrices.translate(0, -1/3f, 0);
|
||||
this.heldItemRenderer.renderItem((LivingEntity) entity, legsStack, mode, false, matrices, vertexConsumers, light);
|
||||
matrices.popPose();
|
||||
}
|
||||
}
|
||||
ItemStack feetStack = ((LivingEntity) entity).getItemBySlot(EquipmentSlot.FEET);
|
||||
if (!feetStack.isEmpty()) {
|
||||
if (!(entity.getEquipmentSlotForItem(feetStack).equals(EquipmentSlot.FEET))) {
|
||||
matrices.pushPose();
|
||||
((PlayerModel) this.getParentModel()).rightLeg.translateAndRotate(matrices);
|
||||
matrices.mulPose(Axis.XP.rotationDegrees(180));
|
||||
matrices.scale(0.75f, 0.75f, 0.75f);
|
||||
matrices.translate(0, -0.8f, 0);
|
||||
matrices.mulPose(Axis.YP.rotationDegrees(180));
|
||||
this.heldItemRenderer.renderItem((LivingEntity) entity, feetStack, mode, false, matrices, vertexConsumers, light);
|
||||
matrices.popPose();
|
||||
matrices.pushPose();
|
||||
((PlayerModel) this.getParentModel()).leftLeg.translateAndRotate(matrices);
|
||||
matrices.mulPose(Axis.XP.rotationDegrees(180));
|
||||
matrices.scale(0.75f, 0.75f, 0.75f);
|
||||
matrices.translate(0, -0.8f, 0);
|
||||
matrices.mulPose(Axis.YP.rotationDegrees(180));
|
||||
this.heldItemRenderer.renderItem((LivingEntity) entity, feetStack, mode, false, matrices, vertexConsumers, light);
|
||||
matrices.popPose();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -8,8 +8,6 @@ import net.neoforged.bus.api.IEventBus;
|
|||
import net.neoforged.neoforge.registries.DeferredHolder;
|
||||
import net.neoforged.neoforge.registries.DeferredRegister;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class ModRecipeRegister {
|
||||
public static final DeferredRegister<RecipeSerializer<?>> RECIPE_SERIALIZER =
|
||||
DeferredRegister.create(BuiltInRegistries.RECIPE_SERIALIZER, LeashedPlayer.MOD_ID);
|
||||
|
|
|
|||
|
|
@ -11,7 +11,10 @@ import net.minecraft.world.InteractionResultHolder;
|
|||
import net.minecraft.world.entity.Leashable;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.*;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.ShearsItem;
|
||||
import net.minecraft.world.item.Tier;
|
||||
import net.minecraft.world.item.TooltipFlag;
|
||||
import net.minecraft.world.item.component.Tool;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
package com.r3944realms.leashedplayer.mixin.item;
|
||||
|
||||
import net.minecraft.world.inventory.ArmorSlot;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
@Mixin(ArmorSlot.class)
|
||||
public class MixinArmorSlotMixin {
|
||||
@Inject(method = "mayPlace", at = @At("RETURN"), cancellable = true)
|
||||
public void allowItemEquipping(ItemStack stack, CallbackInfoReturnable<Boolean> cir) {
|
||||
cir.setReturnValue(true);
|
||||
}
|
||||
}
|
||||
|
|
@ -20,4 +20,6 @@ public net.minecraft.world.effect.MobEffect <init>(Lnet/minecraft/world/effect/M
|
|||
protected net.minecraft.world.entity.projectile.Projectile cachedOwner # cachedOwner
|
||||
protected net.minecraft.world.entity.projectile.Projectile ownerUUID # ownerUUID
|
||||
#private -> public
|
||||
public net.minecraft.world.item.alchemy.Potion name # name
|
||||
public net.minecraft.world.item.alchemy.Potion name # name
|
||||
#packge-private -> public
|
||||
public net.minecraft.world.inventory.ArmorSlot #ArmorSlot
|
||||
|
|
@ -4,6 +4,7 @@
|
|||
"both.MixinEntity",
|
||||
"both.MixinLivingEntity",
|
||||
"both.MixinPlayer",
|
||||
"item.MixinArmorSlotMixin",
|
||||
"item.MixinLeadItem",
|
||||
"registry.MixinJukeboxSongs",
|
||||
"registry.MixinPaintingVariants",
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user