some cleanup, 3d modeling stuff and terrorist plane fixes
This commit is contained in:
@@ -7,6 +7,7 @@ import net.fabricmc.api.ClientModInitializer;
|
||||
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
|
||||
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
|
||||
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
|
||||
import net.fabricmc.fabric.api.client.model.ModelLoadingRegistry;
|
||||
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
|
||||
import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry;
|
||||
import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry;
|
||||
@@ -18,12 +19,15 @@ import net.minecraft.client.option.KeyBinding;
|
||||
import net.minecraft.client.render.entity.FlyingItemEntityRenderer;
|
||||
import net.minecraft.client.render.entity.animation.Animation;
|
||||
import net.minecraft.client.render.entity.model.EntityModelLayer;
|
||||
import net.minecraft.client.render.item.BuiltinModelItemRenderer;
|
||||
import net.minecraft.client.render.item.ItemRenderer;
|
||||
import net.minecraft.client.sound.EntityTrackingSoundInstance;
|
||||
import net.minecraft.client.sound.PositionedSoundInstance;
|
||||
import net.minecraft.client.sound.SoundInstance;
|
||||
import net.minecraft.client.sound.SoundManager;
|
||||
import net.minecraft.client.util.InputUtil;
|
||||
import net.minecraft.client.render.*;
|
||||
import net.minecraft.client.util.ModelIdentifier;
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
@@ -75,6 +79,13 @@ public class SzarClient implements ClientModInitializer {
|
||||
int loopStart = startOffset + startLength;
|
||||
@Override
|
||||
public void onInitializeClient() {
|
||||
ModelLoadingRegistry.INSTANCE.registerModelProvider((manager, out) -> {
|
||||
ThirdpersonModelRegisterer.getAll().forEach((itemId, modelId) -> {
|
||||
out.accept(new ModelIdentifier(modelId, "inventory"));
|
||||
});
|
||||
});
|
||||
ThirdpersonModelRegisterer.register(new Identifier(MOD_ID, "weed_joint"), new Identifier(MOD_ID, "weed_joint_in_hand"));
|
||||
ThirdpersonModelRegisterer.register(new Identifier(MOD_ID, "fasz"), new Identifier(MOD_ID, "fasz_in_hand"));
|
||||
ClientTickEvents.END_CLIENT_TICK.register(client -> {
|
||||
if (client.player == null) return;
|
||||
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package dev.tggamesyt.szar.client;
|
||||
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.registry.Registries;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class ThirdpersonModelRegisterer {
|
||||
// Maps base item ID -> custom in-hand model ID
|
||||
private static final Map<Identifier, Identifier> CUSTOM_MODELS = new HashMap<>();
|
||||
|
||||
public static void register(Identifier itemId, Identifier inHandModelId) {
|
||||
CUSTOM_MODELS.put(itemId, inHandModelId);
|
||||
}
|
||||
|
||||
public static Identifier get(Item item) {
|
||||
return CUSTOM_MODELS.get(Registries.ITEM.getId(item));
|
||||
}
|
||||
|
||||
public static Map<Identifier, Identifier> getAll() {
|
||||
return Collections.unmodifiableMap(CUSTOM_MODELS);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package dev.tggamesyt.szar.client.mixin;
|
||||
|
||||
import net.minecraft.client.render.VertexConsumerProvider;
|
||||
import net.minecraft.client.render.item.ItemModels;
|
||||
import net.minecraft.client.render.item.ItemRenderer;
|
||||
import net.minecraft.client.render.model.BakedModel;
|
||||
import net.minecraft.client.render.model.BakedModelManager;
|
||||
import net.minecraft.client.render.model.json.ModelTransformationMode;
|
||||
import net.minecraft.client.util.ModelIdentifier;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
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.ModifyVariable;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
|
||||
import dev.tggamesyt.szar.client.ThirdpersonModelRegisterer;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
@Mixin(ItemRenderer.class)
|
||||
public abstract class ItemRendererMixin {
|
||||
|
||||
@ModifyVariable(
|
||||
method = "renderItem(Lnet/minecraft/item/ItemStack;" +
|
||||
"Lnet/minecraft/client/render/model/json/ModelTransformationMode;" +
|
||||
"ZLnet/minecraft/client/util/math/MatrixStack;" +
|
||||
"Lnet/minecraft/client/render/VertexConsumerProvider;" +
|
||||
"IILnet/minecraft/client/render/model/BakedModel;)V",
|
||||
at = @At("HEAD"),
|
||||
argsOnly = true,
|
||||
ordinal = 0
|
||||
)
|
||||
private BakedModel swapThirdPersonModel(
|
||||
BakedModel originalModel,
|
||||
ItemStack stack,
|
||||
ModelTransformationMode renderMode
|
||||
) {
|
||||
if (renderMode != ModelTransformationMode.GUI && renderMode != ModelTransformationMode.GROUND) {
|
||||
|
||||
Identifier customId = ThirdpersonModelRegisterer.get(stack.getItem());
|
||||
if (customId != null) {
|
||||
ModelIdentifier modelId = new ModelIdentifier(customId, "inventory");
|
||||
ItemRenderer self = (ItemRenderer)(Object)this;
|
||||
return self.getModels().getModelManager().getModel(modelId);
|
||||
}
|
||||
}
|
||||
|
||||
return originalModel;
|
||||
}
|
||||
}
|
||||
@@ -4,13 +4,14 @@
|
||||
"package": "dev.tggamesyt.szar.client.mixin",
|
||||
"compatibilityLevel": "JAVA_17",
|
||||
"client": [
|
||||
"ItemRendererMixin",
|
||||
"MouseMixin",
|
||||
"RadiationHeartMixin",
|
||||
"PlayerModelMixin",
|
||||
"RadiatedItemRendererMixin",
|
||||
"RadiationHeartMixin",
|
||||
"SplashOverlayMixin",
|
||||
"TGnameMixin",
|
||||
"TGcapeMixin",
|
||||
"PlayerModelMixin"
|
||||
"TGnameMixin"
|
||||
],
|
||||
"injectors": {
|
||||
"defaultRequire": 1
|
||||
|
||||
Reference in New Issue
Block a user