2024/11/22
好玩(
This commit is contained in:
parent
00eb0e8d68
commit
ce337667dc
|
|
@ -1,15 +1,23 @@
|
||||||
package com.r3944realms.leashedplayer;
|
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.KidPlayerRenderer;
|
||||||
import com.r3944realms.leashedplayer.client.renders.entities.LeashRopeArrowRenderer;
|
import com.r3944realms.leashedplayer.client.renders.entities.LeashRopeArrowRenderer;
|
||||||
import com.r3944realms.leashedplayer.client.renders.entities.SpectralLeashRopeArrowRenderer;
|
import com.r3944realms.leashedplayer.client.renders.entities.SpectralLeashRopeArrowRenderer;
|
||||||
import com.r3944realms.leashedplayer.content.entities.ModEntityRegister;
|
import com.r3944realms.leashedplayer.content.entities.ModEntityRegister;
|
||||||
import com.r3944realms.leashedplayer.content.items.ModItemRegister;
|
import com.r3944realms.leashedplayer.content.items.ModItemRegister;
|
||||||
import com.r3944realms.leashedplayer.content.items.type.ILeashRopeArrow;
|
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.renderer.item.ItemProperties;
|
||||||
|
import net.minecraft.client.resources.PlayerSkin;
|
||||||
import net.minecraft.core.component.DataComponents;
|
import net.minecraft.core.component.DataComponents;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.util.FastColor;
|
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.Items;
|
||||||
import net.minecraft.world.item.alchemy.PotionContents;
|
import net.minecraft.world.item.alchemy.PotionContents;
|
||||||
import net.minecraft.world.item.component.ChargedProjectiles;
|
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.SPECTRAL_LEASH_ROPE_ARROW.get(), SpectralLeashRopeArrowRenderer::new);
|
||||||
event.registerEntityRenderer(ModEntityRegister.KID.get(), KidPlayerRenderer::create);
|
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
|
@SubscribeEvent
|
||||||
public static void onRegisterItemColorHandlers(RegisterColorHandlersEvent.Item event) {
|
public static void onRegisterItemColorHandlers(RegisterColorHandlersEvent.Item event) {
|
||||||
event.register(
|
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.LittlePlayer;
|
||||||
import com.r3944realms.leashedplayer.content.entities.ModEntityRegister;
|
import com.r3944realms.leashedplayer.content.entities.ModEntityRegister;
|
||||||
import com.r3944realms.leashedplayer.content.items.ModItemRegister;
|
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.content.misc.LeadBreakItemBehavior;
|
||||||
import com.r3944realms.leashedplayer.modInterface.PlayerLeashable;
|
import com.r3944realms.leashedplayer.modInterface.PlayerLeashable;
|
||||||
import com.r3944realms.leashedplayer.utils.Util;
|
import com.r3944realms.leashedplayer.utils.Util;
|
||||||
import net.minecraft.ChatFormatting;
|
import net.minecraft.ChatFormatting;
|
||||||
import net.minecraft.commands.CommandSourceStack;
|
import net.minecraft.commands.CommandSourceStack;
|
||||||
import net.minecraft.core.component.DataComponents;
|
import net.minecraft.core.component.DataComponents;
|
||||||
import net.minecraft.core.registries.BuiltInRegistries;
|
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.tags.ItemTags;
|
import net.minecraft.tags.ItemTags;
|
||||||
import net.minecraft.world.effect.MobEffectInstance;
|
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.Leashable;
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
import net.minecraft.world.entity.animal.Fox;
|
import net.minecraft.world.entity.animal.Fox;
|
||||||
import net.minecraft.world.item.Item;
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.Items;
|
import net.minecraft.world.item.Items;
|
||||||
import net.minecraft.world.item.alchemy.PotionBrewing;
|
import net.minecraft.world.item.alchemy.PotionBrewing;
|
||||||
import net.minecraft.world.item.alchemy.Potions;
|
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.Level;
|
||||||
import net.minecraft.world.level.block.DispenserBlock;
|
import net.minecraft.world.level.block.DispenserBlock;
|
||||||
import net.neoforged.bus.api.SubscribeEvent;
|
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.brewing.RegisterBrewingRecipesEvent;
|
||||||
import net.neoforged.neoforge.event.entity.EntityAttributeCreationEvent;
|
import net.neoforged.neoforge.event.entity.EntityAttributeCreationEvent;
|
||||||
import net.neoforged.neoforge.event.tick.EntityTickEvent;
|
import net.neoforged.neoforge.event.tick.EntityTickEvent;
|
||||||
import net.neoforged.neoforge.registries.RegisterEvent;
|
|
||||||
|
|
||||||
|
|
||||||
public class CommonEventHandler {
|
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.DeferredHolder;
|
||||||
import net.neoforged.neoforge.registries.DeferredRegister;
|
import net.neoforged.neoforge.registries.DeferredRegister;
|
||||||
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
public class ModRecipeRegister {
|
public class ModRecipeRegister {
|
||||||
public static final DeferredRegister<RecipeSerializer<?>> RECIPE_SERIALIZER =
|
public static final DeferredRegister<RecipeSerializer<?>> RECIPE_SERIALIZER =
|
||||||
DeferredRegister.create(BuiltInRegistries.RECIPE_SERIALIZER, LeashedPlayer.MOD_ID);
|
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.Leashable;
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
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.*;
|
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.item.component.Tool;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -21,3 +21,5 @@ protected net.minecraft.world.entity.projectile.Projectile cachedOwner # cachedO
|
||||||
protected net.minecraft.world.entity.projectile.Projectile ownerUUID # ownerUUID
|
protected net.minecraft.world.entity.projectile.Projectile ownerUUID # ownerUUID
|
||||||
#private -> public
|
#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.MixinEntity",
|
||||||
"both.MixinLivingEntity",
|
"both.MixinLivingEntity",
|
||||||
"both.MixinPlayer",
|
"both.MixinPlayer",
|
||||||
|
"item.MixinArmorSlotMixin",
|
||||||
"item.MixinLeadItem",
|
"item.MixinLeadItem",
|
||||||
"registry.MixinJukeboxSongs",
|
"registry.MixinJukeboxSongs",
|
||||||
"registry.MixinPaintingVariants",
|
"registry.MixinPaintingVariants",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user