From bc794d197d587f917451e09ffaf58d41e48ff778 Mon Sep 17 00:00:00 2001 From: Loki Rautio Date: Mon, 3 Nov 2025 19:15:12 -0600 Subject: [PATCH 01/10] guh 1 --- XercaPaintMod/build.gradle | 4 +- XercaPaintMod/gradle.properties | 8 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../java/xerca/xercapaint/CommandImport.java | 191 +++++++++--------- .../java/xerca/xercapaint/PaletteUtil.java | 3 +- .../xerca/xercapaint/client/BasePalette.java | 6 +- .../xercapaint/client/CanvasItemRenderer.java | 3 + .../xercapaint/client/EaselCanvasLayer.java | 3 +- .../xercapaint/client/GuiCanvasEdit.java | 20 +- .../xerca/xercapaint/client/GuiPalette.java | 5 +- .../xerca/xercapaint/entity/EntityCanvas.java | 78 +++---- .../xerca/xercapaint/entity/EntityEasel.java | 21 +- 12 files changed, 180 insertions(+), 164 deletions(-) diff --git a/XercaPaintMod/build.gradle b/XercaPaintMod/build.gradle index 3bd35b6d..8aa96190 100644 --- a/XercaPaintMod/build.gradle +++ b/XercaPaintMod/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.8-SNAPSHOT' + id 'fabric-loom' version '1.12-SNAPSHOT' id 'maven-publish' } @@ -35,7 +35,7 @@ dependencies { minecraft "com.mojang:minecraft:${project.minecraft_version}" mappings loom.layered() { officialMojangMappings() - parchment("org.parchmentmc.data:parchment-1.21.3:2024.12.07@zip") + parchment("org.parchmentmc.data:parchment-1.21.10:2025.10.12@zip") } modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" diff --git a/XercaPaintMod/gradle.properties b/XercaPaintMod/gradle.properties index 578020ce..c39c45ae 100644 --- a/XercaPaintMod/gradle.properties +++ b/XercaPaintMod/gradle.properties @@ -3,13 +3,13 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://modmuss50.me/fabric.html -minecraft_version=1.21.3 -loader_version=0.16.10 +minecraft_version=1.21.10 +loader_version=0.17.3 # Fabric API -fabric_version=0.114.0+1.21.3 +fabric_version=0.137.0+1.21.10 # Mod Properties -mod_version=1.21.3-1.0.0 +mod_version=1.21.10-smponline-1.0.0 maven_group=xerca archives_base_name=xercapaint diff --git a/XercaPaintMod/gradle/wrapper/gradle-wrapper.properties b/XercaPaintMod/gradle/wrapper/gradle-wrapper.properties index 9355b415..ca025c83 100644 --- a/XercaPaintMod/gradle/wrapper/gradle-wrapper.properties +++ b/XercaPaintMod/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/CommandImport.java b/XercaPaintMod/src/main/java/xerca/xercapaint/CommandImport.java index d2706036..1cc10fd8 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/CommandImport.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/CommandImport.java @@ -44,101 +44,102 @@ private static int paintImport(CommandSourceStack stack, String name){ } public static void doImport(CompoundTag tag, ServerPlayer player){ + player.sendSystemMessage(Component.literal("not supported").withStyle(ChatFormatting.GREEN)); // Sanitizing - if (!tag.contains("name", 8)) { - player.sendSystemMessage(Component.translatable("xercapaint.import.fail.5").withStyle(ChatFormatting.RED)); - Mod.LOGGER.warn("Broken paint file"); - return; - } - String canvasId = tag.getString("name"); - if (!canvasId.matches("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}_[0-9]+$")) { - player.sendSystemMessage(Component.translatable("xercapaint.import.fail.5").withStyle(ChatFormatting.RED)); - Mod.LOGGER.warn("Broken paint file"); - return; - } - if ((tag.contains("author", 8) && !tag.contains("title", 8)) || - (!tag.contains("author", 8) && tag.contains("title", 8))) { - player.sendSystemMessage(Component.translatable("xercapaint.import.fail.5").withStyle(ChatFormatting.RED)); - Mod.LOGGER.warn("Broken paint file"); - return; - } - if (tag.contains("title", 8) && tag.getString("title").length() > 16) { - tag.putString("title", tag.getString("title").substring(0, 16)); - } - if (tag.contains("author", 8) && tag.getString("author").length() > 16) { - tag.putString("author", tag.getString("author").substring(0, 16)); - } - if (!tag.contains("v", 3)) { - tag.putInt("v", 1); - } - - byte canvasType = tag.getByte("ct"); - tag.remove("ct"); - if(tag.getInt("generation") > 0){ - tag.putInt("generation", tag.getInt("generation") + 1); - } - - ItemStack itemStack; - boolean doAddItem = false; - if(player.isCreative()){ - CanvasType type = CanvasType.fromByte(canvasType); - if (type == null) { - Mod.LOGGER.error("Invalid canvas type"); - return; - } - switch (type){ - case SMALL -> itemStack = new ItemStack(Items.ITEM_CANVAS); - case LONG -> itemStack = new ItemStack(Items.ITEM_CANVAS_LONG); - case TALL -> itemStack = new ItemStack(Items.ITEM_CANVAS_TALL); - case LARGE -> itemStack = new ItemStack(Items.ITEM_CANVAS_LARGE); - default -> { - Mod.LOGGER.error("Unknown canvas type"); - return; - } - } - doAddItem = true; - } - else { - ItemStack mainhand = player.getMainHandItem(); - ItemStack offhand = player.getOffhandItem(); - - if(!(mainhand.getItem() instanceof ItemCanvas) || (mainhand.get(Items.CANVAS_PIXELS) != null || mainhand.get(Items.CANVAS_ID) != null)){ - player.sendSystemMessage(Component.translatable("xercapaint.import.fail.1").withStyle(ChatFormatting.RED)); - return; - } - if(((ItemCanvas)mainhand.getItem()).getCanvasType() != CanvasType.fromByte(canvasType)){ - Component typeName = Items.ITEM_CANVAS.getName(ItemStack.EMPTY); - CanvasType type = CanvasType.fromByte(canvasType); - if (type == null) { - return; - } - switch (type){ - case LONG -> typeName = Items.ITEM_CANVAS_LONG.getName(ItemStack.EMPTY); - case TALL -> typeName = Items.ITEM_CANVAS_TALL.getName(ItemStack.EMPTY); - case LARGE -> typeName = Items.ITEM_CANVAS_LARGE.getName(ItemStack.EMPTY); - } - player.sendSystemMessage(Component.translatable("xercapaint.import.fail.2", typeName).withStyle(ChatFormatting.RED)); - return; - } - if(!ItemPalette.isFull(offhand)){ - player.sendSystemMessage(Component.translatable("xercapaint.import.fail.3").withStyle(ChatFormatting.RED)); - return; - } - itemStack = mainhand; - } - - itemStack.set(Items.CANVAS_VERSION, tag.getInt("v")); - itemStack.set(Items.CANVAS_ID, canvasId); - itemStack.set(Items.CANVAS_PIXELS, Arrays.stream(tag.getIntArray("pixels")).boxed().toList()); - itemStack.set(Items.CANVAS_GENERATION, tag.getInt("generation")); - if (tag.contains("title", 8) && tag.contains("author", 8)) { - itemStack.set(Items.CANVAS_TITLE, tag.getString("title")); - itemStack.set(Items.CANVAS_AUTHOR, tag.getString("author")); - } - if (doAddItem) { - player.addItem(itemStack); - } - - player.sendSystemMessage(Component.translatable("xercapaint.import.success").withStyle(ChatFormatting.GREEN)); +// if (!tag.contains("name", 8)) { +// player.sendSystemMessage(Component.translatable("xercapaint.import.fail.5").withStyle(ChatFormatting.RED)); +// Mod.LOGGER.warn("Broken paint file"); +// return; +// } +// String canvasId = tag.getString("name"); +// if (!canvasId.matches("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}_[0-9]+$")) { +// player.sendSystemMessage(Component.translatable("xercapaint.import.fail.5").withStyle(ChatFormatting.RED)); +// Mod.LOGGER.warn("Broken paint file"); +// return; +// } +// if ((tag.contains("author", 8) && !tag.contains("title", 8)) || +// (!tag.contains("author", 8) && tag.contains("title", 8))) { +// player.sendSystemMessage(Component.translatable("xercapaint.import.fail.5").withStyle(ChatFormatting.RED)); +// Mod.LOGGER.warn("Broken paint file"); +// return; +// } +// if (tag.contains("title", 8) && tag.getString("title").length() > 16) { +// tag.putString("title", tag.getString("title").substring(0, 16)); +// } +// if (tag.contains("author", 8) && tag.getString("author").length() > 16) { +// tag.putString("author", tag.getString("author").substring(0, 16)); +// } +// if (!tag.contains("v", 3)) { +// tag.putInt("v", 1); +// } +// +// byte canvasType = tag.getByte("ct"); +// tag.remove("ct"); +// if(tag.getInt("generation") > 0){ +// tag.putInt("generation", tag.getInt("generation") + 1); +// } +// +// ItemStack itemStack; +// boolean doAddItem = false; +// if(player.isCreative()){ +// CanvasType type = CanvasType.fromByte(canvasType); +// if (type == null) { +// Mod.LOGGER.error("Invalid canvas type"); +// return; +// } +// switch (type){ +// case SMALL -> itemStack = new ItemStack(Items.ITEM_CANVAS); +// case LONG -> itemStack = new ItemStack(Items.ITEM_CANVAS_LONG); +// case TALL -> itemStack = new ItemStack(Items.ITEM_CANVAS_TALL); +// case LARGE -> itemStack = new ItemStack(Items.ITEM_CANVAS_LARGE); +// default -> { +// Mod.LOGGER.error("Unknown canvas type"); +// return; +// } +// } +// doAddItem = true; +// } +// else { +// ItemStack mainhand = player.getMainHandItem(); +// ItemStack offhand = player.getOffhandItem(); +// +// if(!(mainhand.getItem() instanceof ItemCanvas) || (mainhand.get(Items.CANVAS_PIXELS) != null || mainhand.get(Items.CANVAS_ID) != null)){ +// player.sendSystemMessage(Component.translatable("xercapaint.import.fail.1").withStyle(ChatFormatting.RED)); +// return; +// } +// if(((ItemCanvas)mainhand.getItem()).getCanvasType() != CanvasType.fromByte(canvasType)){ +// Component typeName = Items.ITEM_CANVAS.getName(ItemStack.EMPTY); +// CanvasType type = CanvasType.fromByte(canvasType); +// if (type == null) { +// return; +// } +// switch (type){ +// case LONG -> typeName = Items.ITEM_CANVAS_LONG.getName(ItemStack.EMPTY); +// case TALL -> typeName = Items.ITEM_CANVAS_TALL.getName(ItemStack.EMPTY); +// case LARGE -> typeName = Items.ITEM_CANVAS_LARGE.getName(ItemStack.EMPTY); +// } +// player.sendSystemMessage(Component.translatable("xercapaint.import.fail.2", typeName).withStyle(ChatFormatting.RED)); +// return; +// } +// if(!ItemPalette.isFull(offhand)){ +// player.sendSystemMessage(Component.translatable("xercapaint.import.fail.3").withStyle(ChatFormatting.RED)); +// return; +// } +// itemStack = mainhand; +// } +// +// itemStack.set(Items.CANVAS_VERSION, tag.getInt("v")); +// itemStack.set(Items.CANVAS_ID, canvasId); +// itemStack.set(Items.CANVAS_PIXELS, Arrays.stream(tag.getIntArray("pixels")).boxed().toList()); +// itemStack.set(Items.CANVAS_GENERATION, tag.getInt("generation")); +// if (tag.contains("title", 8) && tag.contains("author", 8)) { +// itemStack.set(Items.CANVAS_TITLE, tag.getString("title")); +// itemStack.set(Items.CANVAS_AUTHOR, tag.getString("author")); +// } +// if (doAddItem) { +// player.addItem(itemStack); +// } +// +// player.sendSystemMessage(Component.translatable("xercapaint.import.success").withStyle(ChatFormatting.GREEN)); } } diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/PaletteUtil.java b/XercaPaintMod/src/main/java/xerca/xercapaint/PaletteUtil.java index 5d900c86..00c34c11 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/PaletteUtil.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/PaletteUtil.java @@ -1,6 +1,5 @@ package xerca.xercapaint; -import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.network.FriendlyByteBuf; public class PaletteUtil { @@ -46,7 +45,7 @@ else if(ratio == 0.f){ int averageMaximum = (int)(Math.max(Math.max(a.r, a.g), a.b)*ratio) + (int)(Math.max(Math.max(b.r, b.g), b.b)*(1-ratio)); int maximumOfAverage = Math.max(Math.max(res.r, res.g), res.b); - int gainFactor = averageMaximum / maximumOfAverage; + int gainFactor = maximumOfAverage == 0 ? 0 : averageMaximum / maximumOfAverage; res.r *= gainFactor; res.g *= gainFactor; diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/BasePalette.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/BasePalette.java index 5fc8632b..039eec1e 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/BasePalette.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/BasePalette.java @@ -157,7 +157,7 @@ public void render(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, flo if (basicColorFlags[i]) { guiGraphics.fill(x - r, y - r, x + r + 1, y + r + 1, basicColors[i].rgbVal()); - guiGraphics.blit(RenderType::guiTextured, paletteTextures, x - 8, y - 8, dyeSpriteX, i * dyeSpriteSize, dyeSpriteSize, dyeSpriteSize, 256, 256); + guiGraphics.blit(RenderPipelines.GUI_TEXTURED, paletteTextures, x - 8, y - 8, dyeSpriteX, i * dyeSpriteSize, dyeSpriteSize, dyeSpriteSize, 256, 256); } else { guiGraphics.fill(x - r, y - r, x + r + 1, y + r + 1, emptinessColor.rgbVal()); } @@ -170,11 +170,11 @@ public void render(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, flo guiGraphics.fill(x - 6, y - 7, x + 7, y + 6, customColors[i].getColor().rgbVal()); } - guiGraphics.blit(RenderType::guiTextured, paletteTextures, (int) paletteX, (int) paletteY, 0, 0, paletteWidth, paletteHeight, 256, 256); + guiGraphics.blit(RenderPipelines.GUI_TEXTURED, paletteTextures, (int) paletteX, (int) paletteY, 0, 0, paletteWidth, paletteHeight, 256, 256); // Draw color picker if (paletteComplete) { - guiGraphics.blit(RenderType::guiTextured, paletteTextures, (int) paletteX + colorPickerPosX, (int) paletteY + colorPickerPosY, colorPickerSpriteX, colorPickerSpriteY, colorPickerSize, colorPickerSize, 256, 256); + guiGraphics.blit(RenderPipelines.GUI_TEXTURED, paletteTextures, (int) paletteX + colorPickerPosX, (int) paletteY + colorPickerPosY, colorPickerSpriteX, colorPickerSpriteY, colorPickerSize, colorPickerSize, 256, 256); } } diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/CanvasItemRenderer.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/CanvasItemRenderer.java index 85e9ebaa..a75bc11f 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/CanvasItemRenderer.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/CanvasItemRenderer.java @@ -1,6 +1,7 @@ package xerca.xercapaint.client; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.textures.GpuTextureView; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; @@ -33,6 +34,8 @@ public CanvasItemRenderer(BlockEntityRenderDispatcher dispatcher, EntityModelSet super(dispatcher, entityModelSet); } + + @Override public void renderByItem(ItemStack stack, ItemDisplayContext displayContext, PoseStack matrixStack, MultiBufferSource buffer, int combinedLight, int combinedOverlay) { if (stack.getItem() instanceof ItemCanvas itemCanvas) { diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/EaselCanvasLayer.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/EaselCanvasLayer.java index 9678c6bc..feb02a9a 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/EaselCanvasLayer.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/EaselCanvasLayer.java @@ -3,6 +3,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.entity.RenderLayerParent; import net.minecraft.client.renderer.entity.layers.RenderLayer; import net.minecraft.world.item.ItemDisplayContext; @@ -16,7 +17,7 @@ public EaselCanvasLayer(RenderLayerParent entityCanvasEntityType, } private void clientPictureInit(Level level) { - if(!level.isClientSide) { + if(!level.isClientSide()) { return; } @@ -180,7 +182,7 @@ public void tick() { this.xo = this.getX(); this.yo = this.getY(); this.zo = this.getZ(); - if (this.tickCounter1++ == 50 && !this.level().isClientSide) { + if (this.tickCounter1++ == 50 && !this.level().isClientSide()) { this.tickCounter1 = 0; if (this.isAlive() && !this.survives()) { this.remove(RemovalReason.DISCARDED); @@ -197,10 +199,10 @@ public void playPlacementSound() { @Override protected void setDirection(@NotNull Direction facingDirectionIn) { Validate.notNull(facingDirectionIn); - this.direction = facingDirectionIn; + this.setDirection(facingDirectionIn); if (facingDirectionIn.getAxis().isHorizontal()) { this.setXRot(0.0F); - this.setYRot((float)(this.direction.get2DDataValue() * 90)); + this.setYRot((float)(this.getDirection().get2DDataValue() * 90)); } else { this.setXRot((float)(-90 * facingDirectionIn.getAxisDirection().getStep())); this.setYRot(0.0F); @@ -214,16 +216,17 @@ protected void setDirection(@NotNull Direction facingDirectionIn) { private double offs(int l) { return l % 32 == 0 ? 0.5D : 0.0D; } - - @Override - public void moveTo(double x, double y, double z, float yRot, float xRot) { - this.setPos(x, y, z); - } - - @Override - public void lerpTo(double x, double y, double z, float yRot, float xRot, int steps) { - this.setPos(x, y, z); - } +// +// +// @Override +// public void moveTo(double x, double y, double z, float yRot, float xRot) { +// this.setPos(x, y, z); +// } +// +// @Override +// public void lerpTo(double x, double y, double z, float yRot, float xRot, int steps) { +// this.setPos(x, y, z); +// } @Override protected @NotNull AABB calculateBoundingBox(@NotNull BlockPos pos, @NotNull Direction direction) { @@ -258,15 +261,15 @@ public void lerpTo(double x, double y, double z, float yRot, float xRot, int ste @Override public boolean survives() { - if(direction.getAxis().isHorizontal()){ + if(this.getDirection().getAxis().isHorizontal()){ return super.survives(); } if (!this.level().noCollision(this)) { return false; } else { - BlockState blockstate = this.level().getBlockState(this.pos.relative(this.direction.getOpposite())); + BlockState blockstate = this.level().getBlockState(this.pos.relative(this.getDirection().getOpposite())); return (blockstate.isSolid() || - this.direction.getAxis().isHorizontal() && DiodeBlock.isDiode(blockstate)) && this.level().getEntities(this, this.getBoundingBox(), HANGING_ENTITY).isEmpty(); + this.getDirection().getAxis().isHorizontal() && DiodeBlock.isDiode(blockstate)) && this.level().getEntities(this, this.getBoundingBox(), (e) -> e instanceof HangingEntity).isEmpty(); } } @@ -308,7 +311,7 @@ private void setCanvasType(CanvasType canvasType) { @Override public @NotNull Packet getAddEntityPacket(@NotNull ServerEntity entity) { - return new ClientboundAddEntityPacket(this, this.direction.get3DDataValue(), this.getPos()); + return new ClientboundAddEntityPacket(this, this.getDirection().get3DDataValue(), this.getPos()); } @Override @@ -318,30 +321,34 @@ public void recreateFromPacket(@NotNull ClientboundAddEntityPacket packet) { } @Override - public void readAdditionalSaveData(CompoundTag tagCompound) { - this.pos = new BlockPos(tagCompound.getInt("TileX"), tagCompound.getInt("TileY"), tagCompound.getInt("TileZ")); - CompoundTag canvasNBT = tagCompound; + protected void readAdditionalSaveData(ValueInput tagCompound) { + this.pos = new BlockPos( + tagCompound.getInt("TileX").orElse(0), + tagCompound.getInt("TileY").orElse(0), + tagCompound.getInt("TileZ").orElse(0) + ); + ValueInput canvasNBT = tagCompound; if(tagCompound.contains("canvas")){ - canvasNBT = tagCompound.getCompound("canvas"); + canvasNBT = tagCompound.childOrEmpty("canvas"); } this.canvasSigned = canvasNBT.contains("author") && canvasNBT.contains("title"); - String canvasId = canvasNBT.getString("name"); + String canvasId = canvasNBT.getString("name").orElse(null); this.setCanvasID(canvasId); - int version = canvasNBT.getInt("v"); + int version = canvasNBT.getInt("v").orElse(0); this.setVersion(version); if(canvasSigned) { - this.canvasAuthor = canvasNBT.getString("author"); - this.canvasTitle = canvasNBT.getString("title"); - this.canvasGeneration = canvasNBT.getInt("generation"); + this.canvasAuthor = canvasNBT.getString("author").orElse(null); + this.canvasTitle = canvasNBT.getString("title").orElse(null); + this.canvasGeneration = canvasNBT.getInt("generation").orElse(0); } Picture picture = PICTURES.get(canvasId); if(picture == null || picture.version < version){ - PICTURES.put(canvasId, new Picture(version, canvasNBT.getIntArray("pixels"))); + PICTURES.put(canvasId, new Picture(version, canvasNBT.getIntArray("pixels").orElse(null))); } - CanvasType canvasType = CanvasType.fromByte(tagCompound.getByte("ctype")); + CanvasType canvasType = CanvasType.fromByte(tagCompound.getByteOr("ctype", (byte) 0)); if (canvasType == null) { Mod.LOGGER.error("EntityCanvas invalid ctype in readAdditionalSaveData"); this.kill((ServerLevel) this.level()); @@ -349,18 +356,19 @@ public void readAdditionalSaveData(CompoundTag tagCompound) { } this.setCanvasType(canvasType); if(tagCompound.contains("Facing") && !tagCompound.contains("RealFace")){ - int facing = tagCompound.getByte("Facing"); + int facing = tagCompound.getByteOr("Facing", (byte)0); Direction horizontal = Direction.from2DDataValue(facing); this.setDirection(horizontal); } else{ - this.setDirection(Direction.from3DDataValue(tagCompound.getByte("RealFace"))); + this.setDirection(Direction.from3DDataValue(tagCompound.getByteOr("RealFace", (byte)0))); } - this.setRotation(tagCompound.getByte("Rotation")); + this.setRotation(tagCompound.getByteOr("Rotation", (byte)0)); } + @Override - public void addAdditionalSaveData(CompoundTag tagCompound) { + public void addAdditionalSaveData(ValueOutput tagCompound) { BlockPos blockpos = this.getPos(); tagCompound.putInt("TileX", blockpos.getX()); tagCompound.putInt("TileY", blockpos.getY()); @@ -373,7 +381,7 @@ public void addAdditionalSaveData(CompoundTag tagCompound) { tagCompound.putInt("generation", canvasGeneration); } tagCompound.putByte("ctype", getCanvasTypeKey()); - tagCompound.putByte("RealFace", (byte)this.direction.get3DDataValue()); + tagCompound.putByte("RealFace", (byte)this.getDirection().get3DDataValue()); tagCompound.putByte("Rotation", (byte)this.getRotation()); Picture picture = PICTURES.get(getCanvasID()); @@ -385,7 +393,7 @@ public void addAdditionalSaveData(CompoundTag tagCompound) { public @NotNull InteractionResult interact(@NotNull Player player, @NotNull InteractionHand hand) { CanvasType canvasType = this.getCanvasType(); if(canvasType == CanvasType.SMALL || canvasType == CanvasType.LARGE){ - if (!this.level().isClientSide) { + if (!this.level().isClientSide()) { setRotation(getRotation() + 1); } return InteractionResult.SUCCESS; diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityEasel.java b/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityEasel.java index 7019b3e3..151ed7a0 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityEasel.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityEasel.java @@ -1,5 +1,6 @@ package xerca.xercapaint.entity; +import com.mojang.realmsclient.dto.ValueObject; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.core.particles.BlockParticleOption; import net.minecraft.core.particles.ParticleTypes; @@ -23,6 +24,8 @@ import net.minecraft.world.level.GameRules; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.NotNull; import xerca.xercapaint.Mod; @@ -64,7 +67,7 @@ public boolean isPushable() { @Override public boolean hurtServer(@NotNull ServerLevel level, @NotNull DamageSource damageSource, float amount) { - if (!this.level().isClientSide && !this.isRemoved()) { + if (!this.level().isClientSide() && !this.isRemoved()) { if(!getItem().isEmpty() && !damageSource.is(DamageTypeTags.IS_EXPLOSION)){ this.dropItem(damageSource.getEntity(), false); } @@ -99,7 +102,7 @@ public void dropItem(@Nullable Entity entity) { private void dropItem(@Nullable Entity entity, boolean dropSelf) { if(painter != null){ - if(!this.level().isClientSide){ + if(!this.level().isClientSide()){ if(dropDeferred == null){ CloseGuiPacket pack = new CloseGuiPacket(); ServerPlayNetworking.send((ServerPlayer) painter, pack); @@ -187,16 +190,16 @@ public void onSyncedDataUpdated(@NotNull EntityDataAccessor accessor) { } @Override - public void addAdditionalSaveData(@NotNull CompoundTag tag) { + public void addAdditionalSaveData(@NotNull ValueOutput tag) { if (!this.getItem().isEmpty()) { - tag.put("Item", this.getItem().save(this.registryAccess())); + tag.store("Item", this.getItem().save(this.registryAccess())); } } @Override - public void readAdditionalSaveData(CompoundTag tag) { - CompoundTag itemTag = tag.getCompound("Item"); - if (!itemTag.isEmpty()) { + public void readAdditionalSaveData(ValueInput tag) { + ValueInput itemTag = tag.childOrEmpty("Item"); + if (!itemTag.keys().isEmpty()) { ItemStack itemStack = ItemStack.parseOptional(this.registryAccess(), itemTag); if (itemStack.isEmpty()) { Mod.LOGGER.warn("Unable to load item from: {}", itemTag); @@ -211,7 +214,7 @@ public void readAdditionalSaveData(CompoundTag tag) { boolean isEaselFilled = !this.getItem().isEmpty(); boolean handHoldsCanvas = itemInHand.getItem() instanceof ItemCanvas; boolean handHoldsPalette = itemInHand.getItem() instanceof ItemPalette; - if(this.level().isClientSide){ + if(this.level().isClientSide()){ return !isEaselFilled && !handHoldsCanvas ? InteractionResult.PASS : InteractionResult.SUCCESS; } else { @@ -250,7 +253,7 @@ public void tick() { super.tick(); move(MoverType.SELF, new Vec3(0, -0.25, 0)); reapplyPosition(); - if(!this.level().isClientSide){ + if(!this.level().isClientSide()){ if(dropDeferred != null){ dropWaitTicks ++; if(painter == null || dropWaitTicks > 80){ From 31e12b1da88fb02523e83538ea8ec4d08f5a5035 Mon Sep 17 00:00:00 2001 From: Loki Rautio Date: Mon, 3 Nov 2025 20:21:22 -0600 Subject: [PATCH 02/10] blah --- XercaPaintMod/build.gradle | 5 +- .../xerca/xercapaint/client/BasePalette.java | 2 +- .../xercapaint/client/GuiCanvasEdit.java | 50 +++++++++++++------ .../xercapaint/client/RenderEntityCanvas.java | 15 ++++-- .../xerca/xercapaint/client/RenderUtil.java | 16 ++++++ 5 files changed, 64 insertions(+), 24 deletions(-) create mode 100644 XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderUtil.java diff --git a/XercaPaintMod/build.gradle b/XercaPaintMod/build.gradle index 8aa96190..9872c11e 100644 --- a/XercaPaintMod/build.gradle +++ b/XercaPaintMod/build.gradle @@ -33,10 +33,7 @@ dependencies { compileOnly 'com.google.code.findbugs:jsr305:3.0.2' // To change the versions see the gradle.properties file minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings loom.layered() { - officialMojangMappings() - parchment("org.parchmentmc.data:parchment-1.21.10:2025.10.12@zip") - } + mappings loom.officialMojangMappings() modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" // Fabric API. This is technically optional, but you probably want it anyway. diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/BasePalette.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/BasePalette.java index 039eec1e..27b68485 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/BasePalette.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/BasePalette.java @@ -147,7 +147,7 @@ protected void superRender(GuiGraphics guiGraphics, int mouseX, int mouseY, floa public void render(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { super.render(guiGraphics, mouseX, mouseY, partialTicks); - RenderSystem.setShaderTexture(0, paletteTextures); + RenderUtil.setShaderTexture(0, paletteTextures); // Draw basic colors for (int i = 0; i < basicColorFlags.length; i++) { diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/GuiCanvasEdit.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/GuiCanvasEdit.java index 10107375..d15f8f5e 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/GuiCanvasEdit.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/GuiCanvasEdit.java @@ -1,13 +1,21 @@ package xerca.xercapaint.client; +import com.mojang.blaze3d.opengl.GlStateManager; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.Window; import com.mojang.blaze3d.systems.RenderSystem; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.Tooltip; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientTextTooltip; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; +import net.minecraft.client.gui.screens.inventory.tooltip.DefaultTooltipPositioner; +import net.minecraft.client.input.CharacterEvent; +import net.minecraft.client.input.KeyEvent; +import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.resources.language.I18n; import net.minecraft.network.chat.Component; @@ -143,7 +151,7 @@ public void init() { Window window = minecraft.getWindow(); // Hide mouse cursor - GLFW.glfwSetInputMode(window.getWindow(), GLFW_CURSOR, GLFW_CURSOR_HIDDEN); + GLFW.glfwSetInputMode(window.handle(), GLFW_CURSOR, GLFW_CURSOR_HIDDEN); int x = window.getGuiScaledWidth() - 120; int y = window.getGuiScaledHeight() - 30; @@ -153,7 +161,7 @@ public void init() { resetPositions(); updateButtons(); - GLFW.glfwSetInputMode(window.getWindow(), GLFW_CURSOR, GLFW_CURSOR_NORMAL); + GLFW.glfwSetInputMode(window.handle(), GLFW_CURSOR, GLFW_CURSOR_NORMAL); } }).bounds(x, y, 98, 20).build()); this.buttonFinalize = this.addRenderableWidget(Button.builder( Component.translatable("canvas.finalizeButton"), button -> { @@ -171,7 +179,7 @@ public void init() { gettingSigned = false; updateButtons(); - GLFW.glfwSetInputMode(window.getWindow(), GLFW_CURSOR, GLFW_CURSOR_HIDDEN); + GLFW.glfwSetInputMode(window.handle(), GLFW_CURSOR, GLFW_CURSOR_HIDDEN); } }).bounds((int)canvasX - 100, 130, 98, 20).build()); @@ -303,6 +311,17 @@ public void tick() { super.tick(); } + private void renderTooltip(GuiGraphics guiGraphics, Font font, List components, int x, int y) { + guiGraphics.renderTooltip( + font, + components.stream().map(Component::getVisualOrderText).map(ClientTooltipComponent::create).toList(), + x, + y, + DefaultTooltipPositioner.INSTANCE, + null + ); + } + @Override public void render(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, float f) { if(!gettingSigned) { @@ -344,7 +363,7 @@ public void render(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, flo if(inBrushMeter(mouseX, mouseY)){ int selectedSize = 3 - (mouseY - brushMeterY)/brushSpriteSize; if(selectedSize <= 3 && selectedSize >= 0){ - guiGraphics.renderTooltip(font, Component.literal("Brush size (" + (selectedSize+1) + ")"), mouseX, mouseY); + this.renderTooltip(guiGraphics, font, List.of(Component.literal("Brush size (" + (selectedSize+1) + ")")), mouseX, mouseY); } } else if(inBrushOpacityMeter(mouseX, mouseY)){ @@ -352,18 +371,18 @@ else if(inBrushOpacityMeter(mouseX, mouseY)){ int selectedOpacity = relativeY/(brushOpacitySpriteSize+1); if(selectedOpacity >= 0 && selectedOpacity <= 3){ int percentage = 100 - 25*selectedOpacity; - guiGraphics.renderTooltip(font, Component.literal("Brush opacity (" + percentage + "%)"), mouseX, mouseY); + this.renderTooltip(guiGraphics, font, List.of(Component.literal("Brush opacity (" + percentage + "%)")), mouseX, mouseY); } } else if(inColorPicker(mouseX-(int)paletteX, mouseY-(int)paletteY)){ - guiGraphics.renderComponentTooltip(font, Arrays.asList(Component.literal("Color picker"), + this.renderTooltip(guiGraphics, font, Arrays.asList(Component.literal("Color picker"), Component.literal("Select the tool, then pick up a color from the canvas and drag-and-drop it to a custom color slot.").withStyle(ChatFormatting.GRAY)), mouseX, mouseY); } else if(inWater(mouseX-(int)paletteX, mouseY-(int)paletteY)){ - guiGraphics.renderComponentTooltip(font, Arrays.asList(Component.literal("Color remover"), + this.renderTooltip(guiGraphics, font, Arrays.asList(Component.literal("Color remover"), Component.literal("Pick up some water and drag-and-drop it to a custom color slot to clear it.").withStyle(ChatFormatting.GRAY)), mouseX, mouseY); }else if(inCanvasHolder(mouseX, mouseY)){ - guiGraphics.renderComponentTooltip(font, Arrays.asList(Component.literal("Canvas holder"), + this.renderTooltip(guiGraphics, font, Arrays.asList(Component.literal("Canvas holder"), Component.literal("Pick up the canvas and move it wherever you want. You can move the palette in the same way.").withStyle(ChatFormatting.GRAY)), mouseX, mouseY); } } @@ -464,7 +483,10 @@ private void playBrushSound(){ } @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers){ + public boolean keyPressed(KeyEvent keyEvent) { + int keyCode = keyEvent.key(); + int modifiers = keyEvent.modifiers(); + //public boolean keyPressed(int keyCode, int scanCode, int modifiers){ if (this.gettingSigned) { switch (keyCode) { case GLFW.GLFW_KEY_BACKSPACE -> { @@ -504,7 +526,7 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers){ brushOpacitySetting = 0; } } - return super.keyPressed(keyCode, scanCode, modifiers); + return super.keyPressed(keyEvent); } } } @@ -514,9 +536,9 @@ private static boolean isAllowedChatCharacter(char var0) { } @Override - public boolean charTyped(char typedChar, int something) { - super.charTyped(typedChar, something); - + public boolean charTyped(CharacterEvent characterEvent) { + super.charTyped(characterEvent); + char typedChar = characterEvent.codepointAsString().charAt(0); if (!this.isSigned) { if (this.gettingSigned) { if (this.canvasTitle.length() < 16 && isAllowedChatCharacter(typedChar)) { @@ -771,7 +793,7 @@ protected void postRender(){ @Override public void renderWidget(@NotNull GuiGraphics guiGraphics, int p_230431_2_, int p_230431_3_, float p_230431_4_) { - RenderSystem.setShaderTexture(0, this.resourceLocation); + //RenderSystem.setShaderTexture(0, this.resourceLocation); GlStateManager._disableDepthTest(); int yTexStartNew = this.yTexStart; if (this.isHovered) { diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityCanvas.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityCanvas.java index 5180cc1f..b98df2c4 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityCanvas.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityCanvas.java @@ -9,9 +9,11 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.entity.state.EntityRenderState; +import net.minecraft.client.renderer.state.CameraRenderState; import net.minecraft.client.renderer.texture.DynamicTexture; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.renderer.texture.TextureManager; @@ -65,8 +67,10 @@ public void extractRenderState(EntityCanvas entity, CanvasRenderState state, flo super.extractRenderState(entity, state, partialTick); } + + @Override - public void render(CanvasRenderState state, PoseStack ms, MultiBufferSource buffer, int packedLight) { + public void submit(CanvasRenderState state, PoseStack ms, SubmitNodeCollector submitNodeCollector, CameraRenderState cameraRenderState) { EntityCanvas canvas = state.canvas; float yaw = canvas.getYRot(); float pitch = canvas.getXRot(); @@ -127,8 +131,9 @@ private Instance(String canvasId, int version, int width, int height) { this.loaded = false; this.width = width; this.height = height; - this.canvasTexture = new DynamicTexture(width, height, true); - this.location = RenderEntityCanvas.this.textureManager.register("canvas/" + canvasId, this.canvasTexture); + this.canvasTexture = new DynamicTexture("canvas/" + canvasId, width, height, true); + this.location = Mod.id("canvas/" + canvasId); + RenderEntityCanvas.this.textureManager.register(this.location, this.canvasTexture); updateCanvasTexture(canvasId, version); } @@ -204,7 +209,7 @@ public void render(@Nullable EntityCanvas canvas, float yaw, float pitch, PoseSt ms.mulPose(Axis.YP.rotationDegrees(180 - yaw)); ms.scale(f, f, f); - RenderSystem.setShaderTexture(0, location); + RenderUtil.setShaderTexture(0, location); Matrix4f m = ms.last().pose(); PoseStack.Pose pose = ms.last(); VertexConsumer vb = buffer.getBuffer(RenderType.entitySolid(location)); @@ -218,7 +223,7 @@ public void render(@Nullable EntityCanvas canvas, float yaw, float pitch, PoseSt vb = buffer.getBuffer(RenderType.entitySolid(backLocation)); // Draw the back and sides final float sideWidth = 1.0F / 16.0F; - RenderSystem.setShaderTexture(0, backLocation); + RenderUtil.setShaderTexture(0, backLocation); addVertex(vb, m, pose, 0.0D, 0.0D, 1.0D, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); addVertex(vb, m, pose, 32.0D * wScale, 0.0D, 1.0D, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); addVertex(vb, m, pose, 32.0D * wScale, 32.0D * hScale, 1.0D, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderUtil.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderUtil.java new file mode 100644 index 00000000..6729df8a --- /dev/null +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderUtil.java @@ -0,0 +1,16 @@ +package xerca.xercapaint.client; + +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.AbstractTexture; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.resources.ResourceLocation; + +public class RenderUtil { + public static void setShaderTexture(int i, ResourceLocation resourceLocation){ + TextureManager textureManager = Minecraft.getInstance().getTextureManager(); + AbstractTexture abstractTexture = textureManager.getTexture(resourceLocation); + abstractTexture.setUseMipmaps(false); + RenderSystem.setShaderTexture(i, abstractTexture.getTextureView()); + } +} From 18fcfc28213b2d0a3df98ab45e026fa907a8ac35 Mon Sep 17 00:00:00 2001 From: Loki Rautio Date: Mon, 3 Nov 2025 21:02:37 -0600 Subject: [PATCH 03/10] moar fixes --- .../java/xerca/xercapaint/CommandExport.java | 76 +++++++++---------- .../xerca/xercapaint/client/BasePalette.java | 47 +++++++----- .../xercapaint/client/CanvasItemRenderer.java | 56 +++++++++----- .../xercapaint/client/GuiCanvasEdit.java | 1 - .../xerca/xercapaint/client/ModClient.java | 24 +----- .../xerca/xercapaint/item/ItemCanvas.java | 19 +++-- .../java/xerca/xercapaint/item/ItemEasel.java | 2 +- .../xerca/xercapaint/item/ItemPalette.java | 12 +-- 8 files changed, 126 insertions(+), 111 deletions(-) diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/CommandExport.java b/XercaPaintMod/src/main/java/xerca/xercapaint/CommandExport.java index a2857d14..f73e8e4a 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/CommandExport.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/CommandExport.java @@ -47,44 +47,44 @@ private static int paintExport(CommandSourceStack stack, String name){ } public static boolean doExport(Player player, String name){ - String dir = "paintings"; - String filename = name + ".paint"; - String filepath = dir + "/" + filename; - File directory = new File(dir); - if (!directory.exists()){ - directory.mkdir(); - } - - for(ItemStack s : player.getHandSlots()){ - if(s.getItem() instanceof ItemCanvas){ - List pixels = s.get(Items.CANVAS_PIXELS); - String canvasId = s.get(Items.CANVAS_ID); - if(pixels != null && canvasId != null){ - try { - int version = s.getOrDefault(Items.CANVAS_VERSION, 1); - int generation = s.getOrDefault(Items.CANVAS_GENERATION, 0); - String title = s.get(Items.CANVAS_TITLE); - String author = s.get(Items.CANVAS_AUTHOR); - - CompoundTag tag = new CompoundTag(); - - tag.putIntArray("pixels", pixels); - tag.putString("name", canvasId); - tag.putInt("v", version); - tag.putInt("generation", generation); - tag.putByte("ct", (byte)((ItemCanvas) s.getItem()).getCanvasType().ordinal()); - if (title != null && author != null) { - tag.putString("title", title); - tag.putString("author", author); - } - NbtIo.write(tag, Path.of(filepath)); - return true; - } catch (IOException e) { - e.printStackTrace(); - } - } - } - } +// String dir = "paintings"; +// String filename = name + ".paint"; +// String filepath = dir + "/" + filename; +// File directory = new File(dir); +// if (!directory.exists()){ +// directory.mkdir(); +// } +// +// for(ItemStack s : player.getHandSlots()){ +// if(s.getItem() instanceof ItemCanvas){ +// List pixels = s.get(Items.CANVAS_PIXELS); +// String canvasId = s.get(Items.CANVAS_ID); +// if(pixels != null && canvasId != null){ +// try { +// int version = s.getOrDefault(Items.CANVAS_VERSION, 1); +// int generation = s.getOrDefault(Items.CANVAS_GENERATION, 0); +// String title = s.get(Items.CANVAS_TITLE); +// String author = s.get(Items.CANVAS_AUTHOR); +// +// CompoundTag tag = new CompoundTag(); +// +// tag.putIntArray("pixels", pixels); +// tag.putString("name", canvasId); +// tag.putInt("v", version); +// tag.putInt("generation", generation); +// tag.putByte("ct", (byte)((ItemCanvas) s.getItem()).getCanvasType().ordinal()); +// if (title != null && author != null) { +// tag.putString("title", title); +// tag.putString("author", author); +// } +// NbtIo.write(tag, Path.of(filepath)); +// return true; +// } catch (IOException e) { +// e.printStackTrace(); +// } +// } +// } +// } return false; } } diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/BasePalette.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/BasePalette.java index 27b68485..9b6dc9f7 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/BasePalette.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/BasePalette.java @@ -4,6 +4,8 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.input.MouseButtonEvent; +import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.resources.sounds.SimpleSoundInstance; import net.minecraft.client.resources.sounds.SoundInstance; @@ -178,21 +180,25 @@ public void render(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, flo } } - protected boolean superMouseClicked(double posX, double posY, int mouseButton){ - return super.mouseClicked(posX, posY, mouseButton); - } - - protected boolean superMouseReleased(double posX, double posY, int mouseButton){ - return super.mouseReleased(posX, posY, mouseButton); - } - - protected boolean superMouseDragged(double posX, double posY, int mouseButton, double deltaX, double deltaY){ - return super.mouseDragged(posX, posY, mouseButton, deltaX, deltaY); - } +// protected boolean superMouseClicked(double posX, double posY, int mouseButton){ +// return super.mouseClicked(posX, posY, mouseButton); +// } +// +// protected boolean superMouseReleased(double posX, double posY, int mouseButton){ +// return super.mouseReleased(posX, posY, mouseButton); +// } +// +// protected boolean superMouseDragged(double posX, double posY, int mouseButton, double deltaX, double deltaY){ +// return super.mouseDragged(posX, posY, mouseButton, deltaX, deltaY); +// } - // Mouse button 0: left, 1: right @Override - public boolean mouseClicked(double posX, double posY, int mouseButton) { + public boolean mouseClicked(MouseButtonEvent mouseButtonEvent, boolean bl) { + double posX = mouseButtonEvent.x(); + double posY = mouseButtonEvent.y(); + int mouseButton = mouseButtonEvent.button(); + // Mouse button 0: left, 1: right + //public boolean mouseClicked(double posX, double posY, int mouseButton) { int mouseX = (int)Math.round(posX); int mouseY = (int)Math.round(posY); @@ -257,7 +263,7 @@ public boolean mouseClicked(double posX, double posY, int mouseButton) { isCarryingPalette = true; } } - return super.mouseClicked(mouseX, mouseY, mouseButton); + return super.mouseClicked(mouseButtonEvent, bl); } protected boolean inColorPicker(int x, int y){ @@ -268,10 +274,7 @@ protected boolean inWater(int x, int y){ return sqrDist(new Vec2(x, y), waterCenter) <= customColorRadius*customColorRadius; } - @Override - public boolean mouseDragged(double posX, double posY, int mouseButton, double deltaX, double deltaY) { - return super.mouseDragged(posX, posY, mouseButton, deltaX, deltaY); - } + protected void setCarryingWater(){ isCarryingWater = true; @@ -292,7 +295,11 @@ protected void setPickingColor(){ } @Override - public boolean mouseReleased(double posX, double posY, int mouseButton) { + public boolean mouseReleased(MouseButtonEvent mouseButtonEvent) { + double posX = mouseButtonEvent.x(); + double posY = mouseButtonEvent.y(); + int mouseButton = mouseButtonEvent.button(); + //public boolean mouseReleased(double posX, double posY, int mouseButton) { int mouseX = (int)Math.round(posX); int mouseY = (int)Math.round(posY); if(isCarryingColor || isCarryingWater) { @@ -324,7 +331,7 @@ public boolean mouseReleased(double posX, double posY, int mouseButton) { carriedCustomColorId = -1; } isCarryingPalette = false; - return super.mouseReleased(posX, posY, mouseButton); + return super.mouseReleased(mouseButtonEvent); } protected void playSound(SoundInstance sound){ diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/CanvasItemRenderer.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/CanvasItemRenderer.java index a75bc11f..7a79eb78 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/CanvasItemRenderer.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/CanvasItemRenderer.java @@ -1,42 +1,38 @@ package xerca.xercapaint.client; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.textures.GpuTextureView; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; -import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry; +import com.mojang.serialization.MapCodec; import net.minecraft.client.model.geom.EntityModelSet; -import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.entity.ItemEntityRenderer; +import net.minecraft.client.renderer.entity.ItemRenderer; +import net.minecraft.client.renderer.special.SpecialModelRenderer; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; +import org.jetbrains.annotations.Nullable; import org.joml.Matrix3f; import org.joml.Matrix4f; +import org.joml.Vector3f; import xerca.xercapaint.Mod; import xerca.xercapaint.item.ItemCanvas; import xerca.xercapaint.item.Items; -import javax.annotation.ParametersAreNonnullByDefault; +import java.util.Set; -@ParametersAreNonnullByDefault -public class CanvasItemRenderer extends BlockEntityWithoutLevelRenderer implements BuiltinItemRendererRegistry.DynamicItemRenderer -{ +public class CanvasItemRenderer implements SpecialModelRenderer { private static final ResourceLocation backLocation = ResourceLocation.fromNamespaceAndPath("minecraft", "textures/block/birch_planks.png"); private static final ResourceLocation emptyCanvasLocation = Mod.id("textures/block/empty.png"); - public CanvasItemRenderer(BlockEntityRenderDispatcher dispatcher, EntityModelSet entityModelSet) { - super(dispatcher, entityModelSet); - } - - - - @Override public void renderByItem(ItemStack stack, ItemDisplayContext displayContext, PoseStack matrixStack, MultiBufferSource buffer, int combinedLight, int combinedOverlay) { if (stack.getItem() instanceof ItemCanvas itemCanvas) { boolean rendered = false; @@ -84,7 +80,7 @@ private void renderEmptyCanvas(PoseStack ms, MultiBufferSource buffer, float wid ms.scale(f, f, f); - RenderSystem.setShaderTexture(0, emptyCanvasLocation); + RenderUtil.setShaderTexture(0, emptyCanvasLocation); Matrix4f m = ms.last().pose(); PoseStack.Pose pose = ms.last(); @@ -100,7 +96,7 @@ private void renderEmptyCanvas(PoseStack ms, MultiBufferSource buffer, float wid // Draw the back and sides final float sideWidth = 1.0F/16.0F; - RenderSystem.setShaderTexture(0, backLocation); + RenderUtil.setShaderTexture(0, backLocation); addVertex(vb, m, pose, 0.0D, 0.0D, 1.0D, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); addVertex(vb, m, pose, 32.0D*wScale, 0.0D, 1.0D, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); addVertex(vb, m, pose, 32.0D*wScale, 32.0D*hScale, 1.0D, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); @@ -131,7 +127,31 @@ private void renderEmptyCanvas(PoseStack ms, MultiBufferSource buffer, float wid } @Override - public void render(ItemStack stack, ItemDisplayContext displayContext, PoseStack matrices, MultiBufferSource vertexConsumers, int light, int overlay) { + public void submit(@Nullable ItemStack stack, ItemDisplayContext displayContext, PoseStack matrices, SubmitNodeCollector submitNodeCollector, int light, int overlay, boolean bl, int k) { renderByItem(stack, displayContext, matrices, vertexConsumers, light, overlay); } -} + + @Override + public void getExtents(Set set) { + + } + + @Override + public @Nullable ItemStack extractArgument(ItemStack itemStack) { + return itemStack; + } + + public static class Unbaked implements SpecialModelRenderer.Unbaked { + public static final MapCodec MAP_CODEC = MapCodec.unit(Unbaked::new); + + @Override + public @Nullable SpecialModelRenderer bake(BakingContext bakingContext) { + return new CanvasItemRenderer(); + } + + @Override + public MapCodec type() { + return MAP_CODEC; + } + } +} \ No newline at end of file diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/GuiCanvasEdit.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/GuiCanvasEdit.java index d15f8f5e..108a96d4 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/GuiCanvasEdit.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/GuiCanvasEdit.java @@ -1,7 +1,6 @@ package xerca.xercapaint.client; import com.mojang.blaze3d.opengl.GlStateManager; -import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.Window; import com.mojang.blaze3d.systems.RenderSystem; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/ModClient.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/ModClient.java index 550c524d..9739b041 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/ModClient.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/ModClient.java @@ -2,13 +2,11 @@ import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; -import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry; import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry; import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry; -import net.fabricmc.fabric.api.object.builder.v1.client.model.FabricModelPredicateProviderRegistry; import net.minecraft.client.Minecraft; import net.minecraft.client.model.geom.ModelLayerLocation; -import net.minecraft.client.renderer.item.ClampedItemPropertyFunction; +import net.minecraft.client.renderer.special.SpecialModelRenderers; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Player; @@ -50,7 +48,7 @@ public static void showCanvasGui(Player player){ final ItemStack offhandItem = player.getOffhandItem(); final Minecraft minecraft = Minecraft.getInstance(); - if(heldItem.isEmpty() || (minecraft.player != null && !minecraft.player.getGameProfile().getId().equals(player.getGameProfile().getId()))){ + if(heldItem.isEmpty() || (minecraft.player != null && !minecraft.player.getGameProfile().id().equals(player.getGameProfile().id()))){ return; } @@ -79,28 +77,14 @@ else if(heldItem.getItem() instanceof ItemPalette){ @Override public void onInitializeClient() { - CANVAS_ITEM_RENDERER = new CanvasItemRenderer(Minecraft.getInstance().getBlockEntityRenderDispatcher(), Minecraft.getInstance().getEntityModels()); - BuiltinItemRendererRegistry.INSTANCE.register(Items.ITEM_CANVAS, CANVAS_ITEM_RENDERER); - BuiltinItemRendererRegistry.INSTANCE.register(Items.ITEM_CANVAS_LARGE, CANVAS_ITEM_RENDERER); - BuiltinItemRendererRegistry.INSTANCE.register(Items.ITEM_CANVAS_LONG, CANVAS_ITEM_RENDERER); - BuiltinItemRendererRegistry.INSTANCE.register(Items.ITEM_CANVAS_TALL, CANVAS_ITEM_RENDERER); + CANVAS_ITEM_RENDERER = new CanvasItemRenderer(); + SpecialModelRenderers.ID_MAPPER.put(Mod.id("canvas_drawn"), CanvasItemRenderer.Unbaked.MAP_CODEC); EntityRendererRegistry.register(Entities.EASEL, new RenderEntityEasel.RenderEntityEaselFactory()); EntityRendererRegistry.register(Entities.CANVAS, new RenderEntityCanvas.RenderEntityCanvasFactory()); EntityModelLayerRegistry.registerModelLayer(EASEL_MAIN_LAYER, EaselModel::createBodyLayer); EntityModelLayerRegistry.registerModelLayer(EASEL_CANVAS_LAYER, EaselModel::createBodyLayer); - ClampedItemPropertyFunction drawn = (itemStack, level, livingEntity, i) -> { - if(itemStack.get(Items.CANVAS_PIXELS) == null) return 0.0f; - else return 1.0F; - }; - ClampedItemPropertyFunction colors = (stack, worldIn, entityIn, i) -> - ((float)ItemPalette.basicColorCount(stack)) / 16.0F; - FabricModelPredicateProviderRegistry.register(Items.ITEM_CANVAS, Mod.id("drawn"), drawn); - FabricModelPredicateProviderRegistry.register(Items.ITEM_CANVAS_LARGE, Mod.id("drawn"), drawn); - FabricModelPredicateProviderRegistry.register(Items.ITEM_CANVAS_LONG, Mod.id("drawn"), drawn); - FabricModelPredicateProviderRegistry.register(Items.ITEM_CANVAS_TALL, Mod.id("drawn"), drawn); - FabricModelPredicateProviderRegistry.register(Items.ITEM_PALETTE, Mod.id("colors"), colors); ClientPlayNetworking.registerGlobalReceiver(CloseGuiPacket.PACKET_ID, new CloseGuiPacketHandler()); ClientPlayNetworking.registerGlobalReceiver(ExportPaintingPacket.PACKET_ID, new ExportPaintingPacketHandler()); diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/item/ItemCanvas.java b/XercaPaintMod/src/main/java/xerca/xercapaint/item/ItemCanvas.java index dc49e2ed..69c2b1ab 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/item/ItemCanvas.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/item/ItemCanvas.java @@ -13,6 +13,7 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.component.TooltipDisplay; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.Level; import org.lwjgl.system.NonnullDefault; @@ -25,6 +26,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.List; +import java.util.function.Consumer; @NonnullDefault public class ItemCanvas extends HangingEntityItem { @@ -37,7 +39,7 @@ public class ItemCanvas extends HangingEntityItem { @Override public InteractionResult use(Level worldIn, Player playerIn, @Nonnull InteractionHand hand) { - if(worldIn.isClientSide){ + if(worldIn.isClientSide()){ ModClient.showCanvasGui(playerIn); } return InteractionResult.SUCCESS.withoutItem(); @@ -52,7 +54,7 @@ public InteractionResult useOn(UseOnContext context) { ItemStack itemstack = context.getItemInHand(); if (player != null) { if (!this.mayPlace(player, direction, itemstack, pos)) { - if (context.getLevel().isClientSide) { + if (context.getLevel().isClientSide()) { ModClient.showCanvasGui(player); } } else { @@ -61,7 +63,7 @@ public InteractionResult useOn(UseOnContext context) { String canvasId = itemstack.get(Items.CANVAS_ID); List canvasPixles = itemstack.get(Items.CANVAS_PIXELS); if (canvasId == null || canvasPixles == null) { - if (context.getLevel().isClientSide) { + if (context.getLevel().isClientSide()) { ModClient.showCanvasGui(player); } return InteractionResult.SUCCESS; @@ -69,7 +71,7 @@ public InteractionResult useOn(UseOnContext context) { int rotation = getRotation(direction, blockpos, player); - if (!world.isClientSide) { + if (!world.isClientSide()) { EntityCanvas entityCanvas = new EntityCanvas(world, itemstack, pos, direction, canvasType, rotation); if (entityCanvas.survives()) { @@ -154,22 +156,23 @@ public Component getName(@Nonnull ItemStack stack) { @Override @net.fabricmc.api.Environment(net.fabricmc.api.EnvType.CLIENT) - public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { + public void appendHoverText(ItemStack stack, TooltipContext context, TooltipDisplay tooltipDisplay, Consumer consumer, TooltipFlag tooltipFlag) { + //public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { List pixels = stack.get(Items.CANVAS_PIXELS); if (pixels != null) { String author = stack.get(Items.CANVAS_AUTHOR); if (!StringUtil.isNullOrEmpty(author)) { - tooltipComponents.add(Component.translatable("canvas.byAuthor", author)); + consumer.accept(Component.translatable("canvas.byAuthor", author)); } int generation = stack.getOrDefault(Items.CANVAS_GENERATION, 0); // generation = 0 means empty, 1 means original, more means copy if(generation > 0){ - tooltipComponents.add((Component.translatable("canvas.generation." + (generation - 1))).withStyle(ChatFormatting.GRAY)); + consumer.accept((Component.translatable("canvas.generation." + (generation - 1))).withStyle(ChatFormatting.GRAY)); } }else{ - tooltipComponents.add(Component.translatable("canvas.empty").withStyle(ChatFormatting.GRAY)); + consumer.accept(Component.translatable("canvas.empty").withStyle(ChatFormatting.GRAY)); } } diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/item/ItemEasel.java b/XercaPaintMod/src/main/java/xerca/xercapaint/item/ItemEasel.java index 57ee6ac7..bf4b9f80 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/item/ItemEasel.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/item/ItemEasel.java @@ -51,7 +51,7 @@ public ItemEasel(String name) { } float f = (float) Mth.floor((Mth.wrapDegrees(ctx.getRotation() - 180.0F) + 22.5F) / 45.0F) * 45.0F; - easel.moveTo(easel.getX(), easel.getY(), easel.getZ(), f, 0.0F); + easel.moveOrInterpolateTo(new Vec3(easel.getX(), easel.getY(), easel.getZ()), f, 0.0F); serverlevel.addFreshEntityWithPassengers(easel); level.playSound(null, easel.getX(), easel.getY(), easel.getZ(), SoundEvents.ARMOR_STAND_PLACE, SoundSource.BLOCKS, 0.75F, 0.8F); level.gameEvent(ctx.getPlayer(), GameEvent.ENTITY_PLACE, easel.getPosition(0)); diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/item/ItemPalette.java b/XercaPaintMod/src/main/java/xerca/xercapaint/item/ItemPalette.java index 7b112964..c2faba6f 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/item/ItemPalette.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/item/ItemPalette.java @@ -13,6 +13,7 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.component.TooltipDisplay; import net.minecraft.world.level.Level; import org.jetbrains.annotations.NotNull; import xerca.xercapaint.Mod; @@ -22,6 +23,7 @@ import javax.annotation.Nonnull; import java.util.Arrays; import java.util.List; +import java.util.function.Consumer; import java.util.stream.IntStream; public class ItemPalette extends Item { @@ -32,7 +34,7 @@ public class ItemPalette extends Item { @Nonnull @Override public InteractionResult use(Level worldIn, @NotNull Player playerIn, @Nonnull InteractionHand hand) { - if(worldIn.isClientSide) { + if(worldIn.isClientSide()) { ModClient.showCanvasGui(playerIn); } return InteractionResult.SUCCESS.withoutItem(); @@ -61,11 +63,11 @@ public static int basicColorCount(ItemStack stack){ @Override @net.fabricmc.api.Environment(net.fabricmc.api.EnvType.CLIENT) - public void appendHoverText(ItemStack stack, @NotNull TooltipContext context, @NotNull List tooltip, @NotNull TooltipFlag flagIn) { + public void appendHoverText(ItemStack stack, TooltipContext context, TooltipDisplay tooltipDisplay, Consumer consumer, TooltipFlag flagIn) { byte[] basicColors = stack.get(Items.PALETTE_BASIC_COLORS); ComponentCustomColor customColorComp = stack.get(Items.PALETTE_CUSTOM_COLORS); if (basicColors == null && customColorComp == null) { - tooltip.add(Component.translatable("palette.empty").withStyle(ChatFormatting.GRAY)); + consumer.accept(Component.translatable("palette.empty").withStyle(ChatFormatting.GRAY)); } else { if (basicColors != null && basicColors.length == 16) { @@ -73,7 +75,7 @@ public void appendHoverText(ItemStack stack, @NotNull TooltipContext context, @N for(byte basicColor : basicColors){ basicCount += basicColor; } - tooltip.add(Component.translatable("palette.basic_count", String.valueOf(basicCount)).withStyle(ChatFormatting.GRAY)); + consumer.accept(Component.translatable("palette.basic_count", String.valueOf(basicCount)).withStyle(ChatFormatting.GRAY)); } if (customColorComp != null) { @@ -83,7 +85,7 @@ public void appendHoverText(ItemStack stack, @NotNull TooltipContext context, @N fullCount++; } } - tooltip.add(Component.translatable("palette.custom_count", String.valueOf(fullCount)).withStyle(ChatFormatting.GRAY)); + consumer.accept(Component.translatable("palette.custom_count", String.valueOf(fullCount)).withStyle(ChatFormatting.GRAY)); } } } From 7b6e5c5af32ac4a6e237fccc1549bf1be64d3a7f Mon Sep 17 00:00:00 2001 From: Loki Rautio Date: Mon, 3 Nov 2025 21:42:55 -0600 Subject: [PATCH 04/10] fix entity rendering somewhat, semistable in-game --- .../java/xerca/xercapaint/CommandExport.java | 10 -- .../java/xerca/xercapaint/CommandImport.java | 6 - .../java/xerca/xercapaint/SoundEvents.java | 1 - .../xerca/xercapaint/client/BasePalette.java | 24 ++-- .../xercapaint/client/CanvasItemRenderer.java | 97 ++++++++-------- .../xercapaint/client/EaselCanvasLayer.java | 4 +- .../xercapaint/client/GuiCanvasEdit.java | 45 +++++--- .../xerca/xercapaint/client/GuiPalette.java | 12 +- .../xerca/xercapaint/client/ModClient.java | 1 - .../xercapaint/client/RenderEntityCanvas.java | 104 ++++++++++-------- .../xercapaint/client/RenderEntityEasel.java | 41 +++++-- .../xerca/xercapaint/entity/EntityCanvas.java | 1 - .../xerca/xercapaint/entity/EntityEasel.java | 6 +- .../xerca/xercapaint/item/ItemPalette.java | 3 - .../packets/CanvasMiniUpdatePacket.java | 1 - .../packets/CanvasUpdatePacket.java | 1 - .../xercapaint/packets/CloseGuiPacket.java | 1 - .../xercapaint/packets/EaselLeftPacket.java | 1 - .../packets/ExportPaintingPacket.java | 1 - .../packets/ImportPaintingPacket.java | 1 - .../packets/ImportPaintingSendPacket.java | 1 - .../xercapaint/packets/OpenGuiPacket.java | 1 - .../packets/PaletteUpdatePacket.java | 1 - .../packets/PictureRequestPacket.java | 1 - .../xercapaint/packets/PictureSendPacket.java | 1 - .../src/main/resources/fabric.mod.json | 2 +- 26 files changed, 185 insertions(+), 183 deletions(-) diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/CommandExport.java b/XercaPaintMod/src/main/java/xerca/xercapaint/CommandExport.java index f73e8e4a..8635293d 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/CommandExport.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/CommandExport.java @@ -5,21 +5,11 @@ import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtIo; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import xerca.xercapaint.item.ItemCanvas; -import xerca.xercapaint.item.Items; import xerca.xercapaint.packets.ExportPaintingPacket; -import java.io.File; -import java.io.IOException; -import java.nio.file.Path; -import java.util.List; - public class CommandExport { public static void register(CommandDispatcher dispatcher) { dispatcher.register( diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/CommandImport.java b/XercaPaintMod/src/main/java/xerca/xercapaint/CommandImport.java index 1cc10fd8..4c9d36ca 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/CommandImport.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/CommandImport.java @@ -10,14 +10,8 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.ItemStack; -import xerca.xercapaint.item.ItemCanvas; -import xerca.xercapaint.item.ItemPalette; -import xerca.xercapaint.item.Items; import xerca.xercapaint.packets.ImportPaintingPacket; -import java.util.Arrays; - public class CommandImport { public static void register(CommandDispatcher dispatcher) { dispatcher.register( diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/SoundEvents.java b/XercaPaintMod/src/main/java/xerca/xercapaint/SoundEvents.java index 51931401..786ca16c 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/SoundEvents.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/SoundEvents.java @@ -1,7 +1,6 @@ package xerca.xercapaint; import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; import static net.minecraft.core.registries.BuiltInRegistries.SOUND_EVENT; diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/BasePalette.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/BasePalette.java index 9b6dc9f7..ae1c29ba 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/BasePalette.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/BasePalette.java @@ -1,12 +1,10 @@ package xerca.xercapaint.client; -import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.input.MouseButtonEvent; import net.minecraft.client.renderer.RenderPipelines; -import net.minecraft.client.renderer.RenderType; import net.minecraft.client.resources.sounds.SimpleSoundInstance; import net.minecraft.client.resources.sounds.SoundInstance; import net.minecraft.network.chat.Component; @@ -180,17 +178,17 @@ public void render(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, flo } } -// protected boolean superMouseClicked(double posX, double posY, int mouseButton){ -// return super.mouseClicked(posX, posY, mouseButton); -// } -// -// protected boolean superMouseReleased(double posX, double posY, int mouseButton){ -// return super.mouseReleased(posX, posY, mouseButton); -// } -// -// protected boolean superMouseDragged(double posX, double posY, int mouseButton, double deltaX, double deltaY){ -// return super.mouseDragged(posX, posY, mouseButton, deltaX, deltaY); -// } + protected boolean superMouseClicked(MouseButtonEvent mouseButton, boolean bl){ + return super.mouseClicked(mouseButton, bl); + } + + protected boolean superMouseReleased(MouseButtonEvent mouseButton){ + return super.mouseReleased(mouseButton); + } + + protected boolean superMouseDragged(MouseButtonEvent mouseButton, double d, double e){ + return super.mouseDragged(mouseButton, d, e); + } @Override public boolean mouseClicked(MouseButtonEvent mouseButtonEvent, boolean bl) { diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/CanvasItemRenderer.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/CanvasItemRenderer.java index 7a79eb78..9ab0c9a5 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/CanvasItemRenderer.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/CanvasItemRenderer.java @@ -1,18 +1,12 @@ package xerca.xercapaint.client; -import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; import com.mojang.serialization.MapCodec; -import net.minecraft.client.model.geom.EntityModelSet; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.SubmitNodeCollector; -import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher; -import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; -import net.minecraft.client.renderer.entity.ItemEntityRenderer; -import net.minecraft.client.renderer.entity.ItemRenderer; import net.minecraft.client.renderer.special.SpecialModelRenderer; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.core.Direction; @@ -33,19 +27,19 @@ public class CanvasItemRenderer implements SpecialModelRenderer { private static final ResourceLocation backLocation = ResourceLocation.fromNamespaceAndPath("minecraft", "textures/block/birch_planks.png"); private static final ResourceLocation emptyCanvasLocation = Mod.id("textures/block/empty.png"); - public void renderByItem(ItemStack stack, ItemDisplayContext displayContext, PoseStack matrixStack, MultiBufferSource buffer, int combinedLight, int combinedOverlay) { + public void renderByItem(ItemStack stack, ItemDisplayContext displayContext, PoseStack matrixStack, SubmitNodeCollector submitNodeCollector, int combinedLight, int combinedOverlay) { if (stack.getItem() instanceof ItemCanvas itemCanvas) { boolean rendered = false; if(stack.get(Items.CANVAS_PIXELS) != null && RenderEntityCanvas.theInstance != null){ RenderEntityCanvas.Instance canvasIns = RenderEntityCanvas.theInstance.getCanvasRendererInstance(stack, itemCanvas.getWidth(), itemCanvas.getHeight()); if(canvasIns != null){ - canvasIns.render(null, 0, 0, matrixStack, buffer, Direction.UP, combinedLight); + canvasIns.render(null, 0, 0, matrixStack, submitNodeCollector, Direction.UP, combinedLight); rendered = true; } } if(!rendered) { - renderEmptyCanvas(matrixStack, buffer, itemCanvas.getWidth(), itemCanvas.getHeight(), combinedLight); + renderEmptyCanvas(matrixStack, submitNodeCollector, itemCanvas.getWidth(), itemCanvas.getHeight(), combinedLight); } } } @@ -55,7 +49,7 @@ private void addVertex(VertexConsumer vb, Matrix4f m, PoseStack.Pose pose, doubl vb.addVertex(m, (float) x, (float)y, (float)z).setColor(255, 255, 255, 255).setUv(tx, ty).setOverlay(OverlayTexture.NO_OVERLAY).setLight(lightmap).setNormal(pose, xOff, yOff, zOff); } - private void renderEmptyCanvas(PoseStack ms, MultiBufferSource buffer, float width, float height, int packedLight){ + private void renderEmptyCanvas(PoseStack ms, SubmitNodeCollector submitNodeCollector, float width, float height, int packedLight){ final float wScale = width/16.0f; final float hScale = height/16.0f; @@ -84,51 +78,54 @@ private void renderEmptyCanvas(PoseStack ms, MultiBufferSource buffer, float wid Matrix4f m = ms.last().pose(); PoseStack.Pose pose = ms.last(); - VertexConsumer vb = buffer.getBuffer(RenderType.entitySolid(emptyCanvasLocation)); - - // Draw the front - addVertex(vb, m, pose, 0.0F, 32.0F*hScale, -1.0F, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0F*wScale, 32.0F*hScale, -1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0F*wScale, 0.0F, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 0.0F, 0.0F, -1.0F, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - - vb = buffer.getBuffer(RenderType.entitySolid(backLocation)); - // Draw the back and sides - final float sideWidth = 1.0F/16.0F; - - RenderUtil.setShaderTexture(0, backLocation); - addVertex(vb, m, pose, 0.0D, 0.0D, 1.0D, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0D*wScale, 0.0D, 1.0D, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0D*wScale, 32.0D*hScale, 1.0D, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 0.0D, 32.0D*hScale, 1.0D, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - - // Sides - addVertex(vb, m, pose, 0.0D, 0.0D, 1.0D, sideWidth, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 0.0D, 32.0D*hScale, 1.0D, sideWidth, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 0.0D, 32.0D*hScale, -1.0D, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 0.0D, 0.0D, -1.0D, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - - addVertex(vb, m, pose, 0.0D, 32.0D*hScale, 1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0D*wScale, 32.0D*hScale, 1.0F, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0D*wScale, 32.0D*hScale, -1.0F, 1.0F, sideWidth, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 0.0D, 32.0D*hScale, -1.0F, 0.0F, sideWidth, packedLight, xOffset, yOffset, zOffset); - - addVertex(vb, m, pose, 32.0D*wScale, 0.0D, -1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0D*wScale, 32.0D*hScale, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0D*wScale, 32.0D*hScale, 1.0F, sideWidth, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0D*wScale, 0.0D, 1.0F, sideWidth, 0.0F, packedLight, xOffset, yOffset, zOffset); - - addVertex(vb, m, pose, 0.0D, 0.0D, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0D*wScale, 0.0D, -1.0F, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0D*wScale, 0.0D, 1.0F, 1.0F, 1.0F-sideWidth, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 0.0D, 0.0D, 1.0F, 0.0F, 1.0F-sideWidth, packedLight, xOffset, yOffset, zOffset); - + submitNodeCollector.submitCustomGeometry(ms, RenderType.entitySolid(emptyCanvasLocation), (p, vb) -> { + // Draw the front + addVertex(vb, m, pose, 0.0F, 32.0F*hScale, -1.0F, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, pose, 32.0F*wScale, 32.0F*hScale, -1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, pose, 32.0F*wScale, 0.0F, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, pose, 0.0F, 0.0F, -1.0F, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + + submitNodeCollector.submitCustomGeometry(ms, RenderType.entitySolid(backLocation), (p2, vb2) -> { + // Draw the back and sides + final float sideWidth = 1.0F/16.0F; + + RenderUtil.setShaderTexture(0, backLocation); + addVertex(vb2, m, pose, 0.0D, 0.0D, 1.0D, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D*wScale, 0.0D, 1.0D, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D*wScale, 32.0D*hScale, 1.0D, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 0.0D, 32.0D*hScale, 1.0D, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + + // Sides + addVertex(vb2, m, pose, 0.0D, 0.0D, 1.0D, sideWidth, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 0.0D, 32.0D*hScale, 1.0D, sideWidth, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 0.0D, 32.0D*hScale, -1.0D, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 0.0D, 0.0D, -1.0D, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + + addVertex(vb2, m, pose, 0.0D, 32.0D*hScale, 1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D*wScale, 32.0D*hScale, 1.0F, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D*wScale, 32.0D*hScale, -1.0F, 1.0F, sideWidth, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 0.0D, 32.0D*hScale, -1.0F, 0.0F, sideWidth, packedLight, xOffset, yOffset, zOffset); + + addVertex(vb2, m, pose, 32.0D*wScale, 0.0D, -1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D*wScale, 32.0D*hScale, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D*wScale, 32.0D*hScale, 1.0F, sideWidth, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D*wScale, 0.0D, 1.0F, sideWidth, 0.0F, packedLight, xOffset, yOffset, zOffset); + + addVertex(vb2, m, pose, 0.0D, 0.0D, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D*wScale, 0.0D, -1.0F, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D*wScale, 0.0D, 1.0F, 1.0F, 1.0F-sideWidth, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 0.0D, 0.0D, 1.0F, 0.0F, 1.0F-sideWidth, packedLight, xOffset, yOffset, zOffset); + + + }); + + }); ms.popPose(); } @Override public void submit(@Nullable ItemStack stack, ItemDisplayContext displayContext, PoseStack matrices, SubmitNodeCollector submitNodeCollector, int light, int overlay, boolean bl, int k) { - renderByItem(stack, displayContext, matrices, vertexConsumers, light, overlay); + renderByItem(stack, displayContext, matrices, submitNodeCollector, light, overlay); } @Override diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/EaselCanvasLayer.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/EaselCanvasLayer.java index feb02a9a..d7072030 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/EaselCanvasLayer.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/EaselCanvasLayer.java @@ -2,13 +2,11 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; -import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.entity.RenderLayerParent; import net.minecraft.client.renderer.entity.layers.RenderLayer; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; -import org.jetbrains.annotations.NotNull; import xerca.xercapaint.item.ItemCanvas; public class EaselCanvasLayer extends RenderLayer { @@ -53,7 +51,7 @@ public void submit(PoseStack poseStack, SubmitNodeCollector nodeCollector, int i } } - ModClient.CANVAS_ITEM_RENDERER.renderByItem(itemstack, ItemDisplayContext.FIXED, poseStack, bufferSource, i, 0); + ModClient.CANVAS_ITEM_RENDERER.renderByItem(itemstack, ItemDisplayContext.FIXED, poseStack, nodeCollector, i, 0); poseStack.popPose(); } diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/GuiCanvasEdit.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/GuiCanvasEdit.java index 108a96d4..ac75dfce 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/GuiCanvasEdit.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/GuiCanvasEdit.java @@ -2,20 +2,18 @@ import com.mojang.blaze3d.opengl.GlStateManager; import com.mojang.blaze3d.platform.Window; -import com.mojang.blaze3d.systems.RenderSystem; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.minecraft.ChatFormatting; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.Tooltip; -import net.minecraft.client.gui.screens.inventory.tooltip.ClientTextTooltip; import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; import net.minecraft.client.gui.screens.inventory.tooltip.DefaultTooltipPositioner; import net.minecraft.client.input.CharacterEvent; import net.minecraft.client.input.KeyEvent; +import net.minecraft.client.input.MouseButtonEvent; import net.minecraft.client.renderer.RenderPipelines; -import net.minecraft.client.renderer.RenderType; import net.minecraft.client.resources.language.I18n; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -574,10 +572,15 @@ public boolean mouseScrolled(double posX, double posY, double scrollX, double sc } // Mouse button 0: left, 1: right + @Override - public boolean mouseClicked(double posX, double posY, int mouseButton) { + public boolean mouseClicked(MouseButtonEvent mouseButtonEvent, boolean bl) { + double posX = mouseButtonEvent.x(); + double posY = mouseButtonEvent.y(); + int mouseButton = mouseButtonEvent.button(); + if(gettingSigned){ - return super.superMouseClicked(posX, posY, mouseButton); + return super.superMouseClicked(mouseButtonEvent, bl); } int mouseX = (int)Math.floor(posX); @@ -605,7 +608,7 @@ public boolean mouseClicked(double posX, double posY, int mouseButton) { clickedCanvas(mouseX, mouseY, mouseButton); playBrushSound(); } - return super.superMouseClicked(mouseX, mouseY, mouseButton); + return super.superMouseClicked(mouseButtonEvent, bl); } if(inBrushMeter(mouseX, mouseY)){ @@ -613,7 +616,7 @@ public boolean mouseClicked(double posX, double posY, int mouseButton) { if(selectedSize <= 3 && selectedSize >= 0){ brushSize = selectedSize; } - return super.superMouseClicked(mouseX, mouseY, mouseButton); + return super.superMouseClicked(mouseButtonEvent, bl); } if(inBrushOpacityMeter(mouseX, mouseY)){ int relativeY = mouseY - brushOpacityMeterY; @@ -621,12 +624,12 @@ public boolean mouseClicked(double posX, double posY, int mouseButton) { if(selectedOpacity >= 0 && selectedOpacity <= 3){ brushOpacitySetting = selectedOpacity; } - return super.superMouseClicked(mouseX, mouseY, mouseButton); + return super.superMouseClicked(mouseButtonEvent, bl); } if(inCanvasHolder(mouseX, mouseY)){ isCarryingCanvas = true; } - return super.mouseClicked(mouseX, mouseY, mouseButton); + return super.mouseClicked(mouseButtonEvent, bl); } private void clickedCanvas(int mouseX, int mouseY, int mouseButton){ @@ -641,10 +644,14 @@ private void clickedCanvas(int mouseX, int mouseY, int mouseButton){ } @Override - public boolean mouseReleased(double posX, double posY, int mouseButton) { + public boolean mouseReleased(MouseButtonEvent mouseButtonEvent) { + double posX = mouseButtonEvent.x(); + double posY = mouseButtonEvent.y(); + int mouseButton = mouseButtonEvent.button(); + isCarryingCanvas = false; if(gettingSigned){ - return super.superMouseReleased(posX, posY, mouseButton); + return super.superMouseReleased(mouseButtonEvent); } draggedPoints.clear(); @@ -661,13 +668,17 @@ public boolean mouseReleased(double posX, double posY, int mouseButton) { updateCanvas(false); } - return super.mouseReleased(posX, posY, mouseButton); + return super.mouseReleased(mouseButtonEvent); } @Override - public boolean mouseDragged(double posX, double posY, int mouseButton, double deltaX, double deltaY) { + public boolean mouseDragged(MouseButtonEvent mouseButtonEvent, double deltaX, double deltaY) { + double posX = mouseButtonEvent.x(); + double posY = mouseButtonEvent.y(); + int mouseButton = mouseButtonEvent.button(); + if(gettingSigned){ - return super.superMouseDragged(posX, posY, mouseButton, deltaX, deltaY); + return super.superMouseDragged(mouseButtonEvent, deltaX, deltaY); } if(!isCarryingColor && !isCarryingWater && !isPickingColor && !isCarryingPalette && !isCarryingCanvas){ int mouseX = (int)Math.floor(posX); @@ -682,14 +693,14 @@ public boolean mouseDragged(double posX, double posY, int mouseButton, double de } else if(isCarryingCanvas){ updateCanvasPos(deltaX, deltaY); - return super.superMouseDragged(posX, posY, mouseButton, deltaX, deltaY); + return super.superMouseDragged(mouseButtonEvent, deltaX, deltaY); } else if(isCarryingPalette){ - boolean ret = super.mouseDragged(posX, posY, mouseButton, deltaX, deltaY); + boolean ret = super.mouseDragged(mouseButtonEvent, deltaX, deltaY); updatePalettePos(deltaX, deltaY); return ret; } - return super.mouseDragged(posX, posY, mouseButton, deltaX, deltaY); + return super.mouseDragged(mouseButtonEvent, deltaX, deltaY); } private void updateCanvasPos(double deltaX, double deltaY){ diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/GuiPalette.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/GuiPalette.java index f23e5a40..b391cf72 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/GuiPalette.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/GuiPalette.java @@ -2,8 +2,8 @@ import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.input.MouseButtonEvent; import net.minecraft.client.renderer.RenderPipelines; -import net.minecraft.client.renderer.RenderType; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.NotNull; @@ -44,13 +44,17 @@ private void renderCursor(GuiGraphics guiGraphics, int mouseX, int mouseY){ } @Override - public boolean mouseDragged(double posX, double posY, int mouseButton, double deltaX, double deltaY) { + public boolean mouseDragged(MouseButtonEvent mouseButtonEvent, double deltaX, double deltaY) { + double posX = mouseButtonEvent.x(); + double posY = mouseButtonEvent.y(); + int mouseButton = mouseButtonEvent.button(); + if(isCarryingPalette){ - boolean ret = super.mouseDragged(posX, posY, mouseButton, deltaX, deltaY); + boolean ret = super.mouseDragged(mouseButtonEvent, deltaX, deltaY); updatePalettePos(deltaX, deltaY); return ret; } - return super.mouseDragged(posX, posY, mouseButton, deltaX, deltaY); + return super.mouseDragged(mouseButtonEvent, deltaX, deltaY); } private void updatePalettePos(double deltaX, double deltaY){ diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/ModClient.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/ModClient.java index 9739b041..df263561 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/ModClient.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/ModClient.java @@ -8,7 +8,6 @@ import net.minecraft.client.model.geom.ModelLayerLocation; import net.minecraft.client.renderer.special.SpecialModelRenderers; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import xerca.xercapaint.Mod; diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityCanvas.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityCanvas.java index b98df2c4..9b659dd0 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityCanvas.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityCanvas.java @@ -2,7 +2,6 @@ import com.google.common.collect.Maps; import com.mojang.blaze3d.platform.NativeImage; -import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; @@ -74,7 +73,7 @@ public void submit(CanvasRenderState state, PoseStack ms, SubmitNodeCollector su EntityCanvas canvas = state.canvas; float yaw = canvas.getYRot(); float pitch = canvas.getXRot(); - state.instance.render(canvas, yaw, pitch, ms, buffer, canvas.getDirection(), packedLight); + state.instance.render(canvas, yaw, pitch, ms, submitNodeCollector, canvas.getDirection(), state.lightCoords); } public static class RenderEntityCanvasFactory implements EntityRendererProvider { @@ -165,15 +164,15 @@ private void updateCanvasTexture(String canvasId, int version) { this.started = true; } - public void render(@Nullable EntityCanvas canvas, float yaw, float pitch, PoseStack ms, MultiBufferSource buffer, Direction facing, int packedLight) { + public void render(@Nullable EntityCanvas canvas, float yaw, float pitch, PoseStack ms, SubmitNodeCollector submitNodeCollector, Direction facing, int packedLight) { final float wScale = width / 16.0f; final float hScale = height / 16.0f; ms.pushPose(); - float xOffset = facing.getStepX(); - float yOffset = facing.getStepY(); - float zOffset = facing.getStepZ(); + float txOffset = facing.getStepX(); + float tyOffset = facing.getStepY(); + float tzOffset = facing.getStepZ(); boolean canvasIsNull = canvas == null; if (!canvasIsNull) { @@ -190,13 +189,13 @@ public void render(@Nullable EntityCanvas canvas, float yaw, float pitch, PoseSt float f = 1.0f / 32.0f; if (!canvasIsNull) { if (facing.getAxis().isHorizontal()) { - ms.translate(zOffset * 0.5d * wScale, -0.5d * hScale, -xOffset * 0.5d * wScale); + ms.translate(tzOffset * 0.5d * wScale, -0.5d * hScale, -txOffset * 0.5d * wScale); } else { - ms.translate(0.5 * wScale, 0 * hScale, (yOffset > 0 ? 0.5 : -0.5) * wScale); + ms.translate(0.5 * wScale, 0 * hScale, (tyOffset > 0 ? 0.5 : -0.5) * wScale); } - xOffset = 0; - yOffset = 0; - zOffset = -1; + txOffset = 0; + tyOffset = 0; + tzOffset = -1; } else { ms.translate(0.75, 0.5, 0.5); if (wScale > 1 || hScale > 1) { @@ -212,45 +211,54 @@ public void render(@Nullable EntityCanvas canvas, float yaw, float pitch, PoseSt RenderUtil.setShaderTexture(0, location); Matrix4f m = ms.last().pose(); PoseStack.Pose pose = ms.last(); - VertexConsumer vb = buffer.getBuffer(RenderType.entitySolid(location)); - - // Draw the front - addVertex(vb, m, pose, 0.0F, 32.0F * hScale, -1.0F, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0F * wScale, 32.0F * hScale, -1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0F * wScale, 0.0F, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 0.0F, 0.0F, -1.0F, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - - vb = buffer.getBuffer(RenderType.entitySolid(backLocation)); - // Draw the back and sides - final float sideWidth = 1.0F / 16.0F; - RenderUtil.setShaderTexture(0, backLocation); - addVertex(vb, m, pose, 0.0D, 0.0D, 1.0D, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0D * wScale, 0.0D, 1.0D, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0D * wScale, 32.0D * hScale, 1.0D, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 0.0D, 32.0D * hScale, 1.0D, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - - // Sides - addVertex(vb, m, pose, 0.0D, 0.0D, 1.0D, sideWidth, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 0.0D, 32.0D * hScale, 1.0D, sideWidth, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 0.0D, 32.0D * hScale, -1.0D, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 0.0D, 0.0D, -1.0D, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - - addVertex(vb, m, pose, 0.0D, 32.0D * hScale, 1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0D * wScale, 32.0D * hScale, 1.0F, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0D * wScale, 32.0D * hScale, -1.0F, 1.0F, sideWidth, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 0.0D, 32.0D * hScale, -1.0F, 0.0F, sideWidth, packedLight, xOffset, yOffset, zOffset); - - addVertex(vb, m, pose, 32.0D * wScale, 0.0D, -1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0D * wScale, 32.0D * hScale, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0D * wScale, 32.0D * hScale, 1.0F, sideWidth, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0D * wScale, 0.0D, 1.0F, sideWidth, 0.0F, packedLight, xOffset, yOffset, zOffset); - - addVertex(vb, m, pose, 0.0D, 0.0D, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0D * wScale, 0.0D, -1.0F, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0D * wScale, 0.0D, 1.0F, 1.0F, 1.0F - sideWidth, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 0.0D, 0.0D, 1.0F, 0.0F, 1.0F - sideWidth, packedLight, xOffset, yOffset, zOffset); + + float xOffset = txOffset; + float yOffset = tyOffset; + float zOffset = tzOffset; + + submitNodeCollector.submitCustomGeometry(ms, RenderType.entitySolid(location), (p, vb) -> { + // Draw the front + addVertex(vb, m, pose, 0.0F, 32.0F * hScale, -1.0F, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, pose, 32.0F * wScale, 32.0F * hScale, -1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, pose, 32.0F * wScale, 0.0F, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, pose, 0.0F, 0.0F, -1.0F, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + submitNodeCollector.submitCustomGeometry(ms, RenderType.entitySolid(backLocation), (p2, vb2) -> { + // Draw the back and sides + final float sideWidth = 1.0F / 16.0F; + RenderUtil.setShaderTexture(0, backLocation); + addVertex(vb2, m, pose, 0.0D, 0.0D, 1.0D, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D * wScale, 0.0D, 1.0D, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D * wScale, 32.0D * hScale, 1.0D, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 0.0D, 32.0D * hScale, 1.0D, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + + // Sides + addVertex(vb2, m, pose, 0.0D, 0.0D, 1.0D, sideWidth, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 0.0D, 32.0D * hScale, 1.0D, sideWidth, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 0.0D, 32.0D * hScale, -1.0D, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 0.0D, 0.0D, -1.0D, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + + addVertex(vb2, m, pose, 0.0D, 32.0D * hScale, 1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D * wScale, 32.0D * hScale, 1.0F, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D * wScale, 32.0D * hScale, -1.0F, 1.0F, sideWidth, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 0.0D, 32.0D * hScale, -1.0F, 0.0F, sideWidth, packedLight, xOffset, yOffset, zOffset); + + addVertex(vb2, m, pose, 32.0D * wScale, 0.0D, -1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D * wScale, 32.0D * hScale, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D * wScale, 32.0D * hScale, 1.0F, sideWidth, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D * wScale, 0.0D, 1.0F, sideWidth, 0.0F, packedLight, xOffset, yOffset, zOffset); + + addVertex(vb2, m, pose, 0.0D, 0.0D, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D * wScale, 0.0D, -1.0F, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D * wScale, 0.0D, 1.0F, 1.0F, 1.0F - sideWidth, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 0.0D, 0.0D, 1.0F, 0.0F, 1.0F - sideWidth, packedLight, xOffset, yOffset, zOffset); + + }); + }); + ms.popPose(); + + } private void addVertex(VertexConsumer vb, Matrix4f m, PoseStack.Pose pose, double x, double y, double z, float tx, float ty, int lightmap, float xOff, float yOff, float zOff) { diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityEasel.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityEasel.java index a4db4840..4a674e52 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityEasel.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityEasel.java @@ -7,11 +7,13 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.entity.RenderLayerParent; import net.minecraft.client.renderer.entity.layers.RenderLayer; import net.minecraft.client.renderer.entity.state.EntityRenderState; +import net.minecraft.client.renderer.state.CameraRenderState; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -59,7 +61,11 @@ public void extractRenderState(EntityEasel entity, EaselRenderState state, float } @Override - public void render(EaselRenderState state, PoseStack poseStack, MultiBufferSource buffer, int packedLight) { + public void submit(EaselRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState cameraRenderState) { + //public void render(EaselRenderState state, PoseStack poseStack, MultiBufferSource buffer, int packedLight) { + RenderType renderType = this.model.renderType(woodTexture); + + poseStack.pushPose(); poseStack.mulPose(Axis.YP.rotationDegrees(-state.entityYaw)); @@ -69,24 +75,26 @@ public void render(EaselRenderState state, PoseStack poseStack, MultiBufferSourc poseStack.mulPose(new Quaternionf().rotationXYZ((float) Math.PI, 0, 0)); poseStack.translate(0, -1.5, 0); - RenderType renderType = this.model.renderType(woodTexture); - VertexConsumer vertexConsumer = buffer.getBuffer(renderType); int overlay = OverlayTexture.pack(OverlayTexture.u(0), OverlayTexture.v(false)); - this.model.renderToBuffer(poseStack, vertexConsumer, packedLight, overlay); + submitNodeCollector.submitModel(this.model, state, poseStack, renderType, state.lightCoords, overlay, state.outlineColor, null); + //this.model.renderToBuffer(poseStack, vertexConsumer, state.lightCoords, overlay); for (RenderLayer layer : layers) { - layer.render(poseStack, buffer, packedLight, state, 0, 0); + layer.submit(poseStack, submitNodeCollector, state.lightCoords, state, 0, 0); } - poseStack.popPose(); - super.render(state, poseStack, buffer, packedLight); + //VertexConsumer vertexConsumer = buffer.getBuffer(renderType); + + + + super.submit(state, poseStack, submitNodeCollector, cameraRenderState); } @Override protected boolean shouldShowName(EntityEasel easel, double distanceSquared) { HitResult result = Minecraft.getInstance().hitResult; if (result instanceof EntityHitResult entityHitResult) { - if (Minecraft.renderNames() && entityHitResult.getEntity() == easel && !easel.getItem().isEmpty() && ItemCanvas.hasTitle(easel.getItem())) { + if (Minecraft.renderNames() && entityHitResult.getEntity().getUUID().equals(easel.getUUID()) && !easel.getItem().isEmpty() && ItemCanvas.hasTitle(easel.getItem())) { float range = easel.isDiscrete() ? 32.0F : 64.0F; return distanceSquared < (double) (range * range); } @@ -95,10 +103,23 @@ protected boolean shouldShowName(EntityEasel easel, double distanceSquared) { } @Override - protected void renderNameTag(EaselRenderState state, Component displayName, PoseStack poseStack, MultiBufferSource buffer, int packedLight) { + protected void submitNameTag(EaselRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState cameraRenderState) { + //protected void renderNameTag(EaselRenderState state, Component displayName, PoseStack poseStack, MultiBufferSource buffer, int packedLight) { +// if (entityRenderState.nameTag != null) { +// submitNodeCollector.submitNameTag( +// poseStack, +// entityRenderState.nameTagAttachment, +// 0, +// entityRenderState.nameTag, +// !entityRenderState.isDiscrete, +// entityRenderState.lightCoords, +// entityRenderState.distanceToCameraSq, +// cameraRenderState +// ); +// } poseStack.pushPose(); poseStack.translate(0, -0.5, 0); - super.renderNameTag(state, ItemCanvas.getFullLabel(state.itemStack), poseStack, buffer, packedLight); + submitNodeCollector.submitNameTag(poseStack, state.nameTagAttachment, 0, ItemCanvas.getFullLabel(state.itemStack), !state.isDiscrete, state.lightCoords, state.distanceToCameraSq, cameraRenderState); poseStack.popPose(); } diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityCanvas.java b/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityCanvas.java index 87576e58..c92143d8 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityCanvas.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityCanvas.java @@ -5,7 +5,6 @@ import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityEasel.java b/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityEasel.java index 151ed7a0..fb058b25 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityEasel.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityEasel.java @@ -1,10 +1,8 @@ package xerca.xercapaint.entity; -import com.mojang.realmsclient.dto.ValueObject; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.core.particles.BlockParticleOption; import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; @@ -192,7 +190,7 @@ public void onSyncedDataUpdated(@NotNull EntityDataAccessor accessor) { @Override public void addAdditionalSaveData(@NotNull ValueOutput tag) { if (!this.getItem().isEmpty()) { - tag.store("Item", this.getItem().save(this.registryAccess())); + tag.storeNullable("Item", ItemStack.CODEC, this.getItem()); } } @@ -200,7 +198,7 @@ public void addAdditionalSaveData(@NotNull ValueOutput tag) { public void readAdditionalSaveData(ValueInput tag) { ValueInput itemTag = tag.childOrEmpty("Item"); if (!itemTag.keys().isEmpty()) { - ItemStack itemStack = ItemStack.parseOptional(this.registryAccess(), itemTag); + ItemStack itemStack = tag.read("Item", ItemStack.CODEC).orElse(ItemStack.EMPTY); if (itemStack.isEmpty()) { Mod.LOGGER.warn("Unable to load item from: {}", itemTag); } diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/item/ItemPalette.java b/XercaPaintMod/src/main/java/xerca/xercapaint/item/ItemPalette.java index c2faba6f..038d4e57 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/item/ItemPalette.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/item/ItemPalette.java @@ -4,9 +4,7 @@ import com.mojang.serialization.DynamicOps; import com.mojang.serialization.codecs.PrimitiveCodec; import net.minecraft.ChatFormatting; -import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceKey; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; @@ -22,7 +20,6 @@ import javax.annotation.Nonnull; import java.util.Arrays; -import java.util.List; import java.util.function.Consumer; import java.util.stream.IntStream; diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/CanvasMiniUpdatePacket.java b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/CanvasMiniUpdatePacket.java index c9b66797..70128792 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/CanvasMiniUpdatePacket.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/CanvasMiniUpdatePacket.java @@ -3,7 +3,6 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.NotNull; import xerca.xercapaint.CanvasType; import xerca.xercapaint.Mod; diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/CanvasUpdatePacket.java b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/CanvasUpdatePacket.java index 7971ed8f..4db4a30b 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/CanvasUpdatePacket.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/CanvasUpdatePacket.java @@ -3,7 +3,6 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.NotNull; import xerca.xercapaint.CanvasType; import xerca.xercapaint.Mod; diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/CloseGuiPacket.java b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/CloseGuiPacket.java index 7058ee33..d08f882c 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/CloseGuiPacket.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/CloseGuiPacket.java @@ -3,7 +3,6 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.NotNull; import xerca.xercapaint.Mod; diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/EaselLeftPacket.java b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/EaselLeftPacket.java index ccbf82ca..573202d1 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/EaselLeftPacket.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/EaselLeftPacket.java @@ -3,7 +3,6 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.NotNull; import xerca.xercapaint.Mod; diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/ExportPaintingPacket.java b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/ExportPaintingPacket.java index 8a9337ec..cdabb0d5 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/ExportPaintingPacket.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/ExportPaintingPacket.java @@ -3,7 +3,6 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.NotNull; import xerca.xercapaint.Mod; diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/ImportPaintingPacket.java b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/ImportPaintingPacket.java index 586bf1b0..3c674581 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/ImportPaintingPacket.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/ImportPaintingPacket.java @@ -3,7 +3,6 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.NotNull; import xerca.xercapaint.Mod; diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/ImportPaintingSendPacket.java b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/ImportPaintingSendPacket.java index c8d6eb46..0b48b918 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/ImportPaintingSendPacket.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/ImportPaintingSendPacket.java @@ -4,7 +4,6 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.NotNull; import xerca.xercapaint.Mod; diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/OpenGuiPacket.java b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/OpenGuiPacket.java index 6c809f2a..d6f7eb5c 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/OpenGuiPacket.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/OpenGuiPacket.java @@ -3,7 +3,6 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.InteractionHand; import org.jetbrains.annotations.NotNull; import xerca.xercapaint.Mod; diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/PaletteUpdatePacket.java b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/PaletteUpdatePacket.java index fa6bddfe..966d65de 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/PaletteUpdatePacket.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/PaletteUpdatePacket.java @@ -3,7 +3,6 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.NotNull; import xerca.xercapaint.Mod; import xerca.xercapaint.PaletteUtil; diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/PictureRequestPacket.java b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/PictureRequestPacket.java index 9b94726a..6e687c4b 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/PictureRequestPacket.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/PictureRequestPacket.java @@ -3,7 +3,6 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.NotNull; import xerca.xercapaint.Mod; diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/PictureSendPacket.java b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/PictureSendPacket.java index bfe1c903..d53d057b 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/PictureSendPacket.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/PictureSendPacket.java @@ -3,7 +3,6 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.NotNull; import xerca.xercapaint.Mod; diff --git a/XercaPaintMod/src/main/resources/fabric.mod.json b/XercaPaintMod/src/main/resources/fabric.mod.json index 59ac7a13..7e951ebc 100644 --- a/XercaPaintMod/src/main/resources/fabric.mod.json +++ b/XercaPaintMod/src/main/resources/fabric.mod.json @@ -24,6 +24,6 @@ "depends": { "fabricloader": "*", "fabric-api": "*", - "minecraft": "1.21.3" + "minecraft": "1.21.10" } } From 51fba6b018ba71b231ac9bddc2dabbc969c567a9 Mon Sep 17 00:00:00 2001 From: Loki Rautio Date: Mon, 3 Nov 2025 21:55:17 -0600 Subject: [PATCH 05/10] fix easel / canvas rendering --- .../xercapaint/client/RenderEntityCanvas.java | 82 ++++++++++--------- .../xercapaint/client/RenderEntityEasel.java | 15 ---- 2 files changed, 43 insertions(+), 54 deletions(-) diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityCanvas.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityCanvas.java index 9b659dd0..3e1ec5fa 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityCanvas.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityCanvas.java @@ -208,53 +208,57 @@ public void render(@Nullable EntityCanvas canvas, float yaw, float pitch, PoseSt ms.mulPose(Axis.YP.rotationDegrees(180 - yaw)); ms.scale(f, f, f); - RenderUtil.setShaderTexture(0, location); - Matrix4f m = ms.last().pose(); - PoseStack.Pose pose = ms.last(); + + // = ms.last().pose(); + //PoseStack.Pose pose = ms.last(); float xOffset = txOffset; float yOffset = tyOffset; float zOffset = tzOffset; - submitNodeCollector.submitCustomGeometry(ms, RenderType.entitySolid(location), (p, vb) -> { + submitNodeCollector.submitCustomGeometry(ms, RenderType.entitySolid(location), (localPose, vb) -> { + RenderUtil.setShaderTexture(0, location); // Draw the front - addVertex(vb, m, pose, 0.0F, 32.0F * hScale, -1.0F, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0F * wScale, 32.0F * hScale, -1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 32.0F * wScale, 0.0F, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb, m, pose, 0.0F, 0.0F, -1.0F, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - submitNodeCollector.submitCustomGeometry(ms, RenderType.entitySolid(backLocation), (p2, vb2) -> { - // Draw the back and sides - final float sideWidth = 1.0F / 16.0F; - RenderUtil.setShaderTexture(0, backLocation); - addVertex(vb2, m, pose, 0.0D, 0.0D, 1.0D, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 32.0D * wScale, 0.0D, 1.0D, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 32.0D * wScale, 32.0D * hScale, 1.0D, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 0.0D, 32.0D * hScale, 1.0D, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - - // Sides - addVertex(vb2, m, pose, 0.0D, 0.0D, 1.0D, sideWidth, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 0.0D, 32.0D * hScale, 1.0D, sideWidth, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 0.0D, 32.0D * hScale, -1.0D, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 0.0D, 0.0D, -1.0D, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - - addVertex(vb2, m, pose, 0.0D, 32.0D * hScale, 1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 32.0D * wScale, 32.0D * hScale, 1.0F, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 32.0D * wScale, 32.0D * hScale, -1.0F, 1.0F, sideWidth, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 0.0D, 32.0D * hScale, -1.0F, 0.0F, sideWidth, packedLight, xOffset, yOffset, zOffset); - - addVertex(vb2, m, pose, 32.0D * wScale, 0.0D, -1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 32.0D * wScale, 32.0D * hScale, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 32.0D * wScale, 32.0D * hScale, 1.0F, sideWidth, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 32.0D * wScale, 0.0D, 1.0F, sideWidth, 0.0F, packedLight, xOffset, yOffset, zOffset); - - addVertex(vb2, m, pose, 0.0D, 0.0D, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 32.0D * wScale, 0.0D, -1.0F, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 32.0D * wScale, 0.0D, 1.0F, 1.0F, 1.0F - sideWidth, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 0.0D, 0.0D, 1.0F, 0.0F, 1.0F - sideWidth, packedLight, xOffset, yOffset, zOffset); - - }); + Matrix4f m = localPose.pose(); + addVertex(vb, m, localPose, 0.0F, 32.0F * hScale, -1.0F, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, localPose, 32.0F * wScale, 32.0F * hScale, -1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, localPose, 32.0F * wScale, 0.0F, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, localPose, 0.0F, 0.0F, -1.0F, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + }); + submitNodeCollector.submitCustomGeometry(ms, RenderType.entitySolid(backLocation), (localPose, vb) -> { + // Draw the back and sides + final float sideWidth = 1.0F / 16.0F; + Matrix4f m = localPose.pose(); + RenderUtil.setShaderTexture(0, backLocation); + addVertex(vb, m, localPose, 0.0D, 0.0D, 1.0D, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, localPose, 32.0D * wScale, 0.0D, 1.0D, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, localPose, 32.0D * wScale, 32.0D * hScale, 1.0D, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, localPose, 0.0D, 32.0D * hScale, 1.0D, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + + // Sides + addVertex(vb, m, localPose, 0.0D, 0.0D, 1.0D, sideWidth, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, localPose, 0.0D, 32.0D * hScale, 1.0D, sideWidth, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, localPose, 0.0D, 32.0D * hScale, -1.0D, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, localPose, 0.0D, 0.0D, -1.0D, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + + addVertex(vb, m, localPose, 0.0D, 32.0D * hScale, 1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, localPose, 32.0D * wScale, 32.0D * hScale, 1.0F, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, localPose, 32.0D * wScale, 32.0D * hScale, -1.0F, 1.0F, sideWidth, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, localPose, 0.0D, 32.0D * hScale, -1.0F, 0.0F, sideWidth, packedLight, xOffset, yOffset, zOffset); + + addVertex(vb, m, localPose, 32.0D * wScale, 0.0D, -1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, localPose, 32.0D * wScale, 32.0D * hScale, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, localPose, 32.0D * wScale, 32.0D * hScale, 1.0F, sideWidth, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, localPose, 32.0D * wScale, 0.0D, 1.0F, sideWidth, 0.0F, packedLight, xOffset, yOffset, zOffset); + + addVertex(vb, m, localPose, 0.0D, 0.0D, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, localPose, 32.0D * wScale, 0.0D, -1.0F, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, localPose, 32.0D * wScale, 0.0D, 1.0F, 1.0F, 1.0F - sideWidth, packedLight, xOffset, yOffset, zOffset); + addVertex(vb, m, localPose, 0.0D, 0.0D, 1.0F, 0.0F, 1.0F - sideWidth, packedLight, xOffset, yOffset, zOffset); + + }); ms.popPose(); diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityEasel.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityEasel.java index 4a674e52..e608ff78 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityEasel.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityEasel.java @@ -78,12 +78,10 @@ public void submit(EaselRenderState state, PoseStack poseStack, SubmitNodeCollec int overlay = OverlayTexture.pack(OverlayTexture.u(0), OverlayTexture.v(false)); submitNodeCollector.submitModel(this.model, state, poseStack, renderType, state.lightCoords, overlay, state.outlineColor, null); - //this.model.renderToBuffer(poseStack, vertexConsumer, state.lightCoords, overlay); for (RenderLayer layer : layers) { layer.submit(poseStack, submitNodeCollector, state.lightCoords, state, 0, 0); } poseStack.popPose(); - //VertexConsumer vertexConsumer = buffer.getBuffer(renderType); @@ -104,19 +102,6 @@ protected boolean shouldShowName(EntityEasel easel, double distanceSquared) { @Override protected void submitNameTag(EaselRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState cameraRenderState) { - //protected void renderNameTag(EaselRenderState state, Component displayName, PoseStack poseStack, MultiBufferSource buffer, int packedLight) { -// if (entityRenderState.nameTag != null) { -// submitNodeCollector.submitNameTag( -// poseStack, -// entityRenderState.nameTagAttachment, -// 0, -// entityRenderState.nameTag, -// !entityRenderState.isDiscrete, -// entityRenderState.lightCoords, -// entityRenderState.distanceToCameraSq, -// cameraRenderState -// ); -// } poseStack.pushPose(); poseStack.translate(0, -0.5, 0); submitNodeCollector.submitNameTag(poseStack, state.nameTagAttachment, 0, ItemCanvas.getFullLabel(state.itemStack), !state.isDiscrete, state.lightCoords, state.distanceToCameraSq, cameraRenderState); From aa15013e9caebdd0fda231aa94365c057ee29eff Mon Sep 17 00:00:00 2001 From: Loki Rautio Date: Mon, 3 Nov 2025 22:03:52 -0600 Subject: [PATCH 06/10] fix packet error --- .../src/main/java/xerca/xercapaint/entity/EntityCanvas.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityCanvas.java b/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityCanvas.java index c92143d8..c9e52fb2 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityCanvas.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityCanvas.java @@ -111,6 +111,7 @@ private void clientPictureInit(Level level) { @Override protected void defineSynchedData(SynchedEntityData.@NotNull Builder builder) { + super.defineSynchedData(builder); builder.define(CANVAS_ID, ""); builder.define(CANVAS_VERSION, 0); builder.define(CANVAS_TYPE_KEY, (byte)0); @@ -198,7 +199,7 @@ public void playPlacementSound() { @Override protected void setDirection(@NotNull Direction facingDirectionIn) { Validate.notNull(facingDirectionIn); - this.setDirection(facingDirectionIn); + this.setDirectionRaw(facingDirectionIn); if (facingDirectionIn.getAxis().isHorizontal()) { this.setXRot(0.0F); this.setYRot((float)(this.getDirection().get2DDataValue() * 90)); From 72ce72901185aa26d07ec518fb2d3a8031d6d3f7 Mon Sep 17 00:00:00 2001 From: Loki Rautio Date: Mon, 3 Nov 2025 22:16:00 -0600 Subject: [PATCH 07/10] fix item rendering and entity rendering bugs --- .../xerca/xercapaint/client/ModClient.java | 5 +- .../xerca/xercapaint/entity/EntityCanvas.java | 3 + .../java/xerca/xercapaint/item/Items.java | 3 + .../item/crafting/RecipeFillPalette.java | 5 + .../CanvasMiniUpdatePacketHandler.java | 4 + .../packets/CanvasUpdatePacketHandler.java | 4 + .../assets/xercapaint/items/item_canvas.json | 23 ++++ .../xercapaint/items/item_canvas_large.json | 23 ++++ .../xercapaint/items/item_canvas_long.json | 23 ++++ .../xercapaint/items/item_canvas_tall.json | 23 ++++ .../assets/xercapaint/items/item_easel.json | 6 + .../assets/xercapaint/items/item_palette.json | 125 ++++++++++++++++++ .../xercapaint/models/item/item_canvas.json | 10 +- .../models/item/item_canvas_drawn.json | 3 +- .../models/item/item_canvas_large.json | 8 -- .../models/item/item_canvas_large_drawn.json | 3 +- .../models/item/item_canvas_long.json | 8 -- .../models/item/item_canvas_long_drawn.json | 3 +- .../models/item/item_canvas_tall.json | 8 -- .../models/item/item_canvas_tall_drawn.json | 3 +- .../xercapaint/models/item/item_palette.json | 21 +-- 21 files changed, 251 insertions(+), 63 deletions(-) create mode 100644 XercaPaintMod/src/main/resources/assets/xercapaint/items/item_canvas.json create mode 100644 XercaPaintMod/src/main/resources/assets/xercapaint/items/item_canvas_large.json create mode 100644 XercaPaintMod/src/main/resources/assets/xercapaint/items/item_canvas_long.json create mode 100644 XercaPaintMod/src/main/resources/assets/xercapaint/items/item_canvas_tall.json create mode 100644 XercaPaintMod/src/main/resources/assets/xercapaint/items/item_easel.json create mode 100644 XercaPaintMod/src/main/resources/assets/xercapaint/items/item_palette.json diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/ModClient.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/ModClient.java index df263561..244f494d 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/ModClient.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/ModClient.java @@ -6,6 +6,7 @@ import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry; import net.minecraft.client.Minecraft; import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraft.client.renderer.entity.EntityRenderers; import net.minecraft.client.renderer.special.SpecialModelRenderers; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Player; @@ -79,8 +80,8 @@ public void onInitializeClient() { CANVAS_ITEM_RENDERER = new CanvasItemRenderer(); SpecialModelRenderers.ID_MAPPER.put(Mod.id("canvas_drawn"), CanvasItemRenderer.Unbaked.MAP_CODEC); - EntityRendererRegistry.register(Entities.EASEL, new RenderEntityEasel.RenderEntityEaselFactory()); - EntityRendererRegistry.register(Entities.CANVAS, new RenderEntityCanvas.RenderEntityCanvasFactory()); + EntityRenderers.register(Entities.EASEL, new RenderEntityEasel.RenderEntityEaselFactory()); + EntityRenderers.register(Entities.CANVAS, new RenderEntityCanvas.RenderEntityCanvasFactory()); EntityModelLayerRegistry.registerModelLayer(EASEL_MAIN_LAYER, EaselModel::createBodyLayer); EntityModelLayerRegistry.registerModelLayer(EASEL_CANVAS_LAYER, EaselModel::createBodyLayer); diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityCanvas.java b/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityCanvas.java index c9e52fb2..5377977b 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityCanvas.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityCanvas.java @@ -5,6 +5,7 @@ import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.component.DataComponents; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; @@ -21,6 +22,7 @@ import net.minecraft.world.entity.decoration.HangingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.component.CustomModelData; import net.minecraft.world.level.GameRules; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.DiodeBlock; @@ -173,6 +175,7 @@ else if(canvasType == CanvasType.TALL){ Picture picture = PICTURES.get(getCanvasID()); if(picture != null){ canvasItem.set(Items.CANVAS_PIXELS, Arrays.stream(picture.pixels).boxed().toList()); + canvasItem.set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(List.of(), List.of(), List.of("drawn"), List.of())); } this.spawnAtLocation(serverLevel, canvasItem); } diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/item/Items.java b/XercaPaintMod/src/main/java/xerca/xercapaint/item/Items.java index 14ea4455..7b2cd764 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/item/Items.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/item/Items.java @@ -5,6 +5,7 @@ import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup; import net.minecraft.core.Registry; import net.minecraft.core.component.DataComponentType; +import net.minecraft.core.component.DataComponents; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.Component; import net.minecraft.network.codec.ByteBufCodecs; @@ -12,6 +13,7 @@ import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.component.CustomModelData; import net.minecraft.world.item.crafting.CustomRecipe; import net.minecraft.world.item.crafting.RecipeSerializer; import xerca.xercapaint.CanvasType; @@ -53,6 +55,7 @@ public final class Items { byte[] basicColors = new byte[16]; Arrays.fill(basicColors, (byte)1); fullPalette.set(PALETTE_BASIC_COLORS, basicColors); + fullPalette.set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(List.of(16f), List.of(), List.of(), List.of())); output.accept(ITEM_PALETTE); output.accept(fullPalette); diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/item/crafting/RecipeFillPalette.java b/XercaPaintMod/src/main/java/xerca/xercapaint/item/crafting/RecipeFillPalette.java index 797fdf97..0870077b 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/item/crafting/RecipeFillPalette.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/item/crafting/RecipeFillPalette.java @@ -3,9 +3,11 @@ import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.HolderLookup; import net.minecraft.core.NonNullList; +import net.minecraft.core.component.DataComponents; import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.DyeItem; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.component.CustomModelData; import net.minecraft.world.item.crafting.CraftingBookCategory; import net.minecraft.world.item.crafting.CraftingInput; import net.minecraft.world.item.crafting.CustomRecipe; @@ -19,6 +21,7 @@ import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; import java.util.ArrayList; +import java.util.List; @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault @@ -106,6 +109,8 @@ public ItemStack assemble(CraftingInput inv, @NotNull HolderLookup.Provider prov ItemStack result = new ItemStack(Items.ITEM_PALETTE); result.set(Items.PALETTE_BASIC_COLORS, basicColors); + float colorCount = ItemPalette.basicColorCount(result); + result.set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(List.of(colorCount), List.of(), List.of(),List.of())); return result; } diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/CanvasMiniUpdatePacketHandler.java b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/CanvasMiniUpdatePacketHandler.java index 419edbad..f873b049 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/CanvasMiniUpdatePacketHandler.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/CanvasMiniUpdatePacketHandler.java @@ -1,9 +1,11 @@ package xerca.xercapaint.packets; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; +import net.minecraft.core.component.DataComponents; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.component.CustomModelData; import xerca.xercapaint.Mod; import xerca.xercapaint.entity.EntityEasel; import xerca.xercapaint.item.ItemCanvas; @@ -11,6 +13,7 @@ import xerca.xercapaint.item.Items; import java.util.Arrays; +import java.util.List; public class CanvasMiniUpdatePacketHandler implements ServerPlayNetworking.PlayPayloadHandler { public static void processMessage(CanvasMiniUpdatePacket msg, ServerPlayer pl) { @@ -44,6 +47,7 @@ public static void processMessage(CanvasMiniUpdatePacket msg, ServerPlayer pl) { if (!canvas.isEmpty() && canvas.getItem() instanceof ItemCanvas) { canvas.set(Items.CANVAS_PIXELS, Arrays.stream(msg.pixels()).boxed().toList()); + canvas.set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(List.of(), List.of(), List.of("drawn"), List.of())); canvas.set(Items.CANVAS_ID, msg.canvasId()); canvas.set(Items.CANVAS_VERSION, msg.version()); canvas.set(Items.CANVAS_GENERATION, 0); diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/CanvasUpdatePacketHandler.java b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/CanvasUpdatePacketHandler.java index 7751186c..61d93a20 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/packets/CanvasUpdatePacketHandler.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/packets/CanvasUpdatePacketHandler.java @@ -1,9 +1,11 @@ package xerca.xercapaint.packets; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; +import net.minecraft.core.component.DataComponents; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.component.CustomModelData; import xerca.xercapaint.Mod; import xerca.xercapaint.entity.EntityEasel; import xerca.xercapaint.item.ItemCanvas; @@ -11,6 +13,7 @@ import xerca.xercapaint.item.Items; import java.util.Arrays; +import java.util.List; public class CanvasUpdatePacketHandler implements ServerPlayNetworking.PlayPayloadHandler { @@ -57,6 +60,7 @@ public static void processMessage(CanvasUpdatePacket msg, ServerPlayer pl) { if (!canvas.isEmpty() && canvas.getItem() instanceof ItemCanvas) { canvas.set(Items.CANVAS_PIXELS, Arrays.stream(msg.pixels()).boxed().toList()); + canvas.set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(List.of(), List.of(), List.of("drawn"), List.of())); canvas.set(Items.CANVAS_ID, msg.canvasId()); canvas.set(Items.CANVAS_VERSION, msg.version()); canvas.set(Items.CANVAS_GENERATION, 0); diff --git a/XercaPaintMod/src/main/resources/assets/xercapaint/items/item_canvas.json b/XercaPaintMod/src/main/resources/assets/xercapaint/items/item_canvas.json new file mode 100644 index 00000000..e07ce6d6 --- /dev/null +++ b/XercaPaintMod/src/main/resources/assets/xercapaint/items/item_canvas.json @@ -0,0 +1,23 @@ +{ + "model": { + "type": "minecraft:select", + "property": "minecraft:custom_model_data", + "index": 0, + "cases": [ + { + "when": "drawn", + "model": { + "type": "minecraft:special", + "base": "xercapaint:item/item_canvas_drawn", + "model": { + "type": "xercapaint:canvas_drawn" + } + } + } + ], + "fallback": { + "type": "minecraft:model", + "model": "xercapaint:item/item_canvas" + } + } +} \ No newline at end of file diff --git a/XercaPaintMod/src/main/resources/assets/xercapaint/items/item_canvas_large.json b/XercaPaintMod/src/main/resources/assets/xercapaint/items/item_canvas_large.json new file mode 100644 index 00000000..e0661315 --- /dev/null +++ b/XercaPaintMod/src/main/resources/assets/xercapaint/items/item_canvas_large.json @@ -0,0 +1,23 @@ +{ + "model": { + "type": "minecraft:select", + "property": "minecraft:custom_model_data", + "index": 0, + "cases": [ + { + "when": "drawn", + "model": { + "type": "minecraft:special", + "base": "xercapaint:item/item_canvas_large_drawn", + "model": { + "type": "xercapaint:canvas_drawn" + } + } + } + ], + "fallback": { + "type": "minecraft:model", + "model": "xercapaint:item/item_canvas_large" + } + } +} \ No newline at end of file diff --git a/XercaPaintMod/src/main/resources/assets/xercapaint/items/item_canvas_long.json b/XercaPaintMod/src/main/resources/assets/xercapaint/items/item_canvas_long.json new file mode 100644 index 00000000..c75c1388 --- /dev/null +++ b/XercaPaintMod/src/main/resources/assets/xercapaint/items/item_canvas_long.json @@ -0,0 +1,23 @@ +{ + "model": { + "type": "minecraft:select", + "property": "minecraft:custom_model_data", + "index": 0, + "cases": [ + { + "when": "drawn", + "model": { + "type": "minecraft:special", + "base": "xercapaint:item/item_canvas_long_drawn", + "model": { + "type": "xercapaint:canvas_drawn" + } + } + } + ], + "fallback": { + "type": "minecraft:model", + "model": "xercapaint:item/item_canvas_long" + } + } +} \ No newline at end of file diff --git a/XercaPaintMod/src/main/resources/assets/xercapaint/items/item_canvas_tall.json b/XercaPaintMod/src/main/resources/assets/xercapaint/items/item_canvas_tall.json new file mode 100644 index 00000000..38133c15 --- /dev/null +++ b/XercaPaintMod/src/main/resources/assets/xercapaint/items/item_canvas_tall.json @@ -0,0 +1,23 @@ +{ + "model": { + "type": "minecraft:select", + "property": "minecraft:custom_model_data", + "index": 0, + "cases": [ + { + "when": "drawn", + "model": { + "type": "minecraft:special", + "base": "xercapaint:item/item_canvas_tall_drawn", + "model": { + "type": "xercapaint:canvas_drawn" + } + } + } + ], + "fallback": { + "type": "minecraft:model", + "model": "xercapaint:item/item_canvas_tall" + } + } +} \ No newline at end of file diff --git a/XercaPaintMod/src/main/resources/assets/xercapaint/items/item_easel.json b/XercaPaintMod/src/main/resources/assets/xercapaint/items/item_easel.json new file mode 100644 index 00000000..c62e2cdb --- /dev/null +++ b/XercaPaintMod/src/main/resources/assets/xercapaint/items/item_easel.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "xercapaint:item/item_easel" + } +} \ No newline at end of file diff --git a/XercaPaintMod/src/main/resources/assets/xercapaint/items/item_palette.json b/XercaPaintMod/src/main/resources/assets/xercapaint/items/item_palette.json new file mode 100644 index 00000000..b7afe71a --- /dev/null +++ b/XercaPaintMod/src/main/resources/assets/xercapaint/items/item_palette.json @@ -0,0 +1,125 @@ +{ + "model": { + "type": "minecraft:range_dispatch", + "property": "minecraft:custom_model_data", + "index": 0, + "entries": [ + { + "threshold": 1, + "model": { + "type": "minecraft:model", + "model": "xercapaint:item/item_palette1" + } + }, + { + "threshold": 2, + "model": { + "type": "minecraft:model", + "model": "xercapaint:item/item_palette2" + } + }, + { + "threshold": 3, + "model": { + "type": "minecraft:model", + "model": "xercapaint:item/item_palette3" + } + }, + { + "threshold": 4, + "model": { + "type": "minecraft:model", + "model": "xercapaint:item/item_palette4" + } + }, + { + "threshold": 5, + "model": { + "type": "minecraft:model", + "model": "xercapaint:item/item_palette5" + } + }, + { + "threshold": 6, + "model": { + "type": "minecraft:model", + "model": "xercapaint:item/item_palette6" + } + }, + { + "threshold": 7, + "model": { + "type": "minecraft:model", + "model": "xercapaint:item/item_palette7" + } + }, + { + "threshold": 8, + "model": { + "type": "minecraft:model", + "model": "xercapaint:item/item_palette8" + } + }, + { + "threshold": 9, + "model": { + "type": "minecraft:model", + "model": "xercapaint:item/item_palette9" + } + }, + { + "threshold": 10, + "model": { + "type": "minecraft:model", + "model": "xercapaint:item/item_palette10" + } + }, + { + "threshold": 11, + "model": { + "type": "minecraft:model", + "model": "xercapaint:item/item_palette11" + } + }, + { + "threshold": 12, + "model": { + "type": "minecraft:model", + "model": "xercapaint:item/item_palette12" + } + }, + { + "threshold": 13, + "model": { + "type": "minecraft:model", + "model": "xercapaint:item/item_palette13" + } + }, + { + "threshold": 14, + "model": { + "type": "minecraft:model", + "model": "xercapaint:item/item_palette14" + } + }, + { + "threshold": 15, + "model": { + "type": "minecraft:model", + "model": "xercapaint:item/item_palette15" + } + }, + { + "threshold": 16, + "model": { + "type": "minecraft:model", + "model": "xercapaint:item/item_palette16" + } + } + ], + "fallback": { + "type": "minecraft:model", + "model": "xercapaint:item/item_palette" + } + } +} \ No newline at end of file diff --git a/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas.json b/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas.json index 72542fff..e645a5f7 100644 --- a/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas.json +++ b/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas.json @@ -2,13 +2,5 @@ "parent": "item/generated", "textures": { "layer0": "xercapaint:item/item_canvas" - }, - "overrides": [ - { - "predicate": { - "xercapaint:drawn": 1 - }, - "model": "xercapaint:item/item_canvas_drawn" - } - ] + } } \ No newline at end of file diff --git a/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_drawn.json b/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_drawn.json index 2ac14037..714e6318 100644 --- a/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_drawn.json +++ b/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_drawn.json @@ -1,7 +1,6 @@ { - "parent": "builtin/entity", "textures": { - "layer0": "xercapaint:item/item_canvas_drawn" + "particle": "xercapaint:item/item_canvas_drawn" }, "display": { "gui": { diff --git a/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_large.json b/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_large.json index 01124c96..5524525f 100644 --- a/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_large.json +++ b/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_large.json @@ -3,13 +3,5 @@ "parent": "item/generated", "textures": { "layer0": "xercapaint:item/item_canvas_large" - }, - "overrides": [ - { - "predicate": { - "xercapaint:drawn": 1 - }, - "model": "xercapaint:item/item_canvas_large_drawn" } - ] } \ No newline at end of file diff --git a/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_large_drawn.json b/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_large_drawn.json index 64cb78d8..c7f08714 100644 --- a/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_large_drawn.json +++ b/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_large_drawn.json @@ -1,8 +1,7 @@ { - "parent": "builtin/entity", "textures": { - "layer0": "xercapaint:item/item_canvas_large_drawn" + "particle": "xercapaint:item/item_canvas_large_drawn" }, "display": { "gui": { diff --git a/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_long.json b/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_long.json index 9d04aab6..dd338de8 100644 --- a/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_long.json +++ b/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_long.json @@ -3,13 +3,5 @@ "parent": "item/generated", "textures": { "layer0": "xercapaint:item/item_canvas_long" - }, - "overrides": [ - { - "predicate": { - "xercapaint:drawn": 1 - }, - "model": "xercapaint:item/item_canvas_long_drawn" } - ] } \ No newline at end of file diff --git a/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_long_drawn.json b/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_long_drawn.json index 87f4fcfb..526b866b 100644 --- a/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_long_drawn.json +++ b/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_long_drawn.json @@ -1,8 +1,7 @@ { - "parent": "builtin/entity", "textures": { - "layer0": "xercapaint:item/item_canvas_long_drawn" + "particle": "xercapaint:item/item_canvas_long_drawn" }, "display": { "gui": { diff --git a/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_tall.json b/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_tall.json index 0188fac9..c90fd9fd 100644 --- a/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_tall.json +++ b/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_tall.json @@ -3,13 +3,5 @@ "parent": "item/generated", "textures": { "layer0": "xercapaint:item/item_canvas_tall" - }, - "overrides": [ - { - "predicate": { - "xercapaint:drawn": 1 - }, - "model": "xercapaint:item/item_canvas_tall_drawn" } - ] } \ No newline at end of file diff --git a/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_tall_drawn.json b/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_tall_drawn.json index c45d459a..4e3f3b2c 100644 --- a/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_tall_drawn.json +++ b/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_canvas_tall_drawn.json @@ -1,8 +1,7 @@ { - "parent": "builtin/entity", "textures": { - "layer0": "xercapaint:item/item_canvas_tall_drawn" + "particle": "xercapaint:item/item_canvas_tall_drawn" }, "display": { "gui": { diff --git a/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_palette.json b/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_palette.json index ea15aea4..4859e4a2 100644 --- a/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_palette.json +++ b/XercaPaintMod/src/main/resources/assets/xercapaint/models/item/item_palette.json @@ -2,24 +2,5 @@ "parent": "item/generated", "textures": { "layer0": "xercapaint:item/item_palette" - }, - "overrides": [ - { "predicate": { "xercapaint:colors": 0.0000 }, "model": "xercapaint:item/item_palette" }, - { "predicate": { "xercapaint:colors": 0.0625 }, "model": "xercapaint:item/item_palette1" }, - { "predicate": { "xercapaint:colors": 0.1250 }, "model": "xercapaint:item/item_palette2" }, - { "predicate": { "xercapaint:colors": 0.1875 }, "model": "xercapaint:item/item_palette3" }, - { "predicate": { "xercapaint:colors": 0.2500 }, "model": "xercapaint:item/item_palette4" }, - { "predicate": { "xercapaint:colors": 0.3125 }, "model": "xercapaint:item/item_palette5" }, - { "predicate": { "xercapaint:colors": 0.3750 }, "model": "xercapaint:item/item_palette6" }, - { "predicate": { "xercapaint:colors": 0.4375 }, "model": "xercapaint:item/item_palette7" }, - { "predicate": { "xercapaint:colors": 0.5000 }, "model": "xercapaint:item/item_palette8" }, - { "predicate": { "xercapaint:colors": 0.5625 }, "model": "xercapaint:item/item_palette9" }, - { "predicate": { "xercapaint:colors": 0.6250 }, "model": "xercapaint:item/item_palette10" }, - { "predicate": { "xercapaint:colors": 0.6875 }, "model": "xercapaint:item/item_palette11" }, - { "predicate": { "xercapaint:colors": 0.7500 }, "model": "xercapaint:item/item_palette12" }, - { "predicate": { "xercapaint:colors": 0.8125 }, "model": "xercapaint:item/item_palette13" }, - { "predicate": { "xercapaint:colors": 0.8750 }, "model": "xercapaint:item/item_palette14" }, - { "predicate": { "xercapaint:colors": 0.9375 }, "model": "xercapaint:item/item_palette15" }, - { "predicate": { "xercapaint:colors": 1.0000 }, "model": "xercapaint:item/item_palette16" } - ] + } } \ No newline at end of file From 4bea65610af822c54df44fa6701db0e0690aae02 Mon Sep 17 00:00:00 2001 From: Loki Rautio Date: Mon, 3 Nov 2025 22:22:55 -0600 Subject: [PATCH 08/10] fix text rendering --- .../main/java/xerca/xercapaint/client/GuiCanvasEdit.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/GuiCanvasEdit.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/GuiCanvasEdit.java index ac75dfce..a80f3c3d 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/GuiCanvasEdit.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/GuiCanvasEdit.java @@ -17,6 +17,7 @@ import net.minecraft.client.resources.language.I18n; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.ARGB; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.phys.Vec2; @@ -465,13 +466,13 @@ private void drawSigning(@NotNull GuiGraphics guiGraphics) { } String s1 = I18n.get("canvas.editTitle"); int k = this.font.width(s1); - guiGraphics.drawString(this.font, s1, (int)(i + 26 + (116 - k) / 2.0f), (j + 16 + 16), 0, false); + guiGraphics.drawString(this.font, s1, (int)(i + 26 + (116 - k) / 2.0f), (j + 16 + 16), ARGB.opaque(0), false); int l = this.font.width(s); - guiGraphics.drawString(this.font, s, (int)(i + 26 + (116 - l) / 2.0f), j + 48, 0, false); + guiGraphics.drawString(this.font, s, (int)(i + 26 + (116 - l) / 2.0f), j + 48, ARGB.opaque(0), false); String s2 = I18n.get("canvas.byAuthor", this.editingPlayer.getName().getString()); int i1 = this.font.width(s2); - guiGraphics.drawString(this.font, ChatFormatting.DARK_GRAY + s2, (int)(i + 26 + (116 - i1) / 2.0f), j + 48 + 10, 0, false); - guiGraphics.drawWordWrap(this.font, Component.translatable("canvas.finalizeWarning"), i + 26, j + 80, 116, 0); + guiGraphics.drawString(this.font, ChatFormatting.DARK_GRAY + s2, (int)(i + 26 + (116 - i1) / 2.0f), j + 48 + 10, ARGB.opaque(0), false); + guiGraphics.drawWordWrap(this.font, Component.translatable("canvas.finalizeWarning"), i + 26, j + 80, 116, ARGB.opaque(0), false); } private void playBrushSound(){ From dd304a4785528f80092e01e457c037de5f33c59e Mon Sep 17 00:00:00 2001 From: Loki Rautio Date: Tue, 4 Nov 2025 00:21:35 -0600 Subject: [PATCH 09/10] fix awful shit (item not rendering) --- .../xercapaint/client/CanvasItemRenderer.java | 73 ++++++++++--------- .../xercapaint/client/RenderEntityCanvas.java | 10 ++- .../xerca/xercapaint/entity/EntityCanvas.java | 10 +-- 3 files changed, 51 insertions(+), 42 deletions(-) diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/CanvasItemRenderer.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/CanvasItemRenderer.java index 9ab0c9a5..f3aa7d6a 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/CanvasItemRenderer.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/CanvasItemRenderer.java @@ -74,50 +74,51 @@ private void renderEmptyCanvas(PoseStack ms, SubmitNodeCollector submitNodeColle ms.scale(f, f, f); - RenderUtil.setShaderTexture(0, emptyCanvasLocation); - Matrix4f m = ms.last().pose(); - PoseStack.Pose pose = ms.last(); - submitNodeCollector.submitCustomGeometry(ms, RenderType.entitySolid(emptyCanvasLocation), (p, vb) -> { + + + submitNodeCollector.submitCustomGeometry(ms, RenderType.entitySolid(emptyCanvasLocation), (pose, vb) -> { + Matrix4f m = pose.pose(); + RenderUtil.setShaderTexture(0, emptyCanvasLocation); // Draw the front addVertex(vb, m, pose, 0.0F, 32.0F*hScale, -1.0F, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); addVertex(vb, m, pose, 32.0F*wScale, 32.0F*hScale, -1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); addVertex(vb, m, pose, 32.0F*wScale, 0.0F, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); addVertex(vb, m, pose, 0.0F, 0.0F, -1.0F, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - submitNodeCollector.submitCustomGeometry(ms, RenderType.entitySolid(backLocation), (p2, vb2) -> { - // Draw the back and sides - final float sideWidth = 1.0F/16.0F; - - RenderUtil.setShaderTexture(0, backLocation); - addVertex(vb2, m, pose, 0.0D, 0.0D, 1.0D, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 32.0D*wScale, 0.0D, 1.0D, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 32.0D*wScale, 32.0D*hScale, 1.0D, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 0.0D, 32.0D*hScale, 1.0D, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - - // Sides - addVertex(vb2, m, pose, 0.0D, 0.0D, 1.0D, sideWidth, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 0.0D, 32.0D*hScale, 1.0D, sideWidth, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 0.0D, 32.0D*hScale, -1.0D, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 0.0D, 0.0D, -1.0D, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - - addVertex(vb2, m, pose, 0.0D, 32.0D*hScale, 1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 32.0D*wScale, 32.0D*hScale, 1.0F, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 32.0D*wScale, 32.0D*hScale, -1.0F, 1.0F, sideWidth, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 0.0D, 32.0D*hScale, -1.0F, 0.0F, sideWidth, packedLight, xOffset, yOffset, zOffset); - - addVertex(vb2, m, pose, 32.0D*wScale, 0.0D, -1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 32.0D*wScale, 32.0D*hScale, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 32.0D*wScale, 32.0D*hScale, 1.0F, sideWidth, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 32.0D*wScale, 0.0D, 1.0F, sideWidth, 0.0F, packedLight, xOffset, yOffset, zOffset); - - addVertex(vb2, m, pose, 0.0D, 0.0D, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 32.0D*wScale, 0.0D, -1.0F, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 32.0D*wScale, 0.0D, 1.0F, 1.0F, 1.0F-sideWidth, packedLight, xOffset, yOffset, zOffset); - addVertex(vb2, m, pose, 0.0D, 0.0D, 1.0F, 0.0F, 1.0F-sideWidth, packedLight, xOffset, yOffset, zOffset); + }); + submitNodeCollector.submitCustomGeometry(ms, RenderType.entitySolid(backLocation), (pose, vb2) -> { + // Draw the back and sides + final float sideWidth = 1.0F/16.0F; + Matrix4f m = pose.pose(); + RenderUtil.setShaderTexture(0, backLocation); + addVertex(vb2, m, pose, 0.0D, 0.0D, 1.0D, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D*wScale, 0.0D, 1.0D, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D*wScale, 32.0D*hScale, 1.0D, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 0.0D, 32.0D*hScale, 1.0D, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + + // Sides + addVertex(vb2, m, pose, 0.0D, 0.0D, 1.0D, sideWidth, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 0.0D, 32.0D*hScale, 1.0D, sideWidth, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 0.0D, 32.0D*hScale, -1.0D, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 0.0D, 0.0D, -1.0D, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + + addVertex(vb2, m, pose, 0.0D, 32.0D*hScale, 1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D*wScale, 32.0D*hScale, 1.0F, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D*wScale, 32.0D*hScale, -1.0F, 1.0F, sideWidth, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 0.0D, 32.0D*hScale, -1.0F, 0.0F, sideWidth, packedLight, xOffset, yOffset, zOffset); + + addVertex(vb2, m, pose, 32.0D*wScale, 0.0D, -1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D*wScale, 32.0D*hScale, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D*wScale, 32.0D*hScale, 1.0F, sideWidth, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D*wScale, 0.0D, 1.0F, sideWidth, 0.0F, packedLight, xOffset, yOffset, zOffset); + + addVertex(vb2, m, pose, 0.0D, 0.0D, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D*wScale, 0.0D, -1.0F, 1.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 32.0D*wScale, 0.0D, 1.0F, 1.0F, 1.0F-sideWidth, packedLight, xOffset, yOffset, zOffset); + addVertex(vb2, m, pose, 0.0D, 0.0D, 1.0F, 0.0F, 1.0F-sideWidth, packedLight, xOffset, yOffset, zOffset); - }); }); ms.popPose(); @@ -130,7 +131,7 @@ public void submit(@Nullable ItemStack stack, ItemDisplayContext displayContext, @Override public void getExtents(Set set) { - + set.add(new Vector3f(0, 0, 0)); } @Override diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityCanvas.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityCanvas.java index 3e1ec5fa..652db10c 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityCanvas.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityCanvas.java @@ -19,9 +19,14 @@ import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.NotNull; +import org.joml.AxisAngle4d; import org.joml.Matrix4f; import org.joml.Vector3f; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import xerca.xercapaint.Mod; import xerca.xercapaint.PaletteUtil; import xerca.xercapaint.entity.EntityCanvas; @@ -35,6 +40,7 @@ @net.fabricmc.api.Environment(net.fabricmc.api.EnvType.CLIENT) @ParametersAreNonnullByDefault public class RenderEntityCanvas extends EntityRenderer { + private static final Logger log = LoggerFactory.getLogger(RenderEntityCanvas.class); public static RenderEntityCanvas theInstance; private static final ResourceLocation backLocation = ResourceLocation.fromNamespaceAndPath("minecraft", "textures/block/birch_planks.png"); private static final int[] EMPTY_PIXELS; @@ -206,9 +212,9 @@ public void render(@Nullable EntityCanvas canvas, float yaw, float pitch, PoseSt } ms.mulPose(Axis.XP.rotationDegrees(pitch)); ms.mulPose(Axis.YP.rotationDegrees(180 - yaw)); + //log.warn("scale is {} // facing {} {} {} // pitch {} // yaw {} // pose is {} // {}", f, facing.getStepX(), facing.getStepY(), facing.getStepZ(), pitch, yaw, ms.last(), ms.last().pose()); ms.scale(f, f, f); - // = ms.last().pose(); //PoseStack.Pose pose = ms.last(); @@ -220,6 +226,8 @@ public void render(@Nullable EntityCanvas canvas, float yaw, float pitch, PoseSt RenderUtil.setShaderTexture(0, location); // Draw the front Matrix4f m = localPose.pose(); + + log.warn("we are using matrix {} // normal is {}", localPose.pose(), localPose.normal()); addVertex(vb, m, localPose, 0.0F, 32.0F * hScale, -1.0F, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); addVertex(vb, m, localPose, 32.0F * wScale, 32.0F * hScale, -1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); addVertex(vb, m, localPose, 32.0F * wScale, 0.0F, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset); diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityCanvas.java b/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityCanvas.java index 5377977b..f5ffd3a7 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityCanvas.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/entity/EntityCanvas.java @@ -142,11 +142,11 @@ public int getHeight() { public void dropItem(ServerLevel serverLevel, @Nullable Entity brokenEntity) { if (serverLevel.getGameRules().getBoolean(GameRules.RULE_DOENTITYDROPS)) { this.playSound(SoundEvents.PAINTING_BREAK, 1.0F, 1.0F); - if (brokenEntity instanceof Player playerentity) { - if (playerentity.getAbilities().instabuild) { - return; - } - } +// if (brokenEntity instanceof Player playerentity) { +// if (playerentity.getAbilities().instabuild) { +// return; +// } +// } ItemStack canvasItem; CanvasType canvasType = getCanvasType(); if(canvasType == CanvasType.SMALL){ From 8fa58bd63fe0d9fa6a992e41a5eb9abd4998701f Mon Sep 17 00:00:00 2001 From: Loki Rautio Date: Tue, 4 Nov 2025 00:25:33 -0600 Subject: [PATCH 10/10] cleanup --- .../main/java/xerca/xercapaint/client/RenderEntityCanvas.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityCanvas.java b/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityCanvas.java index 652db10c..ea4c6c15 100644 --- a/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityCanvas.java +++ b/XercaPaintMod/src/main/java/xerca/xercapaint/client/RenderEntityCanvas.java @@ -40,7 +40,6 @@ @net.fabricmc.api.Environment(net.fabricmc.api.EnvType.CLIENT) @ParametersAreNonnullByDefault public class RenderEntityCanvas extends EntityRenderer { - private static final Logger log = LoggerFactory.getLogger(RenderEntityCanvas.class); public static RenderEntityCanvas theInstance; private static final ResourceLocation backLocation = ResourceLocation.fromNamespaceAndPath("minecraft", "textures/block/birch_planks.png"); private static final int[] EMPTY_PIXELS; @@ -227,7 +226,6 @@ public void render(@Nullable EntityCanvas canvas, float yaw, float pitch, PoseSt // Draw the front Matrix4f m = localPose.pose(); - log.warn("we are using matrix {} // normal is {}", localPose.pose(), localPose.normal()); addVertex(vb, m, localPose, 0.0F, 32.0F * hScale, -1.0F, 1.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); addVertex(vb, m, localPose, 32.0F * wScale, 32.0F * hScale, -1.0F, 0.0F, 0.0F, packedLight, xOffset, yOffset, zOffset); addVertex(vb, m, localPose, 32.0F * wScale, 0.0F, -1.0F, 0.0F, 1.0F, packedLight, xOffset, yOffset, zOffset);