From c7c847aa711c7303dea80dbeef277dd3f48697b8 Mon Sep 17 00:00:00 2001 From: Sarinsa Date: Thu, 30 Jun 2022 14:44:24 +0200 Subject: [PATCH] Made ninja disguises more sneaky --- .../client/NinjaModelDataHolder.java | 28 -------------- .../entity/NinjaSkeletonRenderer.java | 17 +++------ .../entity/skeleton/NinjaSkeletonEntity.java | 3 +- .../common/network/NetworkHelper.java | 17 --------- .../common/network/PacketHandler.java | 3 +- .../message/S2CUpdateNinjaModelData.java | 37 ------------------- .../common/network/work/ClientWork.java | 30 --------------- 7 files changed, 9 insertions(+), 126 deletions(-) delete mode 100644 src/main/java/fathertoast/specialmobs/client/NinjaModelDataHolder.java delete mode 100644 src/main/java/fathertoast/specialmobs/common/network/message/S2CUpdateNinjaModelData.java diff --git a/src/main/java/fathertoast/specialmobs/client/NinjaModelDataHolder.java b/src/main/java/fathertoast/specialmobs/client/NinjaModelDataHolder.java deleted file mode 100644 index 2ce7bc6..0000000 --- a/src/main/java/fathertoast/specialmobs/client/NinjaModelDataHolder.java +++ /dev/null @@ -1,28 +0,0 @@ -package fathertoast.specialmobs.client; - -import net.minecraftforge.client.model.data.EmptyModelData; -import net.minecraftforge.client.model.data.IModelData; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * Here we cache model data for ninja block disguises - * in order to avoid refreshing model data each frame. - */ -public class NinjaModelDataHolder { - - private static final Map MODEL_DATA = new ConcurrentHashMap<>(); - - - public static void putModelData(int entityId, @Nullable IModelData modelData) { - MODEL_DATA.put(entityId, modelData == null ? EmptyModelData.INSTANCE : modelData); - } - - @Nonnull - public static IModelData getModelData(int entityId) { - return MODEL_DATA.getOrDefault(entityId, EmptyModelData.INSTANCE); - } -} diff --git a/src/main/java/fathertoast/specialmobs/client/renderer/entity/NinjaSkeletonRenderer.java b/src/main/java/fathertoast/specialmobs/client/renderer/entity/NinjaSkeletonRenderer.java index a3b792f..6368f9a 100644 --- a/src/main/java/fathertoast/specialmobs/client/renderer/entity/NinjaSkeletonRenderer.java +++ b/src/main/java/fathertoast/specialmobs/client/renderer/entity/NinjaSkeletonRenderer.java @@ -1,27 +1,23 @@ package fathertoast.specialmobs.client.renderer.entity; import com.mojang.blaze3d.matrix.MatrixStack; -import fathertoast.specialmobs.client.NinjaModelDataHolder; import fathertoast.specialmobs.common.entity.ai.INinja; import mcp.MethodsReturnNonnullByDefault; import net.minecraft.block.BlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.BlockRendererDispatcher; import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.client.renderer.chunk.ChunkRenderDispatcher; +import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRendererManager; -import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.entity.monster.AbstractSkeletonEntity; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; +import net.minecraft.world.IBlockDisplayReader; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.client.model.ModelDataManager; import net.minecraftforge.client.model.data.EmptyModelData; -import net.minecraftforge.client.model.data.IModelData; -import org.apache.commons.lang3.ThreadUtils; import javax.annotation.ParametersAreNonnullByDefault; +import java.util.Random; @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault @@ -44,16 +40,15 @@ public class NinjaSkeletonRenderer extends SpecialSkeletonRenderer { } else { shadowRadius = 0.0F; - renderBlockDisguise( entity.getId(), disguiseBlock, matrixStack, buffer, packedLight ); + renderBlockDisguise( disguiseBlock, entity.blockPosition(), entity.level, matrixStack, buffer, entity.getRandom() ); } } - private void renderBlockDisguise( int entityId, BlockState block, MatrixStack matrixStack, IRenderTypeBuffer buffer, int packedLight ) { + private void renderBlockDisguise( BlockState block, BlockPos pos, IBlockDisplayReader displayReader, MatrixStack matrixStack, IRenderTypeBuffer buffer, Random random ) { matrixStack.pushPose(); matrixStack.translate( -0.5, 0.0, -0.5 ); - IModelData modelData = NinjaModelDataHolder.getModelData( entityId ); - blockRenderer.renderBlock( block, matrixStack, buffer, packedLight, OverlayTexture.NO_OVERLAY, modelData ); + blockRenderer.renderModel( block, pos, displayReader, matrixStack, buffer.getBuffer(RenderType.cutout()), false, random, EmptyModelData.INSTANCE ); matrixStack.popPose(); } diff --git a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/NinjaSkeletonEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/NinjaSkeletonEntity.java index a854de2..5c1b0b3 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/NinjaSkeletonEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/NinjaSkeletonEntity.java @@ -13,6 +13,8 @@ import fathertoast.specialmobs.datagen.loot.LootTableBuilder; import mcp.MethodsReturnNonnullByDefault; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; +import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.renderer.WorldRenderer; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; @@ -250,7 +252,6 @@ public class NinjaSkeletonEntity extends _SpecialSkeletonEntity implements INinj @Override public void setHiddenDragon( @Nullable BlockState block ) { getEntityData().set( HIDING_BLOCK, Optional.ofNullable( block ) ); - NetworkHelper.updateNinjaModelData( level, getId(), blockPosition().below() ); canHide = false; // Smoke puff when emerging from disguise diff --git a/src/main/java/fathertoast/specialmobs/common/network/NetworkHelper.java b/src/main/java/fathertoast/specialmobs/common/network/NetworkHelper.java index f6401fe..f292cbe 100644 --- a/src/main/java/fathertoast/specialmobs/common/network/NetworkHelper.java +++ b/src/main/java/fathertoast/specialmobs/common/network/NetworkHelper.java @@ -1,22 +1,5 @@ package fathertoast.specialmobs.common.network; -import fathertoast.specialmobs.common.core.SpecialMobs; -import fathertoast.specialmobs.common.network.message.S2CUpdateNinjaModelData; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraft.world.server.ServerWorld; - -import java.util.List; - public class NetworkHelper { - public static void updateNinjaModelData(World world, int entityId, BlockPos pos) { - if (world.isClientSide) { - SpecialMobs.LOG.warn("Attempted to send ninja block model data packet from client side. What?"); - return; - } - List recipients = ((ServerWorld)world).players(); - recipients.forEach(player -> PacketHandler.sendToClient(new S2CUpdateNinjaModelData(entityId, pos), player)); - } } diff --git a/src/main/java/fathertoast/specialmobs/common/network/PacketHandler.java b/src/main/java/fathertoast/specialmobs/common/network/PacketHandler.java index 721f018..f7c6df0 100644 --- a/src/main/java/fathertoast/specialmobs/common/network/PacketHandler.java +++ b/src/main/java/fathertoast/specialmobs/common/network/PacketHandler.java @@ -1,7 +1,6 @@ package fathertoast.specialmobs.common.network; import fathertoast.specialmobs.common.core.SpecialMobs; -import fathertoast.specialmobs.common.network.message.S2CUpdateNinjaModelData; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.network.PacketBuffer; import net.minecraft.util.ResourceLocation; @@ -34,7 +33,7 @@ public class PacketHandler { } public final void registerMessages() { - registerMessage(S2CUpdateNinjaModelData.class, S2CUpdateNinjaModelData::encode, S2CUpdateNinjaModelData::decode, S2CUpdateNinjaModelData::handle); + } public void registerMessage(Class messageType, BiConsumer encoder, Function decoder, BiConsumer> messageConsumer) { diff --git a/src/main/java/fathertoast/specialmobs/common/network/message/S2CUpdateNinjaModelData.java b/src/main/java/fathertoast/specialmobs/common/network/message/S2CUpdateNinjaModelData.java deleted file mode 100644 index 10fd43a..0000000 --- a/src/main/java/fathertoast/specialmobs/common/network/message/S2CUpdateNinjaModelData.java +++ /dev/null @@ -1,37 +0,0 @@ -package fathertoast.specialmobs.common.network.message; - -import fathertoast.specialmobs.common.network.work.ClientWork; -import net.minecraft.network.PacketBuffer; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fml.network.NetworkEvent; - -import java.util.function.Supplier; - -public class S2CUpdateNinjaModelData { - - public final int entityId; - public final BlockPos pos; - - public S2CUpdateNinjaModelData(int entityId, BlockPos pos) { - this.entityId = entityId; - this.pos = pos; - } - - public static void handle(S2CUpdateNinjaModelData message, Supplier contextSupplier) { - NetworkEvent.Context context = contextSupplier.get(); - - if (context.getDirection().getReceptionSide().isClient()) { - context.enqueueWork(() -> ClientWork.updateNinjaModelData(message)); - } - context.setPacketHandled(true); - } - - public static S2CUpdateNinjaModelData decode(PacketBuffer buffer) { - return new S2CUpdateNinjaModelData(buffer.readInt(), buffer.readBlockPos()); - } - - public static void encode(S2CUpdateNinjaModelData message, PacketBuffer buffer) { - buffer.writeInt(message.entityId); - buffer.writeBlockPos(message.pos); - } -} diff --git a/src/main/java/fathertoast/specialmobs/common/network/work/ClientWork.java b/src/main/java/fathertoast/specialmobs/common/network/work/ClientWork.java index c4ab1f9..d168638 100644 --- a/src/main/java/fathertoast/specialmobs/common/network/work/ClientWork.java +++ b/src/main/java/fathertoast/specialmobs/common/network/work/ClientWork.java @@ -1,34 +1,4 @@ package fathertoast.specialmobs.common.network.work; -import fathertoast.specialmobs.client.NinjaModelDataHolder; -import fathertoast.specialmobs.common.core.SpecialMobs; -import fathertoast.specialmobs.common.entity.ai.INinja; -import fathertoast.specialmobs.common.network.message.S2CUpdateNinjaModelData; -import net.minecraft.client.Minecraft; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.entity.Entity; -import net.minecraftforge.client.model.ModelDataManager; -import net.minecraftforge.client.model.data.IModelData; - public class ClientWork { - - public static void updateNinjaModelData(S2CUpdateNinjaModelData message) { - ClientWorld world = Minecraft.getInstance().level; - - if (world == null) - return; - - Entity entity = world.getEntity(message.entityId); - - if (entity == null) - return; - - if (entity instanceof INinja) { - IModelData modelData = ModelDataManager.getModelData(world, message.pos); - NinjaModelDataHolder.putModelData(message.entityId, modelData); - } - else { - SpecialMobs.LOG.warn("Attempted to update block model data for entity with id \"{}\" and of type \"{}\", but the entity was not a ninja!", message.entityId, entity.getType().getRegistryName()); - } - } }