diff --git a/common/src/main/java/eu/midnightdust/visualoverhaul/IconicButtons.java b/common/src/main/java/eu/midnightdust/visualoverhaul/IconicButtons.java index 9ffaf63..d4b1fbb 100644 --- a/common/src/main/java/eu/midnightdust/visualoverhaul/IconicButtons.java +++ b/common/src/main/java/eu/midnightdust/visualoverhaul/IconicButtons.java @@ -4,6 +4,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import eu.midnightdust.visualoverhaul.config.VOConfig; import eu.midnightdust.visualoverhaul.mixin.TextureManagerAccessor; import eu.midnightdust.visualoverhaul.util.ModIconUtil; +import eu.midnightdust.visualoverhaul.util.VOColorUtil; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.widget.ClickableWidget; @@ -25,6 +26,8 @@ import java.util.Map; import java.util.Properties; import java.util.function.Function; +import static eu.midnightdust.visualoverhaul.util.VOColorUtil.alphaAndBrightness; + public class IconicButtons { MinecraftClient client = MinecraftClient.getInstance(); TextureManager textureManager = client.getTextureManager(); @@ -77,7 +80,7 @@ public class IconicButtons { boolean showLeftWhenBoth = (VOConfig.buttonIconPosition.equals(VOConfig.IconPosition.BOTH) && !limitedSpace) || (VOConfig.buttonIconPosition.equals(VOConfig.IconPosition.BOTH) && widget.getX() < scaledWidth/2); boolean showRightWhenBoth = (VOConfig.buttonIconPosition.equals(VOConfig.IconPosition.BOTH) && !limitedSpace) || (VOConfig.buttonIconPosition.equals(VOConfig.IconPosition.BOTH) && widget.getX() > scaledWidth/2); - int color = widget.active ? fromArgb(alpha, 1.0F) : fromArgb(alpha, 0.3F); + int color = widget.active ? alphaAndBrightness(alpha, 1.0F) : alphaAndBrightness(alpha, 0.3F); RenderSystem.enableBlend(); RenderSystem.enableDepthTest(); int inset = 2; @@ -96,9 +99,6 @@ public class IconicButtons { RenderSystem.disableDepthTest(); } } - int fromArgb(float alpha, float brightness) { - return ColorHelper.getArgb(MathHelper.floor(alpha*255), MathHelper.floor(brightness*255), MathHelper.floor(brightness*255), MathHelper.floor(brightness*255)); - } public static void reload(ResourceManager manager) { manager.findResources("textures", path -> path.getNamespace().equals("iconic") && path.getPath().contains(".properties")).forEach((id, resource) -> { if (manager.getResource(id).isEmpty()) return; diff --git a/common/src/main/java/eu/midnightdust/visualoverhaul/mixin/MixinConstantTintSource.java b/common/src/main/java/eu/midnightdust/visualoverhaul/mixin/MixinConstantTintSource.java new file mode 100644 index 0000000..afebab7 --- /dev/null +++ b/common/src/main/java/eu/midnightdust/visualoverhaul/mixin/MixinConstantTintSource.java @@ -0,0 +1,25 @@ +package eu.midnightdust.visualoverhaul.mixin; + +import eu.midnightdust.visualoverhaul.VisualOverhaulClient; +import eu.midnightdust.visualoverhaul.config.VOConfig; +import net.minecraft.client.render.item.tint.ConstantTintSource; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.List; + +@Mixin(ConstantTintSource.class) +public abstract class MixinConstantTintSource { + @Inject(at = @At("RETURN"), method = "getTint", cancellable = true) + public void vo$modifyLeafTint(ItemStack stack, ClientWorld world, LivingEntity user, CallbackInfoReturnable cir) { + // Dynamic Leaf Item colors + if (VOConfig.coloredItems && List.of(-12012264).contains(cir.getReturnValue())) { + cir.setReturnValue(VisualOverhaulClient.foliageColor); + } + } +} diff --git a/common/src/main/java/eu/midnightdust/visualoverhaul/mixin/MixinGrassTintSource.java b/common/src/main/java/eu/midnightdust/visualoverhaul/mixin/MixinGrassTintSource.java new file mode 100644 index 0000000..fbdbe62 --- /dev/null +++ b/common/src/main/java/eu/midnightdust/visualoverhaul/mixin/MixinGrassTintSource.java @@ -0,0 +1,23 @@ +package eu.midnightdust.visualoverhaul.mixin; + +import eu.midnightdust.visualoverhaul.VisualOverhaulClient; +import eu.midnightdust.visualoverhaul.config.VOConfig; +import net.minecraft.client.render.item.tint.GrassTintSource; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(GrassTintSource.class) +public abstract class MixinGrassTintSource { + @Inject(at = @At("RETURN"), method = "getTint", cancellable = true) + public void vo$modifyGrassTint(ItemStack stack, ClientWorld world, LivingEntity user, CallbackInfoReturnable cir) { + // Dynamic Grass Item colors + if (VOConfig.coloredItems) { + cir.setReturnValue(VisualOverhaulClient.grassColor); + } + } +} diff --git a/common/src/main/java/eu/midnightdust/visualoverhaul/mixin/MixinPotionTintSource.java b/common/src/main/java/eu/midnightdust/visualoverhaul/mixin/MixinPotionTintSource.java new file mode 100644 index 0000000..980e665 --- /dev/null +++ b/common/src/main/java/eu/midnightdust/visualoverhaul/mixin/MixinPotionTintSource.java @@ -0,0 +1,37 @@ +package eu.midnightdust.visualoverhaul.mixin; + +import eu.midnightdust.visualoverhaul.VisualOverhaulClient; +import eu.midnightdust.visualoverhaul.config.VOConfig; +import net.minecraft.client.render.item.tint.PotionTintSource; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.component.DataComponentTypes; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.Potions; +import net.minecraft.registry.entry.RegistryEntry; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.List; + +@Mixin(PotionTintSource.class) +public class MixinPotionTintSource { + @Unique private static final List> WATER_POTIONS = List.of(Potions.WATER, Potions.MUNDANE, Potions.THICK, Potions.AWKWARD); + + @Inject(at = @At("RETURN"), method = "getTint", cancellable = true) + public void vo$modifyWaterTint(ItemStack stack, ClientWorld world, LivingEntity user, CallbackInfoReturnable cir) { + // Dynamic Potion Item colors + if (VOConfig.coloredItems) { + var contents = stack.getComponents().get(DataComponentTypes.POTION_CONTENTS); + if (contents != null && contents.potion().isPresent()) { + if (!WATER_POTIONS.contains(contents.potion().get())) + return; // Skip all potions with effects + } + cir.setReturnValue(VisualOverhaulClient.potionColor); + } + } +} diff --git a/common/src/main/java/eu/midnightdust/visualoverhaul/util/VOColorUtil.java b/common/src/main/java/eu/midnightdust/visualoverhaul/util/VOColorUtil.java index d4eaf61..471093b 100644 --- a/common/src/main/java/eu/midnightdust/visualoverhaul/util/VOColorUtil.java +++ b/common/src/main/java/eu/midnightdust/visualoverhaul/util/VOColorUtil.java @@ -1,12 +1,17 @@ package eu.midnightdust.visualoverhaul.util; +import net.minecraft.util.math.ColorHelper; +import net.minecraft.util.math.MathHelper; + public class VOColorUtil { - public static int convertRgbToArgb(int rgb) { + public static int convertRgbToArgb(int rgb, int alpha) { int red = 0xFF & (rgb >> 16); int green = 0xFF & (rgb >> 8); int blue = 0xFF & (rgb); - int alpha = 200; // Makes water bottles transparent, 255 would be opaque return (alpha << 24) | (red << 16) | (green << 8) | blue; } + public static int alphaAndBrightness(float alpha, float brightness) { + return ColorHelper.getArgb(MathHelper.floor(alpha*255), MathHelper.floor(brightness*255), MathHelper.floor(brightness*255), MathHelper.floor(brightness*255)); + } } diff --git a/common/src/main/resources/visualoverhaul.mixins.json b/common/src/main/resources/visualoverhaul.mixins.json index 5131ba7..d2b556c 100644 --- a/common/src/main/resources/visualoverhaul.mixins.json +++ b/common/src/main/resources/visualoverhaul.mixins.json @@ -9,6 +9,9 @@ "client": [ "ItemRenderStateAccessor", "MixinBlastFurnaceBlock", + "MixinConstantTintSource", + "MixinGrassTintSource", + "MixinPotionTintSource", "MixinPressableWidget", "MixinSliderWidget", "MixinSmokerBlock", diff --git a/fabric/src/main/java/eu/midnightdust/visualoverhaul/fabric/VisualOverhaulClientFabric.java b/fabric/src/main/java/eu/midnightdust/visualoverhaul/fabric/VisualOverhaulClientFabric.java index 11f0d7d..495240f 100644 --- a/fabric/src/main/java/eu/midnightdust/visualoverhaul/fabric/VisualOverhaulClientFabric.java +++ b/fabric/src/main/java/eu/midnightdust/visualoverhaul/fabric/VisualOverhaulClientFabric.java @@ -74,12 +74,6 @@ public class VisualOverhaulClientFabric implements ClientModInitializer { // PhonosCompatInit.init(); //} -// Registries.ITEM.forEach((item) -> { -// ModelPredicateProviderRegistry.register(item, Identifier.ofVanilla("round"), (stack, world, entity, seed) -> -// stack.getComponents().contains(DataComponentTypes.JUKEBOX_PLAYABLE) && stack.getComponents().contains(DataComponentTypes.CUSTOM_MODEL_DATA) && -// stack.getComponents().get(DataComponentTypes.CUSTOM_MODEL_DATA).value() == 710 ? 1.0F : 0.0F); -// }); - ClientPlayNetworking.registerGlobalReceiver(UpdateItemsPacket.PACKET_ID, (payload, context) -> context.client().execute(() -> { if (payload.blockTypeID().equals(UPDATE_TYPE_RECORD)) jukeboxItems.put(payload.pos(), payload.inv().getFirst()); @@ -101,7 +95,6 @@ public class VisualOverhaulClientFabric implements ClientModInitializer { ResourceManagerHelper.registerBuiltinResourcePack(id("nobrewingbottles"), modContainer, ResourcePackActivationType.DEFAULT_ENABLED); ResourceManagerHelper.registerBuiltinResourcePack(id("fancyfurnace"), modContainer, ResourcePackActivationType.DEFAULT_ENABLED); ResourceManagerHelper.registerBuiltinResourcePack(id("coloredwaterbucket"), modContainer, ResourcePackActivationType.DEFAULT_ENABLED); - ResourceManagerHelper.registerBuiltinResourcePack(id("rounddiscs"), modContainer, ResourcePackActivationType.ALWAYS_ENABLED); }); ClientPlayConnectionEvents.JOIN.register((handler, sender, client) -> { if (client.player != null) { @@ -116,7 +109,7 @@ public class VisualOverhaulClientFabric implements ClientModInitializer { waterColor = BiomeColors.getWaterColor(client.world, client.player.getBlockPos()); foliageColor = BiomeColors.getFoliageColor(client.world, client.player.getBlockPos()); grassColor = BiomeColors.getGrassColor(client.world, client.player.getBlockPos()); - potionColor = VOColorUtil.convertRgbToArgb(waterColor); + potionColor = VOColorUtil.convertRgbToArgb(waterColor, 200); } else { waterColor = 4159204; foliageColor = -8934609; @@ -124,21 +117,6 @@ public class VisualOverhaulClientFabric implements ClientModInitializer { potionColor = -13083194; } }); - -// ColorProviderRegistry.ITEM.register((stack, tintIndex) -> tintIndex == 0 ? -1 : waterColor, Items.WATER_BUCKET, Items.AXOLOTL_BUCKET, Items.COD_BUCKET, Items.PUFFERFISH_BUCKET, Items.TROPICAL_FISH_BUCKET, Items.SALMON_BUCKET); -// ColorProviderRegistry.ITEM.register((stack, tintIndex) -> grassColor, Items.GRASS_BLOCK, Items.SHORT_GRASS, Items.TALL_GRASS, Items.FERN, Items.LARGE_FERN); -// ColorProviderRegistry.ITEM.register((stack, tintIndex) -> foliageColor, Items.OAK_LEAVES, Items.DARK_OAK_LEAVES, Items.JUNGLE_LEAVES, Items.ACACIA_LEAVES, Items.VINE, Items.SUGAR_CANE); -// if (VOConfig.coloredLilypad) ColorProviderRegistry.ITEM.register((stack, tintIndex) -> foliageColor, Items.LILY_PAD); -// -// ColorProviderRegistry.ITEM.register((stack, tintIndex) -> { -// var contents = stack.getComponents().get(DataComponentTypes.POTION_CONTENTS); -// if (contents == null || contents.potion().isEmpty()) return tintIndex > 0 ? -1 : potionColor; -// var potion = contents.potion().get(); -// if ((potion == Potions.WATER || potion == Potions.MUNDANE || potion == Potions.THICK || potion == Potions.AWKWARD) && tintIndex == 0) { -// return potionColor; -// } -// return tintIndex > 0 ? -1 : contents.getColor(); -// }, Items.POTION, Items.SPLASH_POTION, Items.LINGERING_POTION); } if (VOConfig.coloredLilypad) { ColorProviderRegistry.BLOCK.register((state, world, pos, tintIndex) -> world != null ? world.getColor(pos, BiomeColors.FOLIAGE_COLOR) : 0, Blocks.LILY_PAD); diff --git a/neoforge/src/main/java/eu/midnightdust/visualoverhaul/neoforge/VisualOverhaulClientForge.java b/neoforge/src/main/java/eu/midnightdust/visualoverhaul/neoforge/VisualOverhaulClientForge.java index e04e5c9..f46cec4 100644 --- a/neoforge/src/main/java/eu/midnightdust/visualoverhaul/neoforge/VisualOverhaulClientForge.java +++ b/neoforge/src/main/java/eu/midnightdust/visualoverhaul/neoforge/VisualOverhaulClientForge.java @@ -8,13 +8,10 @@ import net.minecraft.block.Block; import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; import net.minecraft.client.color.world.BiomeColors; -import net.minecraft.client.item.ModelPredicateProviderRegistry; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderLayers; -import net.minecraft.component.DataComponentTypes; import net.minecraft.registry.Registries; import net.minecraft.resource.ResourcePackProfile; -import net.minecraft.util.Identifier; import net.neoforged.fml.ModLoadingContext; import net.neoforged.neoforge.client.event.ClientTickEvent; import net.neoforged.neoforge.common.NeoForge; @@ -43,12 +40,6 @@ public class VisualOverhaulClientForge { }); NeoForge.EVENT_BUS.addListener(VisualOverhaulClientForge::doClientTick); - Registries.ITEM.forEach((item) -> { - ModelPredicateProviderRegistry.register(item, Identifier.ofVanilla("round"), (stack, world, entity, seed) -> - stack.getComponents().contains(DataComponentTypes.JUKEBOX_PLAYABLE) && stack.getComponents().contains(DataComponentTypes.CUSTOM_MODEL_DATA) && - stack.getComponents().get(DataComponentTypes.CUSTOM_MODEL_DATA).value() == 710 ? 1.0F : 0.0F); - }); - RenderLayers.setRenderLayer(Blocks.JUKEBOX, RenderLayer.getCutout()); RenderLayers.setRenderLayer(Blocks.FURNACE, RenderLayer.getCutout()); RenderLayers.setRenderLayer(Blocks.SMOKER, RenderLayer.getCutout()); @@ -61,7 +52,7 @@ public class VisualOverhaulClientForge { waterColor = BiomeColors.getWaterColor(client.world, client.player.getBlockPos()); foliageColor = BiomeColors.getFoliageColor(client.world, client.player.getBlockPos()); grassColor = BiomeColors.getGrassColor(client.world, client.player.getBlockPos()); - potionColor = VOColorUtil.convertRgbToArgb(waterColor); + potionColor = VOColorUtil.convertRgbToArgb(waterColor, 200); } else { waterColor = 4159204; foliageColor = -8934609; diff --git a/neoforge/src/main/java/eu/midnightdust/visualoverhaul/neoforge/VisualOverhaulForge.java b/neoforge/src/main/java/eu/midnightdust/visualoverhaul/neoforge/VisualOverhaulForge.java index a848e6e..499c890 100644 --- a/neoforge/src/main/java/eu/midnightdust/visualoverhaul/neoforge/VisualOverhaulForge.java +++ b/neoforge/src/main/java/eu/midnightdust/visualoverhaul/neoforge/VisualOverhaulForge.java @@ -8,7 +8,6 @@ import static eu.midnightdust.visualoverhaul.VisualOverhaulCommon.*; @Mod(MOD_ID) public class VisualOverhaulForge { - public VisualOverhaulForge() { if (FMLEnvironment.dist == Dist.CLIENT) VisualOverhaulClientForge.initClient(); } diff --git a/neoforge/src/main/java/eu/midnightdust/visualoverhaul/neoforge/mixin/MixinAbstractFurnaceBlockEntity.java b/neoforge/src/main/java/eu/midnightdust/visualoverhaul/neoforge/mixin/MixinAbstractFurnaceBlockEntity.java index b685723..86298c8 100755 --- a/neoforge/src/main/java/eu/midnightdust/visualoverhaul/neoforge/mixin/MixinAbstractFurnaceBlockEntity.java +++ b/neoforge/src/main/java/eu/midnightdust/visualoverhaul/neoforge/mixin/MixinAbstractFurnaceBlockEntity.java @@ -9,6 +9,7 @@ import net.minecraft.block.entity.LockableContainerBlockEntity; import net.minecraft.item.ItemStack; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerChunkManager; +import net.minecraft.server.world.ServerWorld; import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; @@ -36,7 +37,7 @@ public abstract class MixinAbstractFurnaceBlockEntity extends LockableContainerB } @Inject(at = @At("TAIL"), method = "tick") - private static void tick(World world, BlockPos pos, BlockState state, AbstractFurnaceBlockEntity blockEntity, CallbackInfo ci) { + private static void tick(ServerWorld world, BlockPos pos, BlockState state, AbstractFurnaceBlockEntity blockEntity, CallbackInfo ci) { if (world.getBlockState(pos).hasBlockEntity()) { if (!world.isClient && (visualoverhaul$invUpdate || world.getPlayers().size() == visualoverhaul$playerUpdate)) { Stream watchingPlayers = ((ServerChunkManager)world.getChunkManager()).chunkLoadingManager.getPlayersWatchingChunk(new ChunkPos(pos), false).stream(); diff --git a/neoforge/src/main/java/eu/midnightdust/visualoverhaul/neoforge/mixin/MixinItemColors.java b/neoforge/src/main/java/eu/midnightdust/visualoverhaul/neoforge/mixin/MixinItemColors.java deleted file mode 100644 index 763c3f7..0000000 --- a/neoforge/src/main/java/eu/midnightdust/visualoverhaul/neoforge/mixin/MixinItemColors.java +++ /dev/null @@ -1,39 +0,0 @@ -package eu.midnightdust.visualoverhaul.neoforge.mixin; - -import eu.midnightdust.visualoverhaul.config.VOConfig; -import net.minecraft.client.color.block.BlockColors; -import net.minecraft.client.color.item.ItemColors; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.item.Items; -import net.minecraft.potion.Potions; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import static eu.midnightdust.visualoverhaul.VisualOverhaulClient.*; -import static eu.midnightdust.visualoverhaul.VisualOverhaulClient.potionColor; - -@Mixin(ItemColors.class) -public abstract class MixinItemColors { - @SuppressWarnings("deprecation") - @Inject(method = "create", at = @At("RETURN")) - private static void create(BlockColors blockMap, CallbackInfoReturnable info) { - if (VOConfig.coloredItems) { - ItemColors itemColors = info.getReturnValue(); - itemColors.register((stack, tintIndex) -> tintIndex == 0 ? -1 : waterColor, Items.WATER_BUCKET, Items.AXOLOTL_BUCKET, Items.COD_BUCKET, Items.PUFFERFISH_BUCKET, Items.TROPICAL_FISH_BUCKET, Items.SALMON_BUCKET); - itemColors.register((stack, tintIndex) -> grassColor, Items.GRASS_BLOCK, Items.SHORT_GRASS, Items.TALL_GRASS, Items.FERN, Items.LARGE_FERN); - itemColors.register((stack, tintIndex) -> foliageColor, Items.OAK_LEAVES, Items.JUNGLE_LEAVES, Items.DARK_OAK_LEAVES, Items.ACACIA_LEAVES, Items.VINE, Items.SUGAR_CANE); - if (VOConfig.coloredLilypad) itemColors.register((stack, tintIndex) -> foliageColor, Items.LILY_PAD); - itemColors.register((stack, tintIndex) -> { - var contents = stack.getComponents().get(DataComponentTypes.POTION_CONTENTS); - if (contents == null || contents.potion().isEmpty()) return tintIndex > 0 ? -1 : potionColor; - var potion = contents.potion().get(); - if ((potion == Potions.WATER || potion == Potions.MUNDANE || potion == Potions.THICK || potion == Potions.AWKWARD) && tintIndex == 0) { - return potionColor; - } - return tintIndex > 0 ? -1 : contents.getColor(); - }, Items.POTION, Items.SPLASH_POTION, Items.LINGERING_POTION); - } - } -}