2024/11/23

搞了一个TOP检测
和重命名了
This commit is contained in:
叁玖领域 2024-11-23 11:49:24 +08:00
parent ce337667dc
commit eedf4b64cf
4 changed files with 84 additions and 41 deletions

View File

@ -19,6 +19,19 @@ version = mod_version
group = mod_group_id
repositories {
maven {
// location of the maven that hosts JEI files since January 2023
name = "Jared's maven"
url = "https://maven.blamejared.com/"
}
maven {
// location of a maven mirror for JEI files, as a fallback
name = "ModMaven"
url = "https://modmaven.dev"
}
maven { // TOP
url "https://maven.k-4u.nl"
}
mavenLocal()
}
@ -96,6 +109,12 @@ dependencies {
// And its provides the option to then use net.minecraft as the group, and one of; client, server or joined as the module name, plus the game version as version.
// For all intends and purposes: You can treat this dependency as if it is a normal library you would use.
implementation "net.neoforged:neoforge:${neo_version}"
compileOnly "mcjty.theoneprobe:theoneprobe:${top_version}"
runtimeOnly("mezz.jei:jei-${mc_version}-neoforge:${jei_version}")
// compile against the JEI API but do not include it at runtime
compileOnly("mezz.jei:jei-${mc_version}-neoforge-api:${jei_version}")
// at runtime, use the full JEI jar for NeoForge
runtimeOnly("mezz.jei:jei-${mc_version}-neoforge:${jei_version}")
// compileOnly("mezz.jei:jei-${mc_version}-neoforge-api:${jei_version}")
// Example optional mod dependency with JEI
// The JEI API is declared for compile time use, while the full JEI artifact is used at runtime

View File

@ -21,9 +21,10 @@ neo_version=21.0.157
neo_version_range=[21.0.0-beta,)
# The loader version range can only use the major version of FML as bounds
loader_version_range=[4,)
top_version = 1.21_neo-12.0.4-6
#jei_setting
#jei_version=19.5.0.59
#mc_version=1.21
jei_version=19.8.2.99
mc_version=1.21
## Mod Properties
# The unique mod identifier for the mod. Must be lowercase in English locale. Must fit the regex [a-z][a-z0-9_]{1,63}

View File

@ -1,14 +1,14 @@
package com.r3944realms.leashedplayer;
import com.r3944realms.leashedplayer.client.renders.entities.ChestItemFeatureRenderer;
import com.r3944realms.leashedplayer.client.renders.entities.ChestItemLayerRenderer;
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 mcjty.theoneprobe.config.Config;
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;
@ -16,22 +16,44 @@ 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.entity.decoration.ArmorStand;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.alchemy.PotionContents;
import net.minecraft.world.item.component.ChargedProjectiles;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.ModList;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
import net.neoforged.neoforge.client.event.EntityRenderersEvent;
import net.neoforged.neoforge.client.event.RegisterColorHandlersEvent;
import net.neoforged.neoforge.client.event.ScreenEvent;
@EventBusSubscriber(value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD, modid = LeashedPlayer.MOD_ID)
public class ClientEventHandler {
@SubscribeEvent
public static void onRegisterItemProperties(FMLClientSetupEvent event) {
public abstract class ClientEventHandler {
@EventBusSubscriber(value = Dist.CLIENT, bus = EventBusSubscriber.Bus.GAME, modid = LeashedPlayer.MOD_ID)
public static class Game extends ClientEventHandler {
private static final boolean IS_TOP_LOADED = ModList.get().isLoaded("theoneprobe");
private static int OldSelect = 0;
@SubscribeEvent
public static void onScreenOpen(ScreenEvent.Opening event) {
if (IS_TOP_LOADED) {
OldSelect = Config.needsProbe.get();
Config.setProbeNeeded(Config.PROBE_NEEDED);
}
}
@SubscribeEvent
public static void onScreenClose(ScreenEvent.Closing event) {
if (IS_TOP_LOADED) {
Config.setProbeNeeded(OldSelect);
}
}
}
@EventBusSubscriber(value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD, modid = LeashedPlayer.MOD_ID)
public static class Mod extends ClientEventHandler {
@SubscribeEvent
public static void onRegisterItemProperties (FMLClientSetupEvent event){
event.enqueueWork(() -> {
ItemProperties.register(Items.CROSSBOW, ResourceLocation.withDefaultNamespace("leash_rope_arrow"),
((pStack, pLevel, pEntity, pSeed) -> {
@ -40,34 +62,35 @@ public class ClientEventHandler {
}));
ItemProperties.register(Items.BOW, ResourceLocation.withDefaultNamespace("leash_rope_arrow_pulling"),
((pStack, pLevel, pEntity, pSeed) ->
(pEntity != null && pEntity.isUsingItem() && pEntity.getUseItem() == pStack && ILeashRopeArrow.isLeashRopeArrow(pStack, pEntity)) ? 1.0F: 0.0F
));
(pEntity != null && pEntity.isUsingItem() && pEntity.getUseItem() == pStack && ILeashRopeArrow.isLeashRopeArrow(pStack, pEntity)) ? 1.0F : 0.0F
));
});
}
@SubscribeEvent
public static void onRegisterRenderer(EntityRenderersEvent.RegisterRenderers event) {
@SubscribeEvent
public static void onRegisterRenderer (EntityRenderersEvent.RegisterRenderers event){
event.registerEntityRenderer(ModEntityRegister.LEASH_ROPE_ARROW.get(), LeashRopeArrowRenderer::new);
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) {
@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.addLayer(new ChestItemLayerRenderer<>(playerRenderer, event.getContext().getItemInHandRenderer()));
}
PlayerRenderer slimRenderer = event.getSkin(PlayerSkin.Model.SLIM);
if (slimRenderer instanceof PlayerRenderer slimPlayerRenderer) {
slimPlayerRenderer.addLayer(new ChestItemFeatureRenderer<>(slimPlayerRenderer, event.getContext().getItemInHandRenderer()));
slimPlayerRenderer.addLayer(new ChestItemLayerRenderer<>(slimPlayerRenderer, event.getContext().getItemInHandRenderer()));
}
}
@SubscribeEvent
public static void onRegisterItemColorHandlers(RegisterColorHandlersEvent.Item event) {
@SubscribeEvent
public static void onRegisterItemColorHandlers (RegisterColorHandlersEvent.Item event){
event.register(
(color, i) -> i > 0
? -1
@ -75,5 +98,5 @@ public class ClientEventHandler {
ModItemRegister.TIPPED_LEASH_ROPE_ARROW.get()
);
}
}
}

View File

@ -14,11 +14,11 @@ 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> {
public class ChestItemLayerRenderer<T extends LivingEntity, M extends EntityModel<T>> extends RenderLayer<T, M> {
private final ItemInHandRenderer heldItemRenderer;
public ChestItemFeatureRenderer(RenderLayerParent<T, M> context, ItemInHandRenderer heldItemRenderer) {
public ChestItemLayerRenderer(RenderLayerParent<T, M> context, ItemInHandRenderer heldItemRenderer) {
super(context);
this.heldItemRenderer = heldItemRenderer;
}
@ -34,10 +34,10 @@ public class ChestItemFeatureRenderer<T extends LivingEntity, M extends EntityMo
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);
this.heldItemRenderer.renderItem(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);
this.heldItemRenderer.renderItem(entity, chestStack, mode, false, matrices, vertexConsumers, light);
matrices.popPose();
matrices.pushPose();
((PlayerModel<?>) this.getParentModel()).rightArm.translateAndRotate(matrices);
@ -45,10 +45,10 @@ public class ChestItemFeatureRenderer<T extends LivingEntity, M extends EntityMo
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);
this.heldItemRenderer.renderItem(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);
this.heldItemRenderer.renderItem(entity, chestStack, mode, false, matrices, vertexConsumers, light);
matrices.popPose();
matrices.pushPose();
((PlayerModel<?>) this.getParentModel()).leftArm.translateAndRotate(matrices);
@ -56,58 +56,58 @@ public class ChestItemFeatureRenderer<T extends LivingEntity, M extends EntityMo
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);
this.heldItemRenderer.renderItem(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);
this.heldItemRenderer.renderItem(entity, chestStack, mode, false, matrices, vertexConsumers, light);
matrices.popPose();
}
}
ItemStack legsStack = ((LivingEntity) entity).getItemBySlot(EquipmentSlot.LEGS);
ItemStack legsStack = entity.getItemBySlot(EquipmentSlot.LEGS);
if (!legsStack.isEmpty()) {
if (!(entity.getEquipmentSlotForItem(legsStack).equals(EquipmentSlot.LEGS))) {
matrices.pushPose();
((PlayerModel) this.getParentModel()).rightLeg.translateAndRotate(matrices);
((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);
this.heldItemRenderer.renderItem(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);
this.heldItemRenderer.renderItem(entity, legsStack, mode, false, matrices, vertexConsumers, light);
matrices.popPose();
matrices.pushPose();
((PlayerModel) this.getParentModel()).leftLeg.translateAndRotate(matrices);
((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);
this.heldItemRenderer.renderItem(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);
this.heldItemRenderer.renderItem(entity, legsStack, mode, false, matrices, vertexConsumers, light);
matrices.popPose();
}
}
ItemStack feetStack = ((LivingEntity) entity).getItemBySlot(EquipmentSlot.FEET);
ItemStack feetStack = entity.getItemBySlot(EquipmentSlot.FEET);
if (!feetStack.isEmpty()) {
if (!(entity.getEquipmentSlotForItem(feetStack).equals(EquipmentSlot.FEET))) {
matrices.pushPose();
((PlayerModel) this.getParentModel()).rightLeg.translateAndRotate(matrices);
((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);
this.heldItemRenderer.renderItem(entity, feetStack, mode, false, matrices, vertexConsumers, light);
matrices.popPose();
matrices.pushPose();
((PlayerModel) this.getParentModel()).leftLeg.translateAndRotate(matrices);
((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);
this.heldItemRenderer.renderItem(entity, feetStack, mode, false, matrices, vertexConsumers, light);
matrices.popPose();
}
}