mirror of
https://github.com/TeamMidnightDust/VisualOverhaul.git
synced 2025-12-13 04:45:10 +01:00
VisualOverhaul 5.0.0 - The Iconic Update
- Port to 1.19.4 - Use Architectury -> Forge & native Quilt support! - New Feature: Icon Buttons! - Makes buttons look less bland by adding icons to them - Loaded from resourcepacks - Currently uses vanilla items as icons - Organize config screen in tabs
This commit is contained in:
@@ -1,10 +1,9 @@
|
||||
plugins {
|
||||
id "architectury-plugin" version "3.4-SNAPSHOT"
|
||||
id "dev.architectury.loom" version "1.0-SNAPSHOT" apply false
|
||||
id "dev.architectury.loom" version "1.1-SNAPSHOT" apply false
|
||||
}
|
||||
|
||||
architectury {
|
||||
injectInjectables = false
|
||||
minecraft = rootProject.minecraft_version
|
||||
}
|
||||
|
||||
@@ -17,16 +16,12 @@ repositories {
|
||||
subprojects {
|
||||
apply plugin: "dev.architectury.loom"
|
||||
|
||||
loom {
|
||||
silentMojangMappingsLicense()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
minecraft "com.mojang:minecraft:${rootProject.minecraft_version}"
|
||||
// The following line declares the mojmap mappings, you may use other mappings as well
|
||||
//mappings loom.officialMojangMappings()
|
||||
// The following line declares the yarn mappings you may select this one as well.
|
||||
mappings "net.fabricmc:yarn:1.19.2+build.3:v2"
|
||||
mappings "net.fabricmc:yarn:${rootProject.yarn_mappings}:v2"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
architectury {
|
||||
injectInjectables = false
|
||||
common(rootProject.enabled_platforms.split(","))
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
package eu.midnightdust.visualoverhaul;
|
||||
|
||||
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 net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.gui.DrawableHelper;
|
||||
import net.minecraft.client.gui.widget.ClickableWidget;
|
||||
import net.minecraft.client.texture.*;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.resource.ResourceManager;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.text.TranslatableTextContent;
|
||||
import net.minecraft.util.Identifier;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.Properties;
|
||||
|
||||
public class IconicButtons extends DrawableHelper {
|
||||
MinecraftClient client = MinecraftClient.getInstance();
|
||||
private String buttonId;
|
||||
private Text prevText;
|
||||
private Identifier iconId;
|
||||
public IconicButtons(ClickableWidget widget) {
|
||||
init(widget);
|
||||
}
|
||||
public void init(ClickableWidget widget) {
|
||||
prevText = widget.getMessage();
|
||||
buttonId = (widget.getMessage().getContent() instanceof TranslatableTextContent translatableTextContent) ? translatableTextContent.getKey().toLowerCase() : "";
|
||||
if (VOConfig.buttonIcons && !buttonId.equals("")) {
|
||||
if (VOConfig.debug) System.out.println(buttonId);
|
||||
iconId = new Identifier("iconic", "textures/gui/icons/" + buttonId.toLowerCase()+".png");
|
||||
if (buttonId.endsWith(".midnightconfig.title"))
|
||||
{
|
||||
iconId = new Identifier("modid", buttonId.replace(".midnightconfig.title", "") + "_icon");
|
||||
NativeImageBackedTexture icon = new ModIconUtil(buttonId.replace(".midnightconfig.title", "")).createModIcon();
|
||||
if (icon != null) {
|
||||
client.getTextureManager().registerTexture(iconId, icon);
|
||||
} else {
|
||||
iconId = null;
|
||||
}
|
||||
}
|
||||
if (iconId == null) return;
|
||||
TextureManager textureManager = client.getTextureManager();
|
||||
AbstractTexture abstractTexture = textureManager.getOrDefault(iconId, null);
|
||||
if (abstractTexture == null) {
|
||||
abstractTexture = new ResourceTexture(iconId);
|
||||
try { abstractTexture.load(((TextureManagerAccessor)textureManager).getResourceContainer());
|
||||
} catch (Exception e) {iconId = null; return;}
|
||||
textureManager.registerTexture(iconId, abstractTexture);
|
||||
}
|
||||
if (abstractTexture == MissingSprite.getMissingSpriteTexture()) iconId = null;
|
||||
}
|
||||
}
|
||||
public void renderIcons(MatrixStack matrices, ClickableWidget widget, float alpha) {
|
||||
if (widget.getMessage() == null) return;
|
||||
if (prevText != widget.getMessage()) init(widget);
|
||||
if (VOConfig.buttonIcons && !buttonId.equals("") && iconId != null) {
|
||||
int scaledWidth = client.getWindow().getScaledWidth();
|
||||
|
||||
boolean limitedSpace = client.textRenderer.getWidth(widget.getMessage()) > (widget.getWidth() * 0.75f);
|
||||
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);
|
||||
|
||||
RenderSystem.setShaderTexture(0, iconId);
|
||||
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, alpha);
|
||||
if (!widget.active) RenderSystem.setShaderColor(0.3F, 0.3F, 0.3F, alpha);
|
||||
RenderSystem.enableBlend();
|
||||
RenderSystem.enableDepthTest();
|
||||
int inset = 2;
|
||||
if (VOConfig.zoomIconOnHover && widget.isSelected()) inset = 1;
|
||||
int size = 20-inset*2;
|
||||
|
||||
if (VOConfig.buttonIconPosition.equals(VOConfig.IconPosition.LEFT) || showLeftWhenBoth || (VOConfig.buttonIconPosition.equals(VOConfig.IconPosition.LOCATION) && widget.getX() < scaledWidth/2))
|
||||
drawTexture(matrices, widget.getX()+inset, widget.getY()+inset, 0, 0, size, size, size, size);
|
||||
|
||||
if (VOConfig.buttonIconPosition.equals(VOConfig.IconPosition.RIGHT) || showRightWhenBoth || (VOConfig.buttonIconPosition.equals(VOConfig.IconPosition.LOCATION) && widget.getX()+widget.getWidth() > scaledWidth/2))
|
||||
drawTexture(matrices, widget.getX()+widget.getWidth()-20+inset, widget.getY()+inset, 0, 0, size, size, size, size);
|
||||
|
||||
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
}
|
||||
}
|
||||
public static void reload(ResourceManager manager) {
|
||||
manager.findResources("textures", path -> path.getPath().contains(".properties")).forEach((id, resource) -> {
|
||||
if (manager.getResource(id).isEmpty()) return;
|
||||
try (InputStream stream = manager.getResource(id).get().getInputStream()) {
|
||||
Identifier iconId = new Identifier(id.getNamespace(), id.getPath().replace(".properties", ".png"));
|
||||
if (manager.getResource(iconId).isPresent()) return;
|
||||
|
||||
Properties properties = new Properties();
|
||||
properties.load(stream);
|
||||
while (properties.get("properties") != null) {
|
||||
Identifier propertiesId = new Identifier(properties.getProperty("properties"));
|
||||
String textureId = propertiesId.toString().replace(".properties", ".png");
|
||||
|
||||
properties.clear();
|
||||
if (manager.getResource(Identifier.tryParse(textureId)).isPresent()) { // If a texture is present at the location of the referenced properties file, use that instead
|
||||
properties.put("texture", textureId);
|
||||
}
|
||||
else if (manager.getResource(propertiesId).isPresent()) {
|
||||
properties.load(manager.getResource(propertiesId).get().getInputStream()); // Else load the referenced properties file, if present
|
||||
} else return;
|
||||
}
|
||||
|
||||
if (properties.get("texture") != null) {
|
||||
Identifier textureId = new Identifier(properties.getProperty("texture"));
|
||||
TextureManager textureManager = MinecraftClient.getInstance().getTextureManager();
|
||||
AbstractTexture abstractTexture = textureManager.getOrDefault(iconId, null);
|
||||
if (abstractTexture == null) {
|
||||
abstractTexture = new ResourceTexture(textureId);
|
||||
textureManager.registerTexture(iconId, abstractTexture);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
LogManager.getLogger("Iconic").error("Error occurred while loading texture.properties " + id.toString(), e);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,11 @@ package eu.midnightdust.visualoverhaul;
|
||||
|
||||
import eu.midnightdust.visualoverhaul.config.VOConfig;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.color.world.BiomeColors;
|
||||
import net.minecraft.client.item.ModelPredicateProviderRegistry;
|
||||
import net.minecraft.item.MusicDiscItem;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import static eu.midnightdust.visualoverhaul.VisualOverhaul.MOD_ID;
|
||||
|
||||
|
||||
@@ -9,15 +9,20 @@ import net.minecraft.client.render.VertexConsumerProvider;
|
||||
import net.minecraft.client.render.WorldRenderer;
|
||||
import net.minecraft.client.render.block.entity.BlockEntityRenderer;
|
||||
import net.minecraft.client.render.block.entity.BlockEntityRendererFactory;
|
||||
import net.minecraft.client.render.model.json.ModelTransformation;
|
||||
import net.minecraft.client.render.model.json.ModelTransformationMode;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.math.Vec3f;
|
||||
import org.joml.AxisAngle4f;
|
||||
import org.joml.Math;
|
||||
import org.joml.Quaternionf;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@Environment(EnvType.CLIENT)
|
||||
public class BrewingStandBlockEntityRenderer implements BlockEntityRenderer<BrewingStandBlockEntity> {
|
||||
private static final Quaternionf degrees45 = new Quaternionf(new AxisAngle4f(Math.toRadians(45), 0, 1, 0));
|
||||
private static final Quaternionf degrees180 = new Quaternionf(new AxisAngle4f(Math.toRadians(180), 0, 1, 0));
|
||||
private static final Quaternionf degrees315 = new Quaternionf(new AxisAngle4f(Math.toRadians(315), 0, 1, 0));
|
||||
|
||||
public BrewingStandBlockEntityRenderer(BlockEntityRendererFactory.Context ctx) {
|
||||
}
|
||||
@@ -37,28 +42,28 @@ public class BrewingStandBlockEntityRenderer implements BlockEntityRenderer<Brew
|
||||
|
||||
matrices.translate(0.86f, 0.23f, 0.5f);
|
||||
matrices.scale(1.15f, 1.15f, 1.15f);
|
||||
matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(180));
|
||||
MinecraftClient.getInstance().getItemRenderer().renderItem(item1, ModelTransformation.Mode.GROUND, lightAtBlock, overlay, matrices, vertexConsumers, 0);
|
||||
matrices.multiply(degrees180);
|
||||
MinecraftClient.getInstance().getItemRenderer().renderItem(item1, ModelTransformationMode.GROUND, lightAtBlock, overlay, matrices, vertexConsumers, blockEntity.getWorld(), 0);
|
||||
|
||||
matrices.pop();
|
||||
}
|
||||
if (!item2.isEmpty()) {
|
||||
matrices.push();
|
||||
|
||||
matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(315));
|
||||
matrices.multiply(degrees315);
|
||||
matrices.translate(0.32f, 0.23f, 0f);
|
||||
matrices.scale(1.15f, 1.15f, 1.15f);
|
||||
MinecraftClient.getInstance().getItemRenderer().renderItem(item2, ModelTransformation.Mode.GROUND, lightAtBlock, overlay, matrices, vertexConsumers, 0);
|
||||
MinecraftClient.getInstance().getItemRenderer().renderItem(item2, ModelTransformationMode.GROUND, lightAtBlock, overlay, matrices, vertexConsumers, blockEntity.getWorld(), 0);
|
||||
|
||||
matrices.pop();
|
||||
}
|
||||
if (!item3.isEmpty()) {
|
||||
matrices.push();
|
||||
|
||||
matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(45));
|
||||
matrices.multiply(degrees45);
|
||||
matrices.translate(-0.39f, 0.23f, 0.705f);
|
||||
matrices.scale(1.15f, 1.15f, 1.15f);
|
||||
MinecraftClient.getInstance().getItemRenderer().renderItem(item3, ModelTransformation.Mode.GROUND, lightAtBlock, overlay, matrices, vertexConsumers, 0);
|
||||
MinecraftClient.getInstance().getItemRenderer().renderItem(item3, ModelTransformationMode.GROUND, lightAtBlock, overlay, matrices, vertexConsumers, blockEntity.getWorld(), 0);
|
||||
|
||||
matrices.pop();
|
||||
}
|
||||
|
||||
@@ -13,18 +13,21 @@ import net.minecraft.client.render.VertexConsumerProvider;
|
||||
import net.minecraft.client.render.WorldRenderer;
|
||||
import net.minecraft.client.render.block.entity.BlockEntityRenderer;
|
||||
import net.minecraft.client.render.block.entity.BlockEntityRendererFactory;
|
||||
import net.minecraft.client.render.model.json.ModelTransformation;
|
||||
import net.minecraft.client.render.model.json.ModelTransformationMode;
|
||||
import net.minecraft.client.texture.Sprite;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tag.ItemTags;
|
||||
import net.minecraft.registry.tag.ItemTags;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.math.Vec3f;
|
||||
import org.joml.AxisAngle4f;
|
||||
import org.joml.Math;
|
||||
import org.joml.Quaternionf;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@Environment(EnvType.CLIENT)
|
||||
public class FurnaceBlockEntityRenderer<E extends AbstractFurnaceBlockEntity> implements BlockEntityRenderer<E> {
|
||||
private static final Quaternionf degrees90x = new Quaternionf(new AxisAngle4f(Math.toRadians(90), 1, 0, 0));
|
||||
private final FurnaceWoodenPlanksModel planks;
|
||||
|
||||
public FurnaceBlockEntityRenderer(BlockEntityRendererFactory.Context ctx) {
|
||||
@@ -46,10 +49,10 @@ public class FurnaceBlockEntityRenderer<E extends AbstractFurnaceBlockEntity> im
|
||||
if (blockEntity.getCachedState().getBlock().equals(Blocks.SMOKER)) matrices.translate(0f, -0.06f, 0f);
|
||||
if (blockEntity.getCachedState().getBlock().equals(Blocks.BLAST_FURNACE)) matrices.translate(0f, -0.25f, 0f);
|
||||
matrices.scale(1f, 1f, 1f);
|
||||
matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(angle * 3 + 180));
|
||||
matrices.multiply(new Quaternionf(new AxisAngle4f(Math.toRadians(angle * 3 + 180), 0, 1, 0)));
|
||||
matrices.translate(0.0f, 0.0f, -0.4f);
|
||||
matrices.multiply(Vec3f.POSITIVE_X.getDegreesQuaternion(90));
|
||||
MinecraftClient.getInstance().getItemRenderer().renderItem(item1, ModelTransformation.Mode.GROUND, lightAtBlock, overlay, matrices, vertexConsumers, 0);
|
||||
matrices.multiply(degrees90x);
|
||||
MinecraftClient.getInstance().getItemRenderer().renderItem(item1, ModelTransformationMode.GROUND, lightAtBlock, overlay, matrices, vertexConsumers, blockEntity.getWorld(), 0);
|
||||
|
||||
|
||||
matrices.pop();
|
||||
@@ -61,10 +64,10 @@ public class FurnaceBlockEntityRenderer<E extends AbstractFurnaceBlockEntity> im
|
||||
if (blockEntity.getCachedState().getBlock().equals(Blocks.SMOKER)) matrices.translate(0f, 0.06f, 0f);
|
||||
if (blockEntity.getCachedState().getBlock().equals(Blocks.BLAST_FURNACE)) matrices.translate(0f, 0.24f, 0f);
|
||||
matrices.scale(1f, 1f, 1f);
|
||||
matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(angle * 3 + 180));
|
||||
matrices.multiply(new Quaternionf(new AxisAngle4f(Math.toRadians(angle * 3 + 180), 0, 1, 0)));
|
||||
matrices.translate(0.0f, 0.0f, -0.4f);
|
||||
matrices.multiply(Vec3f.POSITIVE_X.getDegreesQuaternion(90));
|
||||
MinecraftClient.getInstance().getItemRenderer().renderItem(item2, ModelTransformation.Mode.GROUND, lightAtBlock, overlay, matrices, vertexConsumers,0);
|
||||
matrices.multiply(degrees90x);
|
||||
MinecraftClient.getInstance().getItemRenderer().renderItem(item2, ModelTransformationMode.GROUND, lightAtBlock, overlay, matrices, vertexConsumers, blockEntity.getWorld(), 0);
|
||||
|
||||
matrices.pop();
|
||||
}
|
||||
@@ -80,7 +83,7 @@ public class FurnaceBlockEntityRenderer<E extends AbstractFurnaceBlockEntity> im
|
||||
matrices.scale(1f, 1f, 1f);
|
||||
|
||||
|
||||
matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(angle * 3 + 180));
|
||||
matrices.multiply(new Quaternionf(new AxisAngle4f(Math.toRadians(angle * 3 + 180), 0, 1, 0)));
|
||||
planks.getPart().render(matrices, vertexConsumer, lightAtBlock, overlay);
|
||||
matrices.pop();
|
||||
}
|
||||
@@ -88,7 +91,7 @@ public class FurnaceBlockEntityRenderer<E extends AbstractFurnaceBlockEntity> im
|
||||
|
||||
}
|
||||
public static Identifier spriteToTexture(Sprite sprite) {
|
||||
String texture = sprite.getId().getPath();
|
||||
return new Identifier(sprite.getId().getNamespace(), "textures/" + texture + ".png");
|
||||
String texture = sprite.getContents().getId().getPath();
|
||||
return new Identifier(sprite.getAtlasId().getNamespace(), "textures/" + texture + ".png");
|
||||
}
|
||||
}
|
||||
@@ -13,17 +13,19 @@ import net.minecraft.client.render.VertexConsumerProvider;
|
||||
import net.minecraft.client.render.WorldRenderer;
|
||||
import net.minecraft.client.render.block.entity.BlockEntityRenderer;
|
||||
import net.minecraft.client.render.block.entity.BlockEntityRendererFactory;
|
||||
import net.minecraft.client.render.model.json.ModelTransformation;
|
||||
import net.minecraft.client.render.model.json.ModelTransformationMode;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.registry.Registries;
|
||||
import net.minecraft.state.property.Properties;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.Util;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.minecraft.util.math.Vec3f;
|
||||
import net.minecraft.util.math.random.Random;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.joml.AxisAngle4f;
|
||||
import org.joml.Math;
|
||||
import org.joml.Quaternionf;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -41,17 +43,17 @@ public class JukeboxBlockEntityRenderer implements BlockEntityRenderer<JukeboxBl
|
||||
int lightAbove = WorldRenderer.getLightmapCoordinates(Objects.requireNonNull(blockEntity.getWorld()), blockEntity.getPos().up());
|
||||
|
||||
// Tries to get the disc using the serverside method
|
||||
if (blockEntity.getRecord() != ItemStack.EMPTY) {
|
||||
record = blockEntity.getRecord().copy();
|
||||
if (blockEntity.getStack() != ItemStack.EMPTY) {
|
||||
record = blockEntity.getStack().copy();
|
||||
}
|
||||
// Else gets the record sound played at the position of the jukebox //
|
||||
else if (SoundTest.getSound(blockEntity.getPos()) != null) {
|
||||
// Converts the Sound Id to the item id of the appropriate disc (minecraft:music_disc.cat -> minecraft:music_disc_cat) //
|
||||
// Converts the Sound ID to the item ID of the appropriate disc (minecraft:music_disc.cat -> minecraft:music_disc_cat) //
|
||||
discItem = new Identifier(String.valueOf(SoundTest.getSound(blockEntity.getPos())).replace(".", "_"));
|
||||
|
||||
// Tries to get the disc item from the registry //
|
||||
if (Registry.ITEM.getOrEmpty(discItem).isPresent()) {
|
||||
record = new ItemStack(Registry.ITEM.get(discItem));
|
||||
if (Registries.ITEM.getOrEmpty(discItem).isPresent()) {
|
||||
record = new ItemStack(Registries.ITEM.get(discItem));
|
||||
}
|
||||
else {
|
||||
if (VOConfig.debug) LogManager.getLogger("VisualOverhaul").warn("Error getting music disc item for " + SoundTest.getSound(blockEntity.getPos()));
|
||||
@@ -71,8 +73,8 @@ public class JukeboxBlockEntityRenderer implements BlockEntityRenderer<JukeboxBl
|
||||
|
||||
matrices.translate(0.5f, 1.03f, 0.5f);
|
||||
matrices.scale(0.75f, 0.75f, 0.75f);
|
||||
matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(Util.getMeasuringTimeMs() / 9.0f));
|
||||
MinecraftClient.getInstance().getItemRenderer().renderItem(record, ModelTransformation.Mode.GROUND, lightAbove, overlay, matrices, vertexConsumers, 0);
|
||||
matrices.multiply(new Quaternionf(new AxisAngle4f(Math.toRadians(Util.getMeasuringTimeMs() / 9.0f), 0, 1, 0)));
|
||||
MinecraftClient.getInstance().getItemRenderer().renderItem(record, ModelTransformationMode.GROUND, lightAbove, overlay, matrices, vertexConsumers, blockEntity.getWorld(), 0);
|
||||
|
||||
matrices.pop();
|
||||
}
|
||||
|
||||
@@ -3,15 +3,21 @@ package eu.midnightdust.visualoverhaul.config;
|
||||
import eu.midnightdust.lib.config.MidnightConfig;
|
||||
|
||||
public class VOConfig extends MidnightConfig {
|
||||
@Client @Entry public static boolean brewingstand = true;
|
||||
@Client @Entry public static boolean jukebox = true;
|
||||
@Client @Entry public static boolean jukebox_fake_block = true;
|
||||
@Client @Entry public static boolean furnace = true;
|
||||
@Client @Entry public static boolean smoker_particles = true;
|
||||
@Client @Entry public static boolean blast_furnace_particles = true;
|
||||
@Client @Entry public static boolean coloredItems = true;
|
||||
@Client @Entry public static boolean coloredLilypad = true;
|
||||
@Client @Entry public static boolean potionEnchantmentGlint = true;
|
||||
@Client @Entry(name = "Debug") public static boolean debug = false;
|
||||
public static final String blocks = "blocks";
|
||||
public static final String colors = "colors";
|
||||
public static final String gui = "gui";
|
||||
@Client @Entry(category = blocks) public static boolean brewingstand = true;
|
||||
@Client @Entry(category = blocks) public static boolean jukebox = true;
|
||||
@Client @Entry(category = blocks) public static boolean jukebox_fake_block = true;
|
||||
@Client @Entry(category = blocks) public static boolean furnace = true;
|
||||
@Client @Entry(category = blocks) public static boolean smoker_particles = true;
|
||||
@Client @Entry(category = blocks) public static boolean blast_furnace_particles = true;
|
||||
@Client @Entry(category = colors) public static boolean coloredItems = true;
|
||||
@Client @Entry(category = colors) public static boolean coloredLilypad = true;
|
||||
@Client @Entry(category = gui) public static boolean buttonIcons = true;
|
||||
@Client @Entry(category = gui) public static IconPosition buttonIconPosition = IconPosition.LOCATION;
|
||||
@Client @Entry(category = gui) public static boolean zoomIconOnHover = true;
|
||||
@Client @Entry(category = gui, name = "Debug") public static boolean debug = false;
|
||||
@Client @Entry @Hidden public static boolean firstLaunch = true;
|
||||
public enum IconPosition {LOCATION, LEFT, RIGHT, BOTH}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package eu.midnightdust.visualoverhaul.mixin;
|
||||
|
||||
import net.minecraft.block.entity.JukeboxBlockEntity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.collection.DefaultedList;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(JukeboxBlockEntity.class)
|
||||
public interface JukeboxBlockEntityAccessor {
|
||||
@Accessor @Final
|
||||
DefaultedList<ItemStack> getInventory();
|
||||
}
|
||||
@@ -17,7 +17,7 @@ public abstract class MixinJukeboxBlockEntity extends BlockEntity {
|
||||
super(type, pos, state);
|
||||
}
|
||||
|
||||
@Inject(at = @At("RETURN"), method = "getRecord")
|
||||
@Inject(at = @At("RETURN"), method = "getStack")
|
||||
public void getRecord(CallbackInfoReturnable<ItemStack> cir) {
|
||||
JukeboxPacketUpdate.invUpdate = true;
|
||||
}
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
package eu.midnightdust.visualoverhaul.mixin;
|
||||
|
||||
import eu.midnightdust.visualoverhaul.config.VOConfig;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.PotionItem;
|
||||
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(PotionItem.class)
|
||||
public abstract class MixinPotionItem extends Item {
|
||||
public MixinPotionItem(Settings settings) {
|
||||
super(settings);
|
||||
}
|
||||
|
||||
@Inject(at = @At("HEAD"), method = "hasGlint", cancellable = true)
|
||||
public void vo$hasGlint(ItemStack stack, CallbackInfoReturnable<Boolean> cir) {
|
||||
if (!VOConfig.potionEnchantmentGlint) cir.setReturnValue(super.hasGlint(stack));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package eu.midnightdust.visualoverhaul.mixin;
|
||||
|
||||
import eu.midnightdust.visualoverhaul.IconicButtons;
|
||||
import net.minecraft.client.gui.widget.ClickableWidget;
|
||||
import net.minecraft.client.gui.widget.PressableWidget;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.text.Text;
|
||||
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.CallbackInfo;
|
||||
|
||||
@Mixin(PressableWidget.class)
|
||||
public abstract class MixinPressableWidget extends ClickableWidget {
|
||||
@Unique IconicButtons iconicButtons;
|
||||
public MixinPressableWidget(int x, int y, int width, int height, Text message) {
|
||||
super(x, y, width, height, message);
|
||||
}
|
||||
@Inject(at = @At("TAIL"), method = "<init>")
|
||||
private void iconic$onInitButton(int i, int j, int k, int l, Text text, CallbackInfo ci) {
|
||||
iconicButtons = new IconicButtons(this);
|
||||
}
|
||||
|
||||
@Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/widget/PressableWidget;drawMessage(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/font/TextRenderer;I)V", shift = At.Shift.BEFORE), method = "renderButton")
|
||||
private void iconic$onRenderButton(MatrixStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) {
|
||||
iconicButtons.renderIcons(matrices, this, this.alpha);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package eu.midnightdust.visualoverhaul.mixin;
|
||||
|
||||
import eu.midnightdust.visualoverhaul.IconicButtons;
|
||||
import net.minecraft.client.gui.widget.ClickableWidget;
|
||||
import net.minecraft.client.gui.widget.SliderWidget;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.text.Text;
|
||||
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.CallbackInfo;
|
||||
|
||||
@Mixin(SliderWidget.class)
|
||||
public abstract class MixinSliderWidget extends ClickableWidget {
|
||||
@Unique IconicButtons iconicButtons;
|
||||
public MixinSliderWidget(int x, int y, int width, int height, Text message) {
|
||||
super(x, y, width, height, message);
|
||||
}
|
||||
@Inject(at = @At("TAIL"), method = "<init>")
|
||||
private void iconic$onInitButton(int x, int y, int width, int height, Text text, double value, CallbackInfo ci) {
|
||||
iconicButtons = new IconicButtons(this);
|
||||
}
|
||||
|
||||
@Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/widget/SliderWidget;drawScrollableText(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/font/TextRenderer;II)V", shift = At.Shift.BEFORE), method = "renderButton")
|
||||
private void iconic$onRenderButton(MatrixStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) {
|
||||
iconicButtons.renderIcons(matrices, this, this.alpha);
|
||||
}
|
||||
}
|
||||
@@ -21,7 +21,7 @@ public abstract class MixinSoundSystem {
|
||||
@Inject(at = @At("TAIL"),method = "play(Lnet/minecraft/client/sound/SoundInstance;)V")
|
||||
public void vo$onPlayRecordSound(SoundInstance soundInstance, CallbackInfo ci) {
|
||||
if (soundInstance.getCategory().equals(SoundCategory.RECORDS) && this.started) {
|
||||
jukeboxPos = new BlockPos(Math.floor(soundInstance.getX()), Math.floor(soundInstance.getY()), Math.floor(soundInstance.getZ()));
|
||||
jukeboxPos = BlockPos.ofFloored(Math.floor(soundInstance.getX()), Math.floor(soundInstance.getY()), Math.floor(soundInstance.getZ()));
|
||||
SoundTest.soundPos.put(jukeboxPos, soundInstance.getId());
|
||||
}
|
||||
}
|
||||
@@ -30,7 +30,7 @@ public abstract class MixinSoundSystem {
|
||||
public void vo$onStopRecordSound(SoundInstance soundInstance, CallbackInfo ci) {
|
||||
if (soundInstance != null) {
|
||||
if (soundInstance.getCategory().equals(SoundCategory.RECORDS)) {
|
||||
jukeboxPos = new BlockPos(Math.floor(soundInstance.getX()), Math.floor(soundInstance.getY()), Math.floor(soundInstance.getZ()));
|
||||
jukeboxPos = BlockPos.ofFloored(Math.floor(soundInstance.getX()), Math.floor(soundInstance.getY()), Math.floor(soundInstance.getZ()));
|
||||
if (SoundTest.soundPos.containsKey(jukeboxPos)) {
|
||||
SoundTest.soundPos.remove(jukeboxPos, soundInstance.getId());
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package eu.midnightdust.visualoverhaul.mixin;
|
||||
|
||||
import net.minecraft.client.texture.TextureManager;
|
||||
import net.minecraft.resource.ResourceManager;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(TextureManager.class)
|
||||
public interface TextureManagerAccessor {
|
||||
@Accessor
|
||||
ResourceManager getResourceContainer();
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
package eu.midnightdust.visualoverhaul.util;
|
||||
|
||||
import eu.midnightdust.visualoverhaul.config.VOConfig;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
import dev.architectury.injectables.annotations.ExpectPlatform;
|
||||
import net.minecraft.client.texture.NativeImage;
|
||||
import net.minecraft.client.texture.NativeImageBackedTexture;
|
||||
import org.apache.commons.lang3.Validate;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
public class ModIconUtil {
|
||||
private static final Map<Path, NativeImageBackedTexture> modIconCache = new HashMap<>();
|
||||
private final String modid;
|
||||
|
||||
public ModIconUtil(String modid) {
|
||||
this.modid = modid;
|
||||
}
|
||||
@ExpectPlatform
|
||||
public static Path getPath(String modid) {
|
||||
throw new AssertionError();
|
||||
}
|
||||
|
||||
@Unique
|
||||
public NativeImageBackedTexture createModIcon() {
|
||||
try {
|
||||
Path path = getPath(modid);
|
||||
if (VOConfig.debug) System.out.println(path);
|
||||
NativeImageBackedTexture cachedIcon = getCachedModIcon(path);
|
||||
if (cachedIcon != null) {
|
||||
return cachedIcon;
|
||||
}
|
||||
cachedIcon = getCachedModIcon(path);
|
||||
if (cachedIcon != null) {
|
||||
return cachedIcon;
|
||||
}
|
||||
try (InputStream inputStream = Files.newInputStream(path)) {
|
||||
NativeImage image = NativeImage.read(Objects.requireNonNull(inputStream));
|
||||
Validate.validState(image.getHeight() == image.getWidth(), "Must be square icon");
|
||||
NativeImageBackedTexture tex = new NativeImageBackedTexture(image);
|
||||
cacheModIcon(path, tex);
|
||||
return tex;
|
||||
}
|
||||
|
||||
} catch (Throwable t) {
|
||||
if (VOConfig.debug) System.out.println(t.getMessage());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
static NativeImageBackedTexture getCachedModIcon(Path path) {
|
||||
return modIconCache.get(path);
|
||||
}
|
||||
|
||||
static void cacheModIcon(Path path, NativeImageBackedTexture tex) {
|
||||
modIconCache.put(path, tex);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
properties=iconic:textures/gui/icons/gui.done.properties
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/written_book.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/paper.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/knowledge_book.png
|
||||
@@ -0,0 +1 @@
|
||||
properties=iconic:textures/gui/icons/modmenu.title.properties
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/experience_bottle.png
|
||||
@@ -0,0 +1 @@
|
||||
properties=iconic:textures/gui/icons/gui.cancel.properties
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/coal.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/emerald.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/block/redstone_lamp.png
|
||||
@@ -0,0 +1 @@
|
||||
properties=iconic:textures/gui/icons/gui.done.properties
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/paper.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/block/redstone_lamp_on.png
|
||||
@@ -0,0 +1 @@
|
||||
properties=iconic:textures/gui/icons/menu.returntomenu.properties
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/diamond_sword.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/netherite_hoe.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/command_block_minecart.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/mangrove_sign.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/barrier.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/pufferfish.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/emerald.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/blaze_powder.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/echo_shard.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/recovery_compass_18.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/iron_pickaxe.png
|
||||
@@ -0,0 +1 @@
|
||||
properties=iconic:textures/gui/icons/gui.no.properties
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 123 B |
@@ -0,0 +1 @@
|
||||
properties=iconic:textures/gui/icons/gui.yes.properties
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/totem_of_undying.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/axolotl_bucket.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/birch_hanging_sign.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/jungle_boat.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/name_tag.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/ender_eye.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/writable_book.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/comparator.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/painting.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/armor_stand.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/music_disc_otherside.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/nether_star.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/end_crystal.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/mojang_banner_pattern.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/slime_ball.png
|
||||
@@ -0,0 +1 @@
|
||||
properties=iconic:textures/gui/icons/selectworld.create.properties
|
||||
@@ -0,0 +1 @@
|
||||
properties=iconic:textures/gui/icons/selectworld.delete.properties
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/firework_rocket.png
|
||||
@@ -0,0 +1 @@
|
||||
properties=iconic:textures/gui/icons/selectworld.edit.properties
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/blaze_powder.png
|
||||
@@ -0,0 +1 @@
|
||||
properties=iconic:textures/gui/icons/selectworld.select.properties
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/diamond.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/tnt_minecart.png
|
||||
@@ -0,0 +1 @@
|
||||
properties=iconic:textures/gui/icons/menu.options.properties
|
||||
@@ -0,0 +1 @@
|
||||
properties=iconic:textures/gui/icons/gui.done.properties
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/furnace_minecart.png
|
||||
@@ -0,0 +1 @@
|
||||
texture=minecraft:textures/item/trident.png
|
||||
@@ -0,0 +1 @@
|
||||
properties=iconic:textures/gui/icons/gui.no.properties
|
||||
@@ -0,0 +1 @@
|
||||
properties=iconic:textures/gui/icons/gui.yes.properties
|
||||
23
common/src/main/resources/assets/visualoverhaul/lang/de_de.json
Executable file
23
common/src/main/resources/assets/visualoverhaul/lang/de_de.json
Executable file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"visualoverhaul.midnightconfig.title":"Visual Overhaul Konfiguration",
|
||||
"visualoverhaul.midnightconfig.brewingstand":"Braustand-Verbesserungen",
|
||||
"visualoverhaul.midnightconfig.jukebox":"Jukebox-Verbesserungen",
|
||||
"visualoverhaul.midnightconfig.jukebox_fake_block":"Fake-Block auf der Jukebox",
|
||||
"visualoverhaul.midnightconfig.furnace":"Ofen-Verbesserungen",
|
||||
"visualoverhaul.midnightconfig.smoker_particles":"Räucherofen-Partikel",
|
||||
"visualoverhaul.midnightconfig.blast_furnace_particles":"Schmelzofen-Partikel",
|
||||
"visualoverhaul.midnightconfig.coloredItems":"Biom-basierte Item-Farben",
|
||||
"visualoverhaul.midnightconfig.coloredItems.tooltip":"§cNeustart benötigt!",
|
||||
"visualoverhaul.midnightconfig.coloredLilypad":"Biom-basierte Seerosenfarbe",
|
||||
"visualoverhaul.midnightconfig.coloredLilypad.tooltip":"§cNeustart benötigt!",
|
||||
"visualoverhaul.midnightconfig.buttonIcons": "Symbole auf Knöpfen",
|
||||
"visualoverhaul.midnightconfig.buttonIconPosition": "Knopfsymbolposition",
|
||||
"visualoverhaul.midnightconfig.enum.IconPosition.LOCATION": "Ortsbasiert",
|
||||
"visualoverhaul.midnightconfig.enum.IconPosition.LEFT": "Links",
|
||||
"visualoverhaul.midnightconfig.enum.IconPosition.RIGHT": "Rechts",
|
||||
"visualoverhaul.midnightconfig.enum.IconPosition.BOTH": "Links & Rechts",
|
||||
"visualoverhaul.midnightconfig.zoomIconOnHover": "Vergrößere Symbol beim Überfahren",
|
||||
"visualoverhaul.midnightconfig.category.gui": "GUI",
|
||||
"visualoverhaul.midnightconfig.category.blocks": "Blöcke",
|
||||
"visualoverhaul.midnightconfig.category.colors": "Farben"
|
||||
}
|
||||
@@ -10,5 +10,14 @@
|
||||
"visualoverhaul.midnightconfig.coloredItems.tooltip":"§cNeeds restart!",
|
||||
"visualoverhaul.midnightconfig.coloredLilypad":"Biome-based Lily Pad color",
|
||||
"visualoverhaul.midnightconfig.coloredLilypad.tooltip":"§cNeeds restart!",
|
||||
"visualoverhaul.midnightconfig.potionEnchantmentGlint":"Potion enchantment glint"
|
||||
"visualoverhaul.midnightconfig.buttonIcons": "Button Icons",
|
||||
"visualoverhaul.midnightconfig.buttonIconPosition": "Button Icon Position",
|
||||
"visualoverhaul.midnightconfig.enum.IconPosition.LOCATION": "Location-dependant",
|
||||
"visualoverhaul.midnightconfig.enum.IconPosition.LEFT": "Left",
|
||||
"visualoverhaul.midnightconfig.enum.IconPosition.RIGHT": "Right",
|
||||
"visualoverhaul.midnightconfig.enum.IconPosition.BOTH": "Left & Right",
|
||||
"visualoverhaul.midnightconfig.zoomIconOnHover": "Zoom icon on hover",
|
||||
"visualoverhaul.midnightconfig.category.gui": "GUI",
|
||||
"visualoverhaul.midnightconfig.category.blocks": "Blocks",
|
||||
"visualoverhaul.midnightconfig.category.colors": "Colors"
|
||||
}
|
||||
@@ -9,6 +9,5 @@
|
||||
"visualoverhaul.midnightconfig.coloredItems":"Couleurs des objets basées sur le biome",
|
||||
"visualoverhaul.midnightconfig.coloredItems.tooltip":"§cBesoin de redémarrer !",
|
||||
"visualoverhaul.midnightconfig.coloredLilypad":"Couleur de nénuphar basée sur le biome",
|
||||
"visualoverhaul.midnightconfig.coloredLilypad.tooltip":"§cBesoin de redémarrer !",
|
||||
"visualoverhaul.midnightconfig.potionEnchantmentGlint":"Brillance d'enchantement de potion"
|
||||
"visualoverhaul.midnightconfig.coloredLilypad.tooltip":"§cBesoin de redémarrer !"
|
||||
}
|
||||
|
||||
@@ -10,7 +10,10 @@
|
||||
"MixinSoundSystem",
|
||||
"MixinSmokerBlock",
|
||||
"MixinBlastFurnaceBlock",
|
||||
"MixinPotionItem"
|
||||
"MixinPressableWidget",
|
||||
"MixinSliderWidget",
|
||||
"TextureManagerAccessor",
|
||||
"JukeboxBlockEntityAccessor"
|
||||
],
|
||||
"injectors": {
|
||||
"defaultRequire": 1
|
||||
|
||||
@@ -19,8 +19,8 @@ import net.minecraft.client.render.model.json.ModelTransformation;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3f;
|
||||
import net.minecraft.util.math.random.Random;
|
||||
import org.joml.Vector3f;
|
||||
|
||||
@Environment(EnvType.CLIENT)
|
||||
public class RadioJukeboxBlockEntityRenderer implements BlockEntityRenderer<RadioJukeboxBlockEntity> {
|
||||
@@ -36,42 +36,42 @@ public class RadioJukeboxBlockEntityRenderer implements BlockEntityRenderer<Radi
|
||||
@Override
|
||||
public void render(RadioJukeboxBlockEntity jukebox, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) {
|
||||
if (VOConfig.jukebox && client.world != null) {
|
||||
matrices.push();
|
||||
Vec3f vecPos = matrices.peek().getNormalMatrix().decomposeLinearTransformation().getMiddle();
|
||||
BlockPos pos = new BlockPos(vecPos.getX(), vecPos.getY(), vecPos.getZ());
|
||||
int lightAbove = WorldRenderer.getLightmapCoordinates(client.world, pos.up());
|
||||
|
||||
// Tries to get the disc using the serverside method
|
||||
if (jukebox.getStack(jukebox.getPlayingSong()) != ItemStack.EMPTY) {
|
||||
record = jukebox.getStack(jukebox.getPlayingSong()).copy();
|
||||
record.setCount(2);
|
||||
}
|
||||
// If the sound is stopped or no sound is playing, the stack is set to an empty stack //
|
||||
else {
|
||||
record = ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
matrices.translate(0.5f, 1.03f, 0.5f);
|
||||
matrices.scale(0.75f, 0.75f, 0.75f);
|
||||
|
||||
if (jukebox.isPlaying()) {
|
||||
rotation = (client.world.getTime() + tickDelta) * 4;
|
||||
}
|
||||
matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(rotation));
|
||||
client.getItemRenderer().renderItem(record, ModelTransformation.Mode.GROUND, lightAbove, overlay, matrices, vertexConsumers, 0);
|
||||
|
||||
matrices.pop();
|
||||
if (VOConfig.jukebox_fake_block && client.world.getBlockState(pos.up()).getBlock() == Blocks.AIR) {
|
||||
blockState = client.world.getBlockState(pos);
|
||||
matrices.push();
|
||||
matrices.translate(0f, 1f, 0f);
|
||||
if (record == ItemStack.EMPTY) {
|
||||
client.getBlockRenderManager().renderBlock(PhonosCompatInit.RadioJukeboxTop.getDefaultState().with(RadioJukeboxTop.PLAYING, false).with(RadioJukeboxTop.CHANNEL, blockState.get(RadioJukeboxBlock.CHANNEL)), pos.up(), client.world, matrices, vertexConsumers.getBuffer(RenderLayer.getCutout()), false, Random.create());
|
||||
} else {
|
||||
client.getBlockRenderManager().renderBlock(PhonosCompatInit.RadioJukeboxTop.getDefaultState().with(RadioJukeboxTop.PLAYING, true).with(RadioJukeboxTop.CHANNEL, blockState.get(RadioJukeboxBlock.CHANNEL)), pos.up(), client.world, matrices, vertexConsumers.getBuffer(RenderLayer.getCutout()), false, Random.create());
|
||||
}
|
||||
matrices.pop();
|
||||
}
|
||||
// matrices.push();
|
||||
// Vector3f vecPos = matrices.peek().getNormalMatrix().decomposeLinearTransformation().getMiddle();
|
||||
// BlockPos pos = new BlockPos(vecPos.getX(), vecPos.getY(), vecPos.getZ());
|
||||
// int lightAbove = WorldRenderer.getLightmapCoordinates(client.world, pos.up());
|
||||
//
|
||||
// // Tries to get the disc using the serverside method
|
||||
// if (jukebox.getStack(jukebox.getPlayingSong()) != ItemStack.EMPTY) {
|
||||
// record = jukebox.getStack(jukebox.getPlayingSong()).copy();
|
||||
// record.setCount(2);
|
||||
// }
|
||||
// // If the sound is stopped or no sound is playing, the stack is set to an empty stack //
|
||||
// else {
|
||||
// record = ItemStack.EMPTY;
|
||||
// }
|
||||
//
|
||||
// matrices.translate(0.5f, 1.03f, 0.5f);
|
||||
// matrices.scale(0.75f, 0.75f, 0.75f);
|
||||
//
|
||||
// if (jukebox.isPlaying()) {
|
||||
// rotation = (client.world.getTime() + tickDelta) * 4;
|
||||
// }
|
||||
// matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(rotation));
|
||||
// client.getItemRenderer().renderItem(record, ModelTransformation.Mode.GROUND, lightAbove, overlay, matrices, vertexConsumers, 0);
|
||||
//
|
||||
// matrices.pop();
|
||||
// if (VOConfig.jukebox_fake_block && client.world.getBlockState(pos.up()).getBlock() == Blocks.AIR) {
|
||||
// blockState = client.world.getBlockState(pos);
|
||||
// matrices.push();
|
||||
// matrices.translate(0f, 1f, 0f);
|
||||
// if (record == ItemStack.EMPTY) {
|
||||
// client.getBlockRenderManager().renderBlock(PhonosCompatInit.RadioJukeboxTop.getDefaultState().with(RadioJukeboxTop.PLAYING, false).with(RadioJukeboxTop.CHANNEL, blockState.get(RadioJukeboxBlock.CHANNEL)), pos.up(), client.world, matrices, vertexConsumers.getBuffer(RenderLayer.getCutout()), false, Random.create());
|
||||
// } else {
|
||||
// client.getBlockRenderManager().renderBlock(PhonosCompatInit.RadioJukeboxTop.getDefaultState().with(RadioJukeboxTop.PLAYING, true).with(RadioJukeboxTop.CHANNEL, blockState.get(RadioJukeboxBlock.CHANNEL)), pos.up(), client.world, matrices, vertexConsumers.getBuffer(RenderLayer.getCutout()), false, Random.create());
|
||||
// }
|
||||
// matrices.pop();
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,20 +4,21 @@ import eu.midnightdust.visualoverhaul.compat.phonos.block.RadioJukeboxTop;
|
||||
import eu.midnightdust.visualoverhaul.compat.phonos.block.renderer.RadioJukeboxBlockEntityRenderer;
|
||||
import io.github.foundationgames.phonos.block.PhonosBlocks;
|
||||
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
|
||||
import net.fabricmc.fabric.api.client.rendering.v1.BlockEntityRendererRegistry;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.render.RenderLayer;
|
||||
import net.minecraft.client.render.block.entity.BlockEntityRendererFactories;
|
||||
import net.minecraft.registry.Registries;
|
||||
import net.minecraft.registry.Registry;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
|
||||
public class PhonosCompatInit {
|
||||
public static Block RadioJukeboxTop = new RadioJukeboxTop();
|
||||
|
||||
public static void init() {
|
||||
Registry.register(Registry.BLOCK, new Identifier("visualoverhaul","radio_jukebox_top"), RadioJukeboxTop);
|
||||
Registry.register(Registries.BLOCK, new Identifier("visualoverhaul","radio_jukebox_top"), RadioJukeboxTop);
|
||||
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(PhonosBlocks.RADIO_JUKEBOX, RenderLayer.getCutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(RadioJukeboxTop, RenderLayer.getCutout());
|
||||
BlockEntityRendererRegistry.register(PhonosBlocks.RADIO_JUKEBOX_ENTITY, RadioJukeboxBlockEntityRenderer::new);
|
||||
BlockEntityRendererFactories.register(PhonosBlocks.RADIO_JUKEBOX_ENTITY, RadioJukeboxBlockEntityRenderer::new);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ plugins {
|
||||
}
|
||||
|
||||
architectury {
|
||||
injectInjectables = false
|
||||
platformSetupLoomIde()
|
||||
fabric()
|
||||
}
|
||||
@@ -33,7 +32,7 @@ dependencies {
|
||||
|
||||
common(project(path: ":common", configuration: "namedElements")) { transitive false }
|
||||
shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false }
|
||||
common(project(path: ":fabric-like", configuration: "namedElements")) { transitive false }
|
||||
//common(project(path: ":fabric-like", configuration: "namedElements")) { transitive false }
|
||||
//shadowCommon(project(path: ":fabric-like", configuration: "transformProductionFabric")) { transitive false }
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package eu.midnightdust.visualoverhaul.fabric;
|
||||
|
||||
import eu.midnightdust.visualoverhaul.IconicButtons;
|
||||
import eu.midnightdust.visualoverhaul.VisualOverhaulClient;
|
||||
import eu.midnightdust.visualoverhaul.block.JukeboxTop;
|
||||
import eu.midnightdust.visualoverhaul.block.model.FurnaceWoodenPlanksModel;
|
||||
@@ -7,33 +8,44 @@ import eu.midnightdust.visualoverhaul.block.renderer.BrewingStandBlockEntityRend
|
||||
import eu.midnightdust.visualoverhaul.block.renderer.FurnaceBlockEntityRenderer;
|
||||
import eu.midnightdust.visualoverhaul.block.renderer.JukeboxBlockEntityRenderer;
|
||||
import eu.midnightdust.visualoverhaul.config.VOConfig;
|
||||
import eu.midnightdust.visualoverhaul.mixin.JukeboxBlockEntityAccessor;
|
||||
import net.fabricmc.api.ClientModInitializer;
|
||||
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
|
||||
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
|
||||
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
|
||||
import net.fabricmc.fabric.api.client.rendering.v1.BlockEntityRendererRegistry;
|
||||
import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry;
|
||||
import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry;
|
||||
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
|
||||
import net.fabricmc.fabric.api.resource.ResourcePackActivationType;
|
||||
import net.fabricmc.fabric.api.resource.SimpleSynchronousResourceReloadListener;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.block.entity.AbstractFurnaceBlockEntity;
|
||||
import net.minecraft.block.entity.BlockEntityType;
|
||||
import net.minecraft.block.entity.BrewingStandBlockEntity;
|
||||
import net.minecraft.block.entity.JukeboxBlockEntity;
|
||||
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.block.entity.BlockEntityRendererFactories;
|
||||
import net.minecraft.client.texture.*;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.item.MusicDiscItem;
|
||||
import net.minecraft.potion.PotionUtil;
|
||||
import net.minecraft.potion.Potions;
|
||||
import net.minecraft.registry.Registries;
|
||||
import net.minecraft.registry.Registry;
|
||||
import net.minecraft.resource.ResourceManager;
|
||||
import net.minecraft.resource.ResourceType;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.collection.DefaultedList;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.Properties;
|
||||
|
||||
import static eu.midnightdust.visualoverhaul.VisualOverhaul.*;
|
||||
import static eu.midnightdust.visualoverhaul.VisualOverhaulClient.JukeBoxTop;
|
||||
@@ -44,7 +56,7 @@ public class VisualOverhaulClientFabric implements ClientModInitializer {
|
||||
VisualOverhaulClient.onInitializeClient();
|
||||
JukeBoxTop = new JukeboxTop();
|
||||
// Block only registered on client, because it's just used for the renderer //
|
||||
Registry.register(Registry.BLOCK, new Identifier(MOD_ID,"jukebox_top"), JukeBoxTop);
|
||||
Registry.register(Registries.BLOCK, new Identifier(MOD_ID,"jukebox_top"), JukeBoxTop);
|
||||
|
||||
EntityModelLayerRegistry.registerModelLayer(FurnaceWoodenPlanksModel.WOODEN_PLANKS_MODEL_LAYER, FurnaceWoodenPlanksModel::getTexturedModelData);
|
||||
|
||||
@@ -54,18 +66,18 @@ public class VisualOverhaulClientFabric implements ClientModInitializer {
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(Blocks.SMOKER, RenderLayer.getCutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(Blocks.BLAST_FURNACE, RenderLayer.getCutout());
|
||||
|
||||
BlockEntityRendererRegistry.register(BlockEntityType.BREWING_STAND, BrewingStandBlockEntityRenderer::new);
|
||||
BlockEntityRendererRegistry.register(BlockEntityType.JUKEBOX, JukeboxBlockEntityRenderer::new);
|
||||
BlockEntityRendererRegistry.register(BlockEntityType.FURNACE, FurnaceBlockEntityRenderer::new);
|
||||
BlockEntityRendererRegistry.register(BlockEntityType.SMOKER, FurnaceBlockEntityRenderer::new);
|
||||
BlockEntityRendererRegistry.register(BlockEntityType.BLAST_FURNACE, FurnaceBlockEntityRenderer::new);
|
||||
BlockEntityRendererFactories.register(BlockEntityType.BREWING_STAND, BrewingStandBlockEntityRenderer::new);
|
||||
BlockEntityRendererFactories.register(BlockEntityType.JUKEBOX, JukeboxBlockEntityRenderer::new);
|
||||
BlockEntityRendererFactories.register(BlockEntityType.FURNACE, FurnaceBlockEntityRenderer::new);
|
||||
BlockEntityRendererFactories.register(BlockEntityType.SMOKER, FurnaceBlockEntityRenderer::new);
|
||||
BlockEntityRendererFactories.register(BlockEntityType.BLAST_FURNACE, FurnaceBlockEntityRenderer::new);
|
||||
|
||||
// Phonos Compat //
|
||||
if (FabricLoader.getInstance().isModLoaded("phonos")) {
|
||||
//PhonosCompatInit.init();
|
||||
}
|
||||
//if (FabricLoader.getInstance().isModLoaded("phonos")) {
|
||||
// PhonosCompatInit.init();
|
||||
//}
|
||||
|
||||
Registry.ITEM.forEach((item) -> {
|
||||
Registries.ITEM.forEach((item) -> {
|
||||
if(item instanceof MusicDiscItem || item.getName().getString().toLowerCase().contains("music_disc") || item.getName().getString().toLowerCase().contains("record") || item.getName().getString().toLowerCase().contains("dynamic_disc")) {
|
||||
ModelPredicateProviderRegistry.register(item, new Identifier("round"), (stack, world, entity, seed) -> stack.getCount() == 2 ? 1.0F : 0.0F);
|
||||
}
|
||||
@@ -94,7 +106,7 @@ public class VisualOverhaulClientFabric implements ClientModInitializer {
|
||||
ItemStack record = attachedData.readItemStack();
|
||||
client.execute(() -> {
|
||||
if (client.world != null && client.world.getBlockEntity(pos) != null && client.world.getBlockEntity(pos) instanceof JukeboxBlockEntity blockEntity) {
|
||||
blockEntity.setRecord(record);
|
||||
((JukeboxBlockEntityAccessor)blockEntity).getInventory().set(0, record);
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -180,5 +192,17 @@ public class VisualOverhaulClientFabric implements ClientModInitializer {
|
||||
if (VOConfig.coloredLilypad) {
|
||||
ColorProviderRegistry.BLOCK.register((state, world, pos, tintIndex) -> world != null ? world.getColor(pos, BiomeColors.FOLIAGE_COLOR) : 0, Blocks.LILY_PAD);
|
||||
}
|
||||
|
||||
ResourceManagerHelper.get(ResourceType.CLIENT_RESOURCES).registerReloadListener(new SimpleSynchronousResourceReloadListener() {
|
||||
@Override
|
||||
public Identifier getFabricId() {
|
||||
return new Identifier("iconic", "button_icons");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reload(ResourceManager manager) {
|
||||
IconicButtons.reload(manager);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ public abstract class MixinJukeboxBlock extends BlockWithEntity {
|
||||
Stream<ServerPlayerEntity> watchingPlayers = PlayerLookup.tracking(blockEntity).stream();
|
||||
PacketByteBuf passedData = new PacketByteBuf(Unpooled.buffer());
|
||||
passedData.writeBlockPos(pos);
|
||||
passedData.writeItemStack(blockEntity.getRecord());
|
||||
passedData.writeItemStack(blockEntity.getStack());
|
||||
|
||||
watchingPlayers.forEach(player -> ServerPlayNetworking.send(player, VisualOverhaul.UPDATE_RECORD, passedData));
|
||||
JukeboxPacketUpdate.invUpdate = false;
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package eu.midnightdust.visualoverhaul.util.fabric;
|
||||
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
import net.fabricmc.loader.api.ModContainer;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class ModIconUtilImpl {
|
||||
public static Path getPath(String modid) {
|
||||
ModContainer mod = FabricLoader.getInstance().getModContainer(modid).orElseThrow(() -> new RuntimeException("Cannot get ModContainer for Fabric mod with id "));
|
||||
return mod.findPath(mod.getMetadata().getIconPath(16).orElseThrow()).orElseThrow();
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,6 @@ plugins {
|
||||
}
|
||||
|
||||
architectury {
|
||||
injectInjectables = false
|
||||
platformSetupLoomIde()
|
||||
forge()
|
||||
}
|
||||
@@ -32,7 +31,7 @@ dependencies {
|
||||
// Remove the next line if you don't want to depend on the API
|
||||
modApi "dev.architectury:architectury-forge:${rootProject.architectury_version}"
|
||||
modImplementation "maven.modrinth:midnightlib:${rootProject.midnightlib_version}-forge"
|
||||
include "maven.modrinth:midnightlib:${rootProject.midnightlib_version}-forge"
|
||||
//include "maven.modrinth:midnightlib:${rootProject.midnightlib_version}-forge"
|
||||
|
||||
common(project(path: ":common", configuration: "namedElements")) { transitive false }
|
||||
shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive = false }
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package eu.midnightdust.visualoverhaul.forge;
|
||||
|
||||
import eu.midnightdust.visualoverhaul.IconicButtons;
|
||||
import eu.midnightdust.visualoverhaul.block.model.FurnaceWoodenPlanksModel;
|
||||
import eu.midnightdust.visualoverhaul.block.renderer.BrewingStandBlockEntityRenderer;
|
||||
import eu.midnightdust.visualoverhaul.block.renderer.FurnaceBlockEntityRenderer;
|
||||
@@ -9,11 +10,11 @@ import net.minecraft.block.entity.BlockEntityType;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.color.world.BiomeColors;
|
||||
import net.minecraft.resource.*;
|
||||
import net.minecraft.resource.metadata.PackResourceMetadata;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.client.event.EntityRenderersEvent;
|
||||
import net.minecraftforge.client.event.RegisterClientReloadListenersEvent;
|
||||
import net.minecraftforge.event.AddPackFindersEvent;
|
||||
import net.minecraftforge.event.TickEvent;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
@@ -22,8 +23,6 @@ import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.forgespi.locating.IModFile;
|
||||
import net.minecraftforge.resource.PathPackResources;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import static eu.midnightdust.visualoverhaul.VisualOverhaul.MOD_ID;
|
||||
|
||||
@Mod.EventBusSubscriber(modid = MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
|
||||
@@ -57,6 +56,16 @@ public class VisualOverhaulClientEvents {
|
||||
event.registerBlockEntityRenderer(BlockEntityType.BLAST_FURNACE, FurnaceBlockEntityRenderer::new);
|
||||
}
|
||||
@SubscribeEvent
|
||||
public static void addReloadListener(RegisterClientReloadListenersEvent event) {
|
||||
event.registerReloadListener(new IconReloadListener());
|
||||
}
|
||||
public static class IconReloadListener implements SynchronousResourceReloader {
|
||||
@Override
|
||||
public void reload(ResourceManager manager) {
|
||||
IconicButtons.reload(manager);
|
||||
}
|
||||
}
|
||||
@SubscribeEvent
|
||||
public static void addPackFinders(AddPackFindersEvent event) {
|
||||
if (event.getPackType() == ResourceType.CLIENT_RESOURCES) {
|
||||
registerResourcePack(event, new Identifier(MOD_ID,"nobrewingbottles"), false, true);
|
||||
@@ -66,13 +75,15 @@ public class VisualOverhaulClientEvents {
|
||||
}
|
||||
}
|
||||
private static void registerResourcePack(AddPackFindersEvent event, Identifier id, boolean alwaysEnabled, boolean defaultEnabled) {
|
||||
event.addRepositorySource(((profileAdder, factory) -> {
|
||||
event.addRepositorySource(((profileAdder) -> {
|
||||
IModFile file = ModList.get().getModFileById(id.getNamespace()).getFile();
|
||||
try (PathPackResources pack = new PathPackResources(id.toString(), file.findResource("resourcepacks/" +id.getPath()))) {
|
||||
ResourcePackProfile packProfile = new ResourcePackProfile(id.toString(), alwaysEnabled, () -> pack, Text.of(id.getNamespace()+"/"+id.getPath()), pack.parseMetadata(PackResourceMetadata.READER).getDescription().copy().append(" §7(built-in)"), ResourcePackCompatibility.COMPATIBLE, ResourcePackProfile.InsertionPosition.TOP, false, ResourcePackSource.PACK_SOURCE_BUILTIN, false);
|
||||
profileAdder.accept(packProfile);
|
||||
if (defaultEnabled && !alwaysEnabled) VisualOverhaulClientForge.defaultEnabledPacks.add(packProfile);
|
||||
} catch (IOException | NullPointerException e) {e.printStackTrace();}
|
||||
try (PathPackResources pack = new PathPackResources(id.toString(), true, file.findResource("resourcepacks/" +id.getPath()))) {
|
||||
ResourcePackProfile packProfile = ResourcePackProfile.create(id.toString(), Text.of(id.getNamespace()+"/"+id.getPath()), alwaysEnabled, a -> pack, ResourceType.CLIENT_RESOURCES, ResourcePackProfile.InsertionPosition.TOP, ResourcePackSource.BUILTIN);
|
||||
if (packProfile != null) {
|
||||
profileAdder.accept(packProfile);
|
||||
if (defaultEnabled && !alwaysEnabled) VisualOverhaulClientForge.defaultEnabledPacks.add(packProfile);
|
||||
}
|
||||
} catch (NullPointerException e) {e.printStackTrace();}
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import dev.architectury.networking.NetworkManager;
|
||||
import eu.midnightdust.lib.config.MidnightConfig;
|
||||
import eu.midnightdust.visualoverhaul.VisualOverhaulClient;
|
||||
import eu.midnightdust.visualoverhaul.block.JukeboxTop;
|
||||
import eu.midnightdust.visualoverhaul.mixin.JukeboxBlockEntityAccessor;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.block.entity.AbstractFurnaceBlockEntity;
|
||||
@@ -84,7 +85,7 @@ public class VisualOverhaulClientForge {
|
||||
ItemStack record = attachedData.readItemStack();
|
||||
client.execute(() -> {
|
||||
if (client.world != null && client.world.getBlockEntity(pos) != null && client.world.getBlockEntity(pos) instanceof JukeboxBlockEntity blockEntity) {
|
||||
blockEntity.setRecord(record);
|
||||
((JukeboxBlockEntityAccessor)blockEntity).getInventory().set(0, record);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -46,7 +46,7 @@ public abstract class MixinJukeboxBlock extends BlockWithEntity {
|
||||
Stream<ServerPlayerEntity> watchingPlayers = ((ServerChunkManager)world.getChunkManager()).threadedAnvilChunkStorage.getPlayersWatchingChunk(new ChunkPos(pos), false).stream();
|
||||
PacketByteBuf passedData = new PacketByteBuf(Unpooled.buffer());
|
||||
passedData.writeBlockPos(pos);
|
||||
passedData.writeItemStack(blockEntity.getRecord());
|
||||
passedData.writeItemStack(blockEntity.getStack());
|
||||
|
||||
watchingPlayers.forEach(player -> NetworkManager.sendToPlayer(player, VisualOverhaul.UPDATE_RECORD, passedData));
|
||||
JukeboxPacketUpdate.invUpdate = false;
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package eu.midnightdust.visualoverhaul.util.forge;
|
||||
|
||||
import net.minecraftforge.fml.ModList;
|
||||
import net.minecraftforge.forgespi.language.IModInfo;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class ModIconUtilImpl {
|
||||
public static Path getPath(String modid) {
|
||||
IModInfo mod = ModList.get().getMods().stream().filter(modInfo -> modInfo.getModId().equals(modid)).findFirst().orElseThrow(() -> new RuntimeException("Cannot get ModContainer for Forge mod with id "));
|
||||
return mod.getOwningFile().getFile().findResource(mod.getLogoFile().orElseThrow());
|
||||
}
|
||||
}
|
||||
@@ -1,20 +1,21 @@
|
||||
org.gradle.jvmargs=-Xmx4096M
|
||||
|
||||
minecraft_version=1.19.2
|
||||
minecraft_version=1.19.4
|
||||
yarn_mappings=1.19.4+build.1
|
||||
enabled_platforms=quilt,fabric,forge
|
||||
|
||||
archives_base_name=visualoverhaul
|
||||
mod_version=5.0.0
|
||||
maven_group=eu.midnightdust
|
||||
|
||||
architectury_version=6.2.43
|
||||
midnightlib_version=1.0.0
|
||||
architectury_version=8.1.75
|
||||
midnightlib_version=1.3.0
|
||||
phonos_version=0.3.0+1.19.2
|
||||
|
||||
fabric_loader_version=0.14.9
|
||||
fabric_api_version=0.59.0+1.19.2
|
||||
fabric_loader_version=0.14.18
|
||||
fabric_api_version=0.76.0+1.19.4
|
||||
|
||||
forge_version=1.19.2-43.0.8
|
||||
forge_version=1.19.4-45.0.24
|
||||
|
||||
quilt_loader_version=0.17.2-beta.3
|
||||
quilt_fabric_api_version=4.0.0-beta.7+0.59.0-1.19.2
|
||||
quilt_loader_version=0.18.6
|
||||
quilt_fabric_api_version=6.0.0-beta.2+0.76.0-1.19.4
|
||||
|
||||
@@ -8,7 +8,6 @@ repositories {
|
||||
}
|
||||
|
||||
architectury {
|
||||
injectInjectables = false
|
||||
platformSetupLoomIde()
|
||||
loader("quilt")
|
||||
}
|
||||
@@ -39,7 +38,7 @@ dependencies {
|
||||
|
||||
common(project(path: ":common", configuration: "namedElements")) { transitive false }
|
||||
shadowCommon(project(path: ":common", configuration: "transformProductionQuilt")) { transitive false }
|
||||
common(project(path: ":fabric-like", configuration: "namedElements")) { transitive false }
|
||||
//common(project(path: ":fabric-like", configuration: "namedElements")) { transitive false }
|
||||
//shadowCommon(project(path: ":fabric-like", configuration: "transformProductionQuilt")) { transitive false }
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package eu.midnightdust.visualoverhaul.quilt;
|
||||
|
||||
import eu.midnightdust.visualoverhaul.IconicButtons;
|
||||
import eu.midnightdust.visualoverhaul.VisualOverhaulClient;
|
||||
import eu.midnightdust.visualoverhaul.block.JukeboxTop;
|
||||
import eu.midnightdust.visualoverhaul.block.model.FurnaceWoodenPlanksModel;
|
||||
@@ -7,7 +8,7 @@ import eu.midnightdust.visualoverhaul.block.renderer.BrewingStandBlockEntityRend
|
||||
import eu.midnightdust.visualoverhaul.block.renderer.FurnaceBlockEntityRenderer;
|
||||
import eu.midnightdust.visualoverhaul.block.renderer.JukeboxBlockEntityRenderer;
|
||||
import eu.midnightdust.visualoverhaul.config.VOConfig;
|
||||
import net.fabricmc.fabric.api.client.rendering.v1.BlockEntityRendererRegistry;
|
||||
import eu.midnightdust.visualoverhaul.mixin.JukeboxBlockEntityAccessor;
|
||||
import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry;
|
||||
import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry;
|
||||
import net.minecraft.block.Blocks;
|
||||
@@ -18,15 +19,19 @@ import net.minecraft.block.entity.JukeboxBlockEntity;
|
||||
import net.minecraft.client.color.world.BiomeColors;
|
||||
import net.minecraft.client.item.ModelPredicateProviderRegistry;
|
||||
import net.minecraft.client.render.RenderLayer;
|
||||
import net.minecraft.client.render.block.entity.BlockEntityRendererFactories;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.item.MusicDiscItem;
|
||||
import net.minecraft.potion.PotionUtil;
|
||||
import net.minecraft.potion.Potions;
|
||||
import net.minecraft.registry.Registries;
|
||||
import net.minecraft.registry.Registry;
|
||||
import net.minecraft.resource.ResourceManager;
|
||||
import net.minecraft.resource.ResourceType;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.collection.DefaultedList;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
import org.quiltmc.loader.api.ModContainer;
|
||||
import org.quiltmc.loader.api.QuiltLoader;
|
||||
import org.quiltmc.qsl.base.api.entrypoint.client.ClientModInitializer;
|
||||
@@ -35,6 +40,7 @@ import org.quiltmc.qsl.lifecycle.api.client.event.ClientTickEvents;
|
||||
import org.quiltmc.qsl.networking.api.client.ClientPlayNetworking;
|
||||
import org.quiltmc.qsl.resource.loader.api.ResourceLoader;
|
||||
import org.quiltmc.qsl.resource.loader.api.ResourcePackActivationType;
|
||||
import org.quiltmc.qsl.resource.loader.api.reloader.SimpleSynchronousResourceReloader;
|
||||
|
||||
import static eu.midnightdust.visualoverhaul.VisualOverhaul.*;
|
||||
import static eu.midnightdust.visualoverhaul.VisualOverhaulClient.JukeBoxTop;
|
||||
@@ -45,7 +51,7 @@ public class VisualOverhaulClientQuilt implements ClientModInitializer {
|
||||
VisualOverhaulClient.onInitializeClient();
|
||||
JukeBoxTop = new JukeboxTop();
|
||||
// Block only registered on client, because it's just used for the renderer //
|
||||
Registry.register(Registry.BLOCK, new Identifier(MOD_ID,"jukebox_top"), JukeBoxTop);
|
||||
Registry.register(Registries.BLOCK, new Identifier(MOD_ID,"jukebox_top"), JukeBoxTop);
|
||||
|
||||
EntityModelLayerRegistry.registerModelLayer(FurnaceWoodenPlanksModel.WOODEN_PLANKS_MODEL_LAYER, FurnaceWoodenPlanksModel::getTexturedModelData);
|
||||
|
||||
@@ -55,18 +61,18 @@ public class VisualOverhaulClientQuilt implements ClientModInitializer {
|
||||
BlockRenderLayerMap.put(RenderLayer.getCutout(), Blocks.SMOKER);
|
||||
BlockRenderLayerMap.put(RenderLayer.getCutout(), Blocks.BLAST_FURNACE);
|
||||
|
||||
BlockEntityRendererRegistry.register(BlockEntityType.BREWING_STAND, BrewingStandBlockEntityRenderer::new);
|
||||
BlockEntityRendererRegistry.register(BlockEntityType.JUKEBOX, JukeboxBlockEntityRenderer::new);
|
||||
BlockEntityRendererRegistry.register(BlockEntityType.FURNACE, FurnaceBlockEntityRenderer::new);
|
||||
BlockEntityRendererRegistry.register(BlockEntityType.SMOKER, FurnaceBlockEntityRenderer::new);
|
||||
BlockEntityRendererRegistry.register(BlockEntityType.BLAST_FURNACE, FurnaceBlockEntityRenderer::new);
|
||||
BlockEntityRendererFactories.register(BlockEntityType.BREWING_STAND, BrewingStandBlockEntityRenderer::new);
|
||||
BlockEntityRendererFactories.register(BlockEntityType.JUKEBOX, JukeboxBlockEntityRenderer::new);
|
||||
BlockEntityRendererFactories.register(BlockEntityType.FURNACE, FurnaceBlockEntityRenderer::new);
|
||||
BlockEntityRendererFactories.register(BlockEntityType.SMOKER, FurnaceBlockEntityRenderer::new);
|
||||
BlockEntityRendererFactories.register(BlockEntityType.BLAST_FURNACE, FurnaceBlockEntityRenderer::new);
|
||||
|
||||
// Phonos Compat //
|
||||
if (QuiltLoader.isModLoaded("phonos")) {
|
||||
//PhonosCompatInit.init();
|
||||
}
|
||||
|
||||
Registry.ITEM.forEach((item) -> {
|
||||
Registries.ITEM.forEach((item) -> {
|
||||
if(item instanceof MusicDiscItem || item.getName().getString().toLowerCase().contains("music_disc") || item.getName().getString().toLowerCase().contains("record") || item.getName().getString().toLowerCase().contains("dynamic_disc")) {
|
||||
ModelPredicateProviderRegistry.register(item, new Identifier("round"), (stack, world, entity, seed) -> stack.getCount() == 2 ? 1.0F : 0.0F);
|
||||
}
|
||||
@@ -95,7 +101,7 @@ public class VisualOverhaulClientQuilt implements ClientModInitializer {
|
||||
ItemStack record = attachedData.readItemStack();
|
||||
client.execute(() -> {
|
||||
if (client.world != null && client.world.getBlockEntity(pos) != null && client.world.getBlockEntity(pos) instanceof JukeboxBlockEntity blockEntity) {
|
||||
blockEntity.setRecord(record);
|
||||
((JukeboxBlockEntityAccessor)blockEntity).getInventory().set(0, record);
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -178,5 +184,17 @@ public class VisualOverhaulClientQuilt implements ClientModInitializer {
|
||||
if (VOConfig.coloredLilypad) {
|
||||
ColorProviderRegistry.BLOCK.register((state, world, pos, tintIndex) -> world != null ? world.getColor(pos, BiomeColors.FOLIAGE_COLOR) : 0, Blocks.LILY_PAD);
|
||||
}
|
||||
ResourceLoader.get(ResourceType.CLIENT_RESOURCES).registerReloader(new SimpleSynchronousResourceReloader() {
|
||||
|
||||
@Override
|
||||
public Identifier getQuiltId() {
|
||||
return new Identifier("iconic", "button_icons");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reload(ResourceManager manager) {
|
||||
IconicButtons.reload(manager);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ public abstract class MixinJukeboxBlock extends BlockWithEntity {
|
||||
Stream<ServerPlayerEntity> watchingPlayers = PlayerLookup.tracking(blockEntity).stream();
|
||||
PacketByteBuf passedData = new PacketByteBuf(Unpooled.buffer());
|
||||
passedData.writeBlockPos(pos);
|
||||
passedData.writeItemStack(blockEntity.getRecord());
|
||||
passedData.writeItemStack(blockEntity.getStack());
|
||||
|
||||
watchingPlayers.forEach(player -> ServerPlayNetworking.send(player, VisualOverhaul.UPDATE_RECORD, passedData));
|
||||
JukeboxPacketUpdate.invUpdate = false;
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package eu.midnightdust.visualoverhaul.util.fabric;
|
||||
|
||||
import org.quiltmc.loader.api.ModContainer;
|
||||
import org.quiltmc.loader.api.QuiltLoader;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class ModIconUtilImpl {
|
||||
public static Path getPath(String modid) {
|
||||
ModContainer mod = QuiltLoader.getModContainer(modid).orElseThrow(() -> new RuntimeException("Cannot get ModContainer for Fabric mod with id "));
|
||||
return mod.getPath(mod.metadata().icon(16));
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,6 @@ pluginManagement {
|
||||
}
|
||||
|
||||
include("common")
|
||||
include("fabric-like")
|
||||
include("fabric")
|
||||
include("quilt")
|
||||
include("forge")
|
||||
|
||||
Reference in New Issue
Block a user