First release! - VisualOverhaul 1.0.0

This commit is contained in:
Motschen
2020-12-29 14:50:34 +01:00
parent 3fefeac26a
commit 2cffce91fd
55 changed files with 1776 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
package eu.midnightdust.visualoverhaul;
import net.minecraft.util.Identifier;
public class VisualOverhaul {
public static final Identifier UPDATE_POTION_BOTTLES = new Identifier("visualoverhaul", "brewingstand");
public static final Identifier UPDATE_RECORD = new Identifier("visualoverhaul", "record");
}

View File

@@ -0,0 +1,82 @@
package eu.midnightdust.visualoverhaul;
import eu.midnightdust.visualoverhaul.block.JukeboxTop;
import eu.midnightdust.visualoverhaul.block.renderer.BrewingStandBlockEntityRenderer;
import eu.midnightdust.visualoverhaul.block.renderer.JukeboxBlockEntityRenderer;
import eu.midnightdust.visualoverhaul.config.VOConfig;
import me.sargunvohra.mcmods.autoconfig1u.AutoConfig;
import me.sargunvohra.mcmods.autoconfig1u.serializer.JanksonConfigSerializer;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.rendereregistry.v1.BlockEntityRendererRegistry;
import net.fabricmc.fabric.api.object.builder.v1.client.model.FabricModelPredicateProviderRegistry;
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
import net.fabricmc.fabric.impl.networking.ClientSidePacketRegistryImpl;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.block.Block;
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.item.ItemStack;
import net.minecraft.item.MusicDiscItem;
import net.minecraft.util.Identifier;
import net.minecraft.util.collection.DefaultedList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.registry.Registry;
import static eu.midnightdust.visualoverhaul.VisualOverhaul.UPDATE_POTION_BOTTLES;
import static eu.midnightdust.visualoverhaul.VisualOverhaul.UPDATE_RECORD;
public class VisualOverhaulClient implements ClientModInitializer {
public static VOConfig VO_CONFIG;
public static Block JukeBoxTop = new JukeboxTop();
@Override
public void onInitializeClient() {
AutoConfig.register(VOConfig.class, JanksonConfigSerializer::new);
VO_CONFIG = AutoConfig.getConfigHolder(VOConfig.class).getConfig();
// Block only registered on client, because it's just used for the renderer //
Registry.register(Registry.BLOCK, new Identifier("visualoverhaul","jukebox_top"), JukeBoxTop);
BlockEntityRendererRegistry.INSTANCE.register(BlockEntityType.BREWING_STAND, BrewingStandBlockEntityRenderer::new);
BlockEntityRendererRegistry.INSTANCE.register(BlockEntityType.JUKEBOX, JukeboxBlockEntityRenderer::new);
Registry.ITEM.forEach((item) -> {
if(item instanceof MusicDiscItem) {
FabricModelPredicateProviderRegistry.register(item, new Identifier("round"), (stack, world, entity) -> stack.getCount() == 2 ? 1.0F : 0.0F);
}
});
ClientSidePacketRegistryImpl.INSTANCE.register(UPDATE_POTION_BOTTLES,
(packetContext, attachedData) -> {
BlockPos pos = attachedData.readBlockPos();
DefaultedList<ItemStack> inv = DefaultedList.ofSize(5, ItemStack.EMPTY);
for (int i = 0; i < 4; i++) {
inv.set(i, attachedData.readItemStack());
}
packetContext.getTaskQueue().execute(() -> {
BrewingStandBlockEntity blockEntity = (BrewingStandBlockEntity) MinecraftClient.getInstance().world.getBlockEntity(pos);
blockEntity.setStack(0,inv.get(0));
blockEntity.setStack(1,inv.get(1));
blockEntity.setStack(2,inv.get(2));
blockEntity.setStack(3,inv.get(3));
blockEntity.setStack(4,inv.get(4));
});
});
ClientSidePacketRegistryImpl.INSTANCE.register(UPDATE_RECORD,
(packetContext, attachedData) -> {
BlockPos pos = attachedData.readBlockPos();
ItemStack record = attachedData.readItemStack();
packetContext.getTaskQueue().execute(() -> {
JukeboxBlockEntity blockEntity = (JukeboxBlockEntity)MinecraftClient.getInstance().world.getBlockEntity(pos);
blockEntity.setRecord(record);
});
});
FabricLoader.getInstance().getModContainer("visualoverhaul").ifPresent(modContainer -> {
ResourceManagerHelper.registerBuiltinResourcePack(new Identifier("visualoverhaul:nobottles"), "resourcepacks/visualoverhaul", modContainer, true);
});
}
}

View File

@@ -0,0 +1,23 @@
package eu.midnightdust.visualoverhaul.block;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.state.StateManager;
import net.minecraft.state.property.BooleanProperty;
import net.minecraft.state.property.Properties;
public class JukeboxTop extends Block {
private static final BooleanProperty HAS_RECORD = Properties.HAS_RECORD;
public JukeboxTop() {
super(FabricBlockSettings.copy(Blocks.JUKEBOX));
this.setDefaultState(this.stateManager.getDefaultState().with(HAS_RECORD,false));
}
@Override
protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
builder.add(HAS_RECORD);
}
}

View File

@@ -0,0 +1,61 @@
package eu.midnightdust.visualoverhaul.block.renderer;
import eu.midnightdust.visualoverhaul.VisualOverhaul;
import eu.midnightdust.visualoverhaul.VisualOverhaulClient;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.block.entity.BrewingStandBlockEntity;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.WorldRenderer;
import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher;
import net.minecraft.client.render.block.entity.BlockEntityRenderer;
import net.minecraft.client.render.model.json.ModelTransformation;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.client.util.math.Vector3f;
import net.minecraft.item.ItemStack;
@Environment(EnvType.CLIENT)
public class BrewingStandBlockEntityRenderer extends BlockEntityRenderer<BrewingStandBlockEntity> {
public BrewingStandBlockEntityRenderer(BlockEntityRenderDispatcher blockEntityRenderDispatcher) {
super(blockEntityRenderDispatcher);
}
@Override
public void render(BrewingStandBlockEntity blockEntity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) {
if (VisualOverhaulClient.VO_CONFIG.brewingstand) {
int lightAtBlock = WorldRenderer.getLightmapCoordinates(blockEntity.getWorld(), blockEntity.getPos());
ItemStack item1 = blockEntity.getStack(0);
ItemStack item2 = blockEntity.getStack(1);
ItemStack item3 = blockEntity.getStack(2);
matrices.push();
matrices.translate(0.86f, 0.23f, 0.5f);
matrices.scale(1.15f, 1.15f, 1.15f);
matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(180));
MinecraftClient.getInstance().getItemRenderer().renderItem(item1, ModelTransformation.Mode.GROUND, lightAtBlock, overlay, matrices, vertexConsumers);
matrices.pop();
matrices.push();
matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(315));
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);
matrices.pop();
matrices.push();
matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(45));
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);
matrices.pop();
}
}
}

View File

@@ -0,0 +1,56 @@
package eu.midnightdust.visualoverhaul.block.renderer;
import eu.midnightdust.visualoverhaul.VisualOverhaulClient;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.block.entity.JukeboxBlockEntity;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.WorldRenderer;
import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher;
import net.minecraft.client.render.block.entity.BlockEntityRenderer;
import net.minecraft.client.render.model.json.ModelTransformation;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.client.util.math.Vector3f;
import net.minecraft.item.ItemStack;
import net.minecraft.state.property.Properties;
import java.util.Random;
@Environment(EnvType.CLIENT)
public class JukeboxBlockEntityRenderer extends BlockEntityRenderer<JukeboxBlockEntity> {
public JukeboxBlockEntityRenderer(BlockEntityRenderDispatcher blockEntityRenderDispatcher) {
super(blockEntityRenderDispatcher);
}
@Override
public void render(JukeboxBlockEntity blockEntity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) {
if (VisualOverhaulClient.VO_CONFIG.jukebox) {
int lightAbove = WorldRenderer.getLightmapCoordinates(blockEntity.getWorld(), blockEntity.getPos().up());
ItemStack record = blockEntity.getRecord();
record.setCount(2);
matrices.push();
matrices.translate(0.5f, 1.03f, 0.5f);
matrices.scale(0.75f, 0.75f, 0.75f);
matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion((blockEntity.getWorld().getTime() + tickDelta) * 4));
MinecraftClient.getInstance().getItemRenderer().renderItem(record, ModelTransformation.Mode.GROUND, lightAbove, overlay, matrices, vertexConsumers);
matrices.pop();
if (VisualOverhaulClient.VO_CONFIG.jukebox_fake_block) {
matrices.push();
matrices.translate(0f, 1f, 0f);
if (record == ItemStack.EMPTY) {
MinecraftClient.getInstance().getBlockRenderManager().renderBlock(VisualOverhaulClient.JukeBoxTop.getDefaultState().with(Properties.HAS_RECORD, false), blockEntity.getPos().up(), blockEntity.getWorld(), matrices, vertexConsumers.getBuffer(RenderLayer.getCutout()), false, new Random());
} else {
MinecraftClient.getInstance().getBlockRenderManager().renderBlock(VisualOverhaulClient.JukeBoxTop.getDefaultState().with(Properties.HAS_RECORD, true), blockEntity.getPos().up(), blockEntity.getWorld(), matrices, vertexConsumers.getBuffer(RenderLayer.getCutout()), false, new Random());
}
matrices.pop();
}
}
}
}

View File

@@ -0,0 +1,16 @@
package eu.midnightdust.visualoverhaul.config;
import io.github.prospector.modmenu.api.ConfigScreenFactory;
import io.github.prospector.modmenu.api.ModMenuApi;
import me.sargunvohra.mcmods.autoconfig1u.AutoConfig;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
@Environment(EnvType.CLIENT)
public class ModMenuIntegration implements ModMenuApi {
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory() {
return parent -> AutoConfig.getConfigScreen(VOConfig.class, parent).get();
}
}

View File

@@ -0,0 +1,16 @@
package eu.midnightdust.visualoverhaul.config;
import me.sargunvohra.mcmods.autoconfig1u.ConfigData;
import me.sargunvohra.mcmods.autoconfig1u.annotation.Config;
import me.sargunvohra.mcmods.autoconfig1u.shadowed.blue.endless.jankson.Comment;
import java.util.ArrayList;
import java.util.List;
@Config(name = "visualoverhaul")
public class VOConfig implements ConfigData {
public boolean brewingstand = true;
public boolean jukebox = true;
public boolean jukebox_fake_block = true;
}

View File

@@ -0,0 +1,64 @@
package eu.midnightdust.visualoverhaul.mixin;
import eu.midnightdust.visualoverhaul.VisualOverhaul;
import io.netty.buffer.Unpooled;
import net.fabricmc.fabric.api.server.PlayerStream;
import net.fabricmc.fabric.impl.networking.ServerSidePacketRegistryImpl;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.block.entity.BrewingStandBlockEntity;
import net.minecraft.block.entity.LockableContainerBlockEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.util.collection.DefaultedList;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.stream.Stream;
@Mixin(BrewingStandBlockEntity.class)
public abstract class MixinBrewingStandBlockEntity extends LockableContainerBlockEntity {
@Shadow private DefaultedList<ItemStack> inventory;
public ItemStack item1;
public ItemStack item2;
public ItemStack item3;
Boolean sendData = true;
private MixinBrewingStandBlockEntity(BlockEntityType<?> blockEntityType) {
super(blockEntityType);
}
@Inject(at = @At("TAIL"), method = "tick")
public void tick(CallbackInfo ci) {
item1 = inventory.get(0);
item2 = inventory.get(1);
item3 = inventory.get(2);
if (!this.world.isClient) {
Stream<PlayerEntity> watchingPlayers = PlayerStream.watching(world, getPos());
PacketByteBuf passedData = new PacketByteBuf(Unpooled.buffer());
passedData.writeBlockPos(pos);
passedData.writeItemStack(inventory.get(0));
passedData.writeItemStack(inventory.get(1));
passedData.writeItemStack(inventory.get(2));
passedData.writeItemStack(inventory.get(3));
passedData.writeItemStack(inventory.get(4));
passedData.writeString(String.valueOf(inventory));
watchingPlayers.forEach(player -> ServerSidePacketRegistryImpl.INSTANCE.sendToPlayer(player, VisualOverhaul.UPDATE_POTION_BOTTLES, passedData));
sendData = false;
}
}
@Inject(at = @At("RETURN"), method = "getStack", cancellable = true)
public void getStack(int slot, CallbackInfoReturnable cir) {
this.sendData = true;
}
}

View File

@@ -0,0 +1,50 @@
package eu.midnightdust.visualoverhaul.mixin;
import eu.midnightdust.visualoverhaul.VisualOverhaul;
import io.netty.buffer.Unpooled;
import net.fabricmc.fabric.api.server.PlayerStream;
import net.fabricmc.fabric.impl.networking.ServerSidePacketRegistryImpl;
import net.minecraft.block.entity.*;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.util.Tickable;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
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.stream.Stream;
@Mixin(JukeboxBlockEntity.class)
public abstract class MixinJukeboxBlockEntity extends BlockEntity implements Tickable {
@Shadow private ItemStack record;
Boolean sendData = true;
private MixinJukeboxBlockEntity(BlockEntityType<?> blockEntityType) {
super(blockEntityType);
}
@Unique
public void tick() {
if (!this.world.isClient) {
Stream<PlayerEntity> watchingPlayers = PlayerStream.watching(world, getPos());
PacketByteBuf passedData = new PacketByteBuf(Unpooled.buffer());
passedData.writeBlockPos(pos);
passedData.writeItemStack(record);
watchingPlayers.forEach(player -> ServerSidePacketRegistryImpl.INSTANCE.sendToPlayer(player, VisualOverhaul.UPDATE_RECORD, passedData));
sendData = false;
}
}
@Inject(at = @At("RETURN"), method = "getRecord", cancellable = true)
public void getRecord(CallbackInfoReturnable cir) {
this.sendData = true;
}
}

View File

@@ -0,0 +1,15 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "minecraft:item/music_disc_11"
},
"overrides": [
{
"predicate": {
"round": 1
},
"model": "minecraft:item/music_disc_11_round"
}
]
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:item/round_disc",
"textures": {
"0": "minecraft:item/music_disc_11"
}
}

View File

@@ -0,0 +1,15 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "minecraft:item/music_disc_13"
},
"overrides": [
{
"predicate": {
"round": 1
},
"model": "minecraft:item/music_disc_13_round"
}
]
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:item/round_disc",
"textures": {
"0": "minecraft:item/music_disc_13"
}
}

View File

@@ -0,0 +1,15 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "minecraft:item/music_disc_blocks"
},
"overrides": [
{
"predicate": {
"round": 1
},
"model": "minecraft:item/music_disc_blocks_round"
}
]
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:item/round_disc",
"textures": {
"0": "minecraft:item/music_disc_blocks"
}
}

View File

@@ -0,0 +1,15 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "minecraft:item/music_disc_cat"
},
"overrides": [
{
"predicate": {
"round": 1
},
"model": "minecraft:item/music_disc_cat_round"
}
]
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:item/round_disc",
"textures": {
"0": "minecraft:item/music_disc_cat"
}
}

View File

@@ -0,0 +1,15 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "minecraft:item/music_disc_chirp"
},
"overrides": [
{
"predicate": {
"round": 1
},
"model": "minecraft:item/music_disc_chirp_round"
}
]
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:item/round_disc",
"textures": {
"0": "minecraft:item/music_disc_chirp"
}
}

View File

@@ -0,0 +1,15 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "minecraft:item/music_disc_far"
},
"overrides": [
{
"predicate": {
"round": 1
},
"model": "minecraft:item/music_disc_far_round"
}
]
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:item/round_disc",
"textures": {
"0": "minecraft:item/music_disc_far"
}
}

View File

@@ -0,0 +1,15 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "minecraft:item/music_disc_mall"
},
"overrides": [
{
"predicate": {
"round": 1
},
"model": "minecraft:item/music_disc_mall_round"
}
]
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:item/round_disc",
"textures": {
"0": "minecraft:item/music_disc_mall"
}
}

View File

@@ -0,0 +1,15 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "minecraft:item/music_disc_mellohi"
},
"overrides": [
{
"predicate": {
"round": 1
},
"model": "minecraft:item/music_disc_mellohi_round"
}
]
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:item/round_disc",
"textures": {
"0": "minecraft:item/music_disc_mellohi"
}
}

View File

@@ -0,0 +1,15 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "minecraft:item/music_disc_pigstep"
},
"overrides": [
{
"predicate": {
"round": 1
},
"model": "minecraft:item/music_disc_pigstep_round"
}
]
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:item/round_disc",
"textures": {
"0": "minecraft:item/music_disc_pigstep"
}
}

View File

@@ -0,0 +1,15 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "minecraft:item/music_disc_stal"
},
"overrides": [
{
"predicate": {
"round": 1
},
"model": "minecraft:item/music_disc_stal_round"
}
]
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:item/round_disc",
"textures": {
"0": "minecraft:item/music_disc_stal"
}
}

View File

@@ -0,0 +1,15 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "minecraft:item/music_disc_strad"
},
"overrides": [
{
"predicate": {
"round": 1
},
"model": "minecraft:item/music_disc_strad_round"
}
]
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:item/round_disc",
"textures": {
"0": "minecraft:item/music_disc_strad"
}
}

View File

@@ -0,0 +1,15 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "minecraft:item/music_disc_wait"
},
"overrides": [
{
"predicate": {
"round": 1
},
"model": "minecraft:item/music_disc_wait_round"
}
]
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:item/round_disc",
"textures": {
"0": "minecraft:item/music_disc_wait"
}
}

View File

@@ -0,0 +1,15 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "minecraft:item/music_disc_ward"
},
"overrides": [
{
"predicate": {
"round": 1
},
"model": "minecraft:item/music_disc_ward_round"
}
]
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:item/round_disc",
"textures": {
"0": "minecraft:item/music_disc_ward"
}
}

View File

@@ -0,0 +1,10 @@
{
"variants": {
"has_record=true": {
"model": "visualoverhaul:block/jukebox_top_playing"
},
"has_record=false": {
"model": "visualoverhaul:block/jukebox_top_stopped"
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@@ -0,0 +1,77 @@
{
"credit": "made by Motschen",
"textures": {
"0": "block/glass",
"1": "block/black_concrete",
"2": "block/anvil",
"3": "visualoverhaul:block/vo_jukebox_top",
"particle": "block/glass"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 0.001, 16],
"faces": {
"up": {"uv": [0, 0, 16, 16], "texture": "#3"}
}
},
{
"from": [0, 0, 0],
"to": [16, 5, 16],
"faces": {
"north": {"uv": [0, 0, 16, 5], "texture": "#0"},
"east": {"uv": [0, 0, 16, 5], "texture": "#0"},
"south": {"uv": [0, 0, 16, 5], "texture": "#0"},
"west": {"uv": [0, 0, 16, 5], "texture": "#0"},
"up": {"uv": [0, 0, 16, 16], "texture": "#0"}
}
},
{
"from": [7.875, 0, 7.875],
"to": [8.125, 1.25, 8.125],
"faces": {
"north": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"east": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"south": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"west": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"up": {"uv": [0, 0, 0.25, 0.25], "texture": "#1"}
}
},
{
"from": [5.75, 1, 11.29],
"to": [6, 1.5, 11.54],
"rotation": {"angle": 45, "axis": "y", "origin": [5, 8, 12]},
"faces": {
"north": {"uv": [0, 0, 0.25, 2], "texture": "#2"},
"east": {"uv": [0, 0, 0.25, 2], "texture": "#2"},
"south": {"uv": [0, 0, 0.25, 2], "texture": "#2"},
"west": {"uv": [0, 0, 0.25, 2], "texture": "#2"},
"up": {"uv": [0, 0, 0.25, 0.25], "texture": "#2"}
}
},
{
"from": [0.875, 0, 14.875],
"to": [1.375, 1.5, 15.375],
"rotation": {"angle": 0, "axis": "y", "origin": [1, 8, 15]},
"faces": {
"north": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"east": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"south": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"west": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"up": {"uv": [0, 0, 0.25, 0.25], "texture": "#1"}
}
},
{
"from": [0.65, 1.5, 14.875],
"to": [7.15, 2, 15.375],
"rotation": {"angle": 45, "axis": "y", "origin": [1, 10, 15]},
"faces": {
"north": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"east": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"south": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"west": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"up": {"uv": [0, 0, 0.25, 0.25], "texture": "#1"}
}
}
]
}

View File

@@ -0,0 +1,77 @@
{
"credit": "made by Motschen",
"textures": {
"0": "block/glass",
"1": "block/black_concrete",
"2": "block/anvil",
"3": "visualoverhaul:block/vo_jukebox_top",
"particle": "block/glass"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 0.001, 16],
"faces": {
"up": {"uv": [0, 0, 16, 16], "texture": "#3"}
}
},
{
"from": [0, 0, 0],
"to": [16, 5, 16],
"faces": {
"north": {"uv": [0, 0, 16, 5], "texture": "#0"},
"east": {"uv": [0, 0, 16, 5], "texture": "#0"},
"south": {"uv": [0, 0, 16, 5], "texture": "#0"},
"west": {"uv": [0, 0, 16, 5], "texture": "#0"},
"up": {"uv": [0, 0, 16, 16], "texture": "#0"}
}
},
{
"from": [7.875, 0, 7.875],
"to": [8.125, 1.25, 8.125],
"faces": {
"north": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"east": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"south": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"west": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"up": {"uv": [0, 0, 0.25, 0.25], "texture": "#1"}
}
},
{
"from": [6.75, 1, 15],
"to": [7, 1.5, 15.25],
"rotation": {"angle": 0, "axis": "y", "origin": [6, 8, 16]},
"faces": {
"north": {"uv": [0, 0, 0.25, 2], "texture": "#2"},
"east": {"uv": [0, 0, 0.25, 2], "texture": "#2"},
"south": {"uv": [0, 0, 0.25, 2], "texture": "#2"},
"west": {"uv": [0, 0, 0.25, 2], "texture": "#2"},
"up": {"uv": [0, 0, 0.25, 0.25], "texture": "#2"}
}
},
{
"from": [0.875, 0, 14.875],
"to": [1.375, 1.5, 15.375],
"rotation": {"angle": 0, "axis": "y", "origin": [1, 8, 15]},
"faces": {
"north": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"east": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"south": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"west": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"up": {"uv": [0, 0, 0.25, 0.25], "texture": "#1"}
}
},
{
"from": [0.65, 1.5, 14.875],
"to": [7.15, 2, 15.375],
"rotation": {"angle": 0, "axis": "y", "origin": [1, 10, 15]},
"faces": {
"north": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"east": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"south": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"west": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"up": {"uv": [0, 0, 0.25, 0.25], "texture": "#1"}
}
}
]
}

View File

@@ -0,0 +1,447 @@
{
"credit": "made by Motschen",
"textures": {
"0": "item/music_disc_mellohi",
"particle": "#0"
},
"elements": [
{
"from": [7.5, 0, 7.5],
"to": [8.5, 1, 8.5],
"faces": {
"up": {"uv": [7, 7, 8, 8], "texture": "#0"}
}
},
{
"from": [9.5, 0, 9.5],
"to": [10.5, 1, 10.5],
"rotation": {"angle": 0, "axis": "y", "origin": [10, 8, 10]},
"faces": {
"up": {"uv": [5, 6, 6, 7], "texture": "#0"}
}
},
{
"from": [5.5, 0, 9.5],
"to": [6.5, 1, 10.5],
"rotation": {"angle": 0, "axis": "y", "origin": [6, 8, 10]},
"faces": {
"up": {"uv": [9, 6, 10, 7], "texture": "#0"}
}
},
{
"from": [5.5, 0, 5.5],
"to": [6.5, 1, 6.5],
"rotation": {"angle": 0, "axis": "y", "origin": [6, 8, 6]},
"faces": {
"up": {"uv": [9, 8, 10, 9], "texture": "#0"}
}
},
{
"from": [9.5, 0, 5.5],
"to": [10.5, 1, 6.5],
"rotation": {"angle": 0, "axis": "y", "origin": [10, 8, 6]},
"faces": {
"up": {"uv": [5, 8, 6, 9], "texture": "#0"}
}
},
{
"from": [6.5, 0, 5.5],
"to": [9.5, 1, 6.5],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 6]},
"faces": {
"up": {"uv": [6, 8, 9, 9], "texture": "#0"}
}
},
{
"from": [2.5, 0, 4.5],
"to": [13.5, 1, 5.5],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 5]},
"faces": {
"up": {"uv": [2, 9, 13, 10], "texture": "#0"}
}
},
{
"from": [4.5, 0.001, 2.5],
"to": [5.5, 1.001, 13.5],
"rotation": {"angle": 0, "axis": "y", "origin": [5, 8, 8]},
"faces": {
"up": {"uv": [2, 9, 13, 10], "rotation": 270, "texture": "#0"}
}
},
{
"from": [10.5, 0.001, 2.5],
"to": [11.5, 1.001, 13.5],
"rotation": {"angle": 0, "axis": "y", "origin": [11, 8, 8]},
"faces": {
"up": {"uv": [2, 9, 13, 10], "rotation": 270, "texture": "#0"}
}
},
{
"from": [2.5, 0, 10.5],
"to": [13.5, 1, 11.5],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 11]},
"faces": {
"up": {"uv": [2, 5, 13, 6], "texture": "#0"}
}
},
{
"from": [6.5, 0, 9.5],
"to": [9.5, 1, 10.5],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 10]},
"faces": {
"up": {"uv": [6, 6, 9, 7], "texture": "#0"}
}
},
{
"from": [5.5, 0, 6.5],
"to": [6.5, 1, 9.5],
"rotation": {"angle": 0, "axis": "y", "origin": [6, 8, 8]},
"faces": {
"up": {"uv": [6, 8, 9, 9], "rotation": 270, "texture": "#0"}
}
},
{
"from": [9.5, 0, 6.5],
"to": [10.5, 1, 9.5],
"rotation": {"angle": 0, "axis": "y", "origin": [10, 8, 8]},
"faces": {
"up": {"uv": [6, 6, 9, 7], "rotation": 270, "texture": "#0"}
}
},
{
"from": [8.5, 0, 6.5],
"to": [9.5, 1, 9.5],
"rotation": {"angle": 0, "axis": "y", "origin": [9, 8, 8]},
"faces": {
"up": {"uv": [6, 7, 7, 8], "texture": "#0"}
}
},
{
"from": [6.5, 0, 6.5],
"to": [7.5, 1, 9.5],
"rotation": {"angle": 0, "axis": "y", "origin": [7, 8, 8]},
"faces": {
"up": {"uv": [8, 7, 9, 8], "texture": "#0"}
}
},
{
"from": [7.5, 0, 8.5],
"to": [8.5, 1, 9.5],
"faces": {
"up": {"uv": [6, 7, 7, 8], "texture": "#0"}
}
},
{
"from": [7.5, 0, 6.5],
"to": [8.5, 1, 7.5],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 6]},
"faces": {
"up": {"uv": [8, 7, 9, 8], "texture": "#0"}
}
},
{
"from": [7.5, -0.001, 11.5],
"to": [12.5, 0.999, 12.5],
"rotation": {"angle": 0, "axis": "y", "origin": [10, 8, 12]},
"faces": {
"up": {"uv": [3, 5, 8, 6], "rotation": 180, "texture": "#0"}
}
},
{
"from": [3.5, -0.001, 11.5],
"to": [7.5, 0.999, 12.5],
"rotation": {"angle": 0, "axis": "y", "origin": [5, 8, 12]},
"faces": {
"up": {"uv": [8, 5, 12, 6], "rotation": 180, "texture": "#0"}
}
},
{
"from": [5.5, 0, 12.5],
"to": [10.5, 1, 13.5],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 13]},
"faces": {
"up": {"uv": [2, 5, 3, 10], "rotation": 90, "texture": "#0"}
}
},
{
"from": [6.5, 0, 13.5],
"to": [11.5, 1, 14.5],
"rotation": {"angle": 0, "axis": "y", "origin": [9, 8, 14]},
"faces": {
"east": {"uv": [10, 11, 11, 12], "texture": "#0"},
"south": {"uv": [5, 12, 10, 13], "texture": "#0"},
"up": {"uv": [5, 3, 10, 4], "texture": "#0"}
}
},
{
"from": [4.5, 0, 13.5],
"to": [6.5, 1, 14.5],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 14]},
"faces": {
"south": {"uv": [3, 11, 5, 12], "texture": "#0"},
"west": {"uv": [2, 11, 3, 12], "texture": "#0"},
"up": {"uv": [8, 3, 10, 4], "texture": "#0"}
}
},
{
"from": [3.5, 0, 12.5],
"to": [4.5, 1, 13.5],
"rotation": {"angle": 0, "axis": "y", "origin": [2, 8, 13]},
"faces": {
"south": {"uv": [13, 10, 14, 11], "texture": "#0"},
"west": {"uv": [13, 10, 14, 11], "texture": "#0"},
"up": {"uv": [10, 4, 11, 5], "texture": "#0"}
}
},
{
"from": [2.5, 0, 11.5],
"to": [3.5, 1, 12.5],
"rotation": {"angle": 0, "axis": "y", "origin": [1, 8, 12]},
"faces": {
"south": {"uv": [12, 11, 13, 12], "texture": "#0"},
"west": {"uv": [10, 11, 11, 12], "texture": "#0"},
"up": {"uv": [11, 4, 12, 5], "texture": "#0"}
}
},
{
"from": [12.5, 0, 11.5],
"to": [13.5, 1, 12.5],
"rotation": {"angle": 0, "axis": "y", "origin": [11, 8, 12]},
"faces": {
"east": {"uv": [13, 10, 14, 11], "texture": "#0"},
"south": {"uv": [13, 10, 14, 11], "texture": "#0"},
"up": {"uv": [2, 4, 3, 5], "texture": "#0"}
}
},
{
"from": [11.5, 0, 12.5],
"to": [12.5, 1, 13.5],
"rotation": {"angle": 0, "axis": "y", "origin": [10, 8, 13]},
"faces": {
"east": {"uv": [12, 11, 13, 12], "texture": "#0"},
"south": {"uv": [11, 11, 12, 12], "texture": "#0"},
"up": {"uv": [4, 4, 5, 5], "texture": "#0"}
}
},
{
"from": [11.5, -0.001, 5.5],
"to": [12.5, 0.999, 10.5],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 8]},
"faces": {
"up": {"uv": [5, 4, 10, 5], "rotation": 270, "texture": "#0"}
}
},
{
"from": [11.5, -0.001, 3.5],
"to": [12.5, 0.999, 4.5],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 6]},
"faces": {
"up": {"uv": [2, 9, 3, 10], "rotation": 270, "texture": "#0"}
}
},
{
"from": [12.5, 0, 5.5],
"to": [13.5, 1, 10.5],
"rotation": {"angle": 0, "axis": "y", "origin": [13, 8, 8]},
"faces": {
"up": {"uv": [2, 5, 3, 10], "texture": "#0"}
}
},
{
"from": [13.5, 0, 4.5],
"to": [14.5, 1, 9.5],
"rotation": {"angle": 0, "axis": "y", "origin": [14, 8, 7]},
"faces": {
"north": {"uv": [10, 11, 11, 12], "texture": "#0"},
"east": {"uv": [5, 12, 10, 13], "texture": "#0"},
"up": {"uv": [5, 3, 10, 4], "rotation": 270, "texture": "#0"}
}
},
{
"from": [13.5, 0, 9.5],
"to": [14.5, 1, 11.5],
"rotation": {"angle": 0, "axis": "y", "origin": [14, 8, 12]},
"faces": {
"east": {"uv": [3, 11, 5, 12], "texture": "#0"},
"south": {"uv": [2, 11, 3, 12], "texture": "#0"},
"up": {"uv": [8, 3, 10, 4], "rotation": 270, "texture": "#0"}
}
},
{
"from": [11.5, 0, 2.5],
"to": [12.5, 1, 3.5],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 5]},
"faces": {
"north": {"uv": [11, 11, 12, 12], "texture": "#0"},
"east": {"uv": [10, 11, 11, 12], "texture": "#0"},
"up": {"uv": [1, 5, 2, 6], "rotation": 270, "texture": "#0"}
}
},
{
"from": [12.5, 0, 3.5],
"to": [13.5, 1, 4.5],
"rotation": {"angle": 0, "axis": "y", "origin": [13, 8, 6]},
"faces": {
"north": {"uv": [12, 11, 13, 12], "texture": "#0"},
"east": {"uv": [11, 11, 12, 12], "texture": "#0"},
"up": {"uv": [2, 4, 3, 5], "rotation": 270, "texture": "#0"}
}
},
{
"from": [5.5, -0.001, 3.5],
"to": [10.5, 0.999, 4.5],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 4.1]},
"faces": {
"up": {"uv": [5, 10, 10, 11], "rotation": 180, "texture": "#0"}
}
},
{
"from": [3.5, -0.001, 3.5],
"to": [4.5, 0.999, 4.5],
"rotation": {"angle": 0, "axis": "y", "origin": [6, 8, 4]},
"faces": {
"up": {"uv": [12, 9, 13, 10], "rotation": 180, "texture": "#0"}
}
},
{
"from": [5.5, 0, 2.5],
"to": [10.5, 1, 3.5],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 3]},
"faces": {
"up": {"uv": [2, 5, 3, 10], "rotation": 270, "texture": "#0"}
}
},
{
"from": [6.5, 0, 1.5],
"to": [11.5, 1, 2.5],
"rotation": {"angle": 0, "axis": "y", "origin": [9, 8, 2]},
"faces": {
"north": {"uv": [5, 12, 10, 13], "texture": "#0"},
"east": {"uv": [12, 11, 13, 12], "texture": "#0"},
"up": {"uv": [5, 3, 10, 4], "rotation": 180, "texture": "#0"}
}
},
{
"from": [4.5, 0, 1.5],
"to": [6.5, 1, 2.5],
"rotation": {"angle": 0, "axis": "y", "origin": [7, 8, 2]},
"faces": {
"north": {"uv": [10, 11, 12, 12], "texture": "#0"},
"west": {"uv": [9, 12, 10, 13], "texture": "#0"},
"up": {"uv": [8, 3, 10, 4], "rotation": 180, "texture": "#0"}
}
},
{
"from": [2.5, 0, 3.5],
"to": [3.5, 1, 4.5],
"rotation": {"angle": 0, "axis": "y", "origin": [5, 8, 4]},
"faces": {
"north": {"uv": [12, 11, 13, 12], "texture": "#0"},
"west": {"uv": [12, 11, 13, 12], "texture": "#0"},
"up": {"uv": [1, 5, 2, 6], "rotation": 180, "texture": "#0"}
}
},
{
"from": [3.5, 0, 2.5],
"to": [4.5, 1, 3.5],
"rotation": {"angle": 0, "axis": "y", "origin": [6, 8, 3]},
"faces": {
"north": {"uv": [12, 11, 13, 12], "texture": "#0"},
"west": {"uv": [11, 11, 12, 12], "texture": "#0"},
"up": {"uv": [12, 10, 13, 11], "rotation": 180, "texture": "#0"}
}
},
{
"from": [3.5, -0.001, 5.5],
"to": [4.5, 0.999, 10.5],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 8.1]},
"faces": {
"up": {"uv": [11, 5, 12, 10], "texture": "#0"}
}
},
{
"from": [2.5, 0, 5.5],
"to": [3.5, 1, 10.5],
"rotation": {"angle": 0, "axis": "y", "origin": [3, 8, 8]},
"faces": {
"up": {"uv": [12, 5, 13, 10], "rotation": 180, "texture": "#0"}
}
},
{
"from": [1.5, 0, 6.5],
"to": [2.5, 1, 11.5],
"rotation": {"angle": 0, "axis": "y", "origin": [2, 8, 9]},
"faces": {
"south": {"uv": [13, 10, 14, 11], "texture": "#0"},
"west": {"uv": [5, 12, 10, 13], "texture": "#0"},
"up": {"uv": [5, 3, 10, 4], "rotation": 90, "texture": "#0"}
}
},
{
"from": [1.5, 0, 4.5],
"to": [2.5, 1, 6.5],
"rotation": {"angle": 0, "axis": "y", "origin": [2, 8, 4]},
"faces": {
"north": {"uv": [13, 10, 14, 11], "texture": "#0"},
"west": {"uv": [10, 11, 12, 12], "texture": "#0"},
"up": {"uv": [8, 3, 10, 4], "rotation": 90, "texture": "#0"}
}
}
],
"gui_light": "front",
"display": {
"thirdperson_righthand": {
"rotation": [38, 0, 0],
"translation": [0, 1.75, 0.75],
"scale": [0.5, 0.5, 0.5]
},
"thirdperson_lefthand": {
"rotation": [38, 0, 0],
"translation": [0, 1.75, 0.75],
"scale": [0.5, 0.5, 0.5]
},
"firstperson_righthand": {
"rotation": [87, -19, 41],
"translation": [0, 4.25, 0]
},
"firstperson_lefthand": {
"rotation": [87, -19, 41],
"translation": [0, 4.25, 0]
},
"ground": {
"translation": [0, 7.5, 0]
},
"gui": {
"rotation": [90, 0, 0]
},
"head": {
"translation": [0, 14.5, 0]
},
"fixed": {
"rotation": [-90, 0, 0],
"translation": [0, 0, -8]
}
},
"groups": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
{
"name": "group",
"origin": [10, 8, 12],
"children": [17, 18, 19, 20, 21, 22, 23, 24, 25]
},
{
"name": "group",
"origin": [10, 8, 12],
"children": [26, 27, 28, 29, 30, 31, 32]
},
{
"name": "group",
"origin": [10, 8, 12],
"children": [33, 34, 35, 36, 37, 38, 39]
},
{
"name": "group",
"origin": [10, 8, 12],
"children": [40, 41, 42, 43]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

View File

@@ -0,0 +1,38 @@
{
"schemaVersion": 1,
"id": "visualoverhaul",
"version": "${version}",
"name": "VisualOverhaul",
"description": "Adds better visuals for certain Minecraft Vanilla Blocks.",
"authors": [
"Motschen",
"TeamMidnightDust"
],
"contact": {
"homepage": "https://www.midnightdust.eu/",
"sources": "https://github.com/TeamMidnightDust/VisualOverhaul",
"issues": "https://github.com/TeamMidnightDust/VisualOverhaul/issues"
},
"license": "MIT",
"icon": "assets/visualoverhaul/icon.png",
"environment": "*",
"entrypoints": {
"client": [
"eu.midnightdust.visualoverhaul.VisualOverhaulClient"
],
"modmenu": [
"eu.midnightdust.visualoverhaul.config.ModMenuIntegration"
]
},
"mixins": [
"visualoverhaul.mixins.json"
],
"depends": {
"fabric": "*"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 B

View File

@@ -0,0 +1,6 @@
{
"pack": {
"pack_format": 6,
"description": "§2Removes the bottles from the brewing stand texture"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 710 B

View File

@@ -0,0 +1,12 @@
{
"required": true,
"package": "eu.midnightdust.visualoverhaul.mixin",
"compatibilityLevel": "JAVA_8",
"mixins": [
"MixinBrewingStandBlockEntity",
"MixinJukeboxBlockEntity"
],
"injectors": {
"defaultRequire": 1
}
}