mirror of
https://github.com/TeamMidnightDust/VisualOverhaul.git
synced 2025-12-15 21:55:08 +01:00
Port to Architectury
This commit is contained in:
97
quilt/build.gradle
Normal file
97
quilt/build.gradle
Normal file
@@ -0,0 +1,97 @@
|
||||
plugins {
|
||||
id "com.github.johnrengelman.shadow" version "7.1.2"
|
||||
}
|
||||
|
||||
repositories {
|
||||
maven { url "https://maven.quiltmc.org/repository/release/" }
|
||||
maven { url "https://api.modrinth.com/maven" }
|
||||
}
|
||||
|
||||
architectury {
|
||||
injectInjectables = false
|
||||
platformSetupLoomIde()
|
||||
loader("quilt")
|
||||
}
|
||||
|
||||
loom {
|
||||
}
|
||||
|
||||
configurations {
|
||||
common
|
||||
shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this.
|
||||
compileClasspath.extendsFrom common
|
||||
runtimeClasspath.extendsFrom common
|
||||
developmentQuilt.extendsFrom common
|
||||
archivesBaseName = rootProject.archives_base_name + "-quilt"
|
||||
}
|
||||
|
||||
dependencies {
|
||||
modImplementation "org.quiltmc:quilt-loader:${rootProject.quilt_loader_version}"
|
||||
modApi "org.quiltmc.quilted-fabric-api:quilted-fabric-api:${rootProject.quilt_fabric_api_version}"
|
||||
// Remove the next few lines if you don't want to depend on the API
|
||||
//modApi("dev.architectury:architectury-fabric:${rootProject.architectury_version}") {
|
||||
// // We must not pull Fabric Loader from Architectury Fabric
|
||||
// exclude group: "net.fabricmc"
|
||||
// exclude group: "net.fabricmc.fabric-api"
|
||||
//}
|
||||
modImplementation "maven.modrinth:midnightlib:${rootProject.midnightlib_version}-quilt"
|
||||
include "maven.modrinth:midnightlib:${rootProject.midnightlib_version}-quilt"
|
||||
|
||||
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 }
|
||||
shadowCommon(project(path: ":fabric-like", configuration: "transformProductionQuilt")) { transitive false }
|
||||
}
|
||||
|
||||
processResources {
|
||||
inputs.property "group", rootProject.maven_group
|
||||
inputs.property "version", project.version
|
||||
|
||||
filesMatching("quilt.mod.json") {
|
||||
expand "group": rootProject.maven_group,
|
||||
"version": project.version
|
||||
}
|
||||
}
|
||||
|
||||
shadowJar {
|
||||
exclude "architectury.common.json"
|
||||
|
||||
configurations = [project.configurations.shadowCommon]
|
||||
classifier "dev-shadow"
|
||||
}
|
||||
|
||||
remapJar {
|
||||
input.set shadowJar.archiveFile
|
||||
dependsOn shadowJar
|
||||
classifier null
|
||||
}
|
||||
|
||||
jar {
|
||||
classifier "dev"
|
||||
}
|
||||
|
||||
sourcesJar {
|
||||
def commonSources = project(":common").sourcesJar
|
||||
dependsOn commonSources
|
||||
from commonSources.archiveFile.map { zipTree(it) }
|
||||
}
|
||||
|
||||
components.java {
|
||||
withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) {
|
||||
skip()
|
||||
}
|
||||
}
|
||||
|
||||
publishing {
|
||||
publications {
|
||||
mavenQuilt(MavenPublication) {
|
||||
artifactId = rootProject.archives_base_name + "-" + project.name
|
||||
from components.java
|
||||
}
|
||||
}
|
||||
|
||||
// See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
|
||||
repositories {
|
||||
// Add repositories to publish to here.
|
||||
}
|
||||
}
|
||||
1
quilt/gradle.properties
Normal file
1
quilt/gradle.properties
Normal file
@@ -0,0 +1 @@
|
||||
loom.platform=quilt
|
||||
@@ -0,0 +1,180 @@
|
||||
package eu.midnightdust.visualoverhaul.quilt;
|
||||
|
||||
import eu.midnightdust.visualoverhaul.VisualOverhaulClient;
|
||||
import eu.midnightdust.visualoverhaul.block.model.FurnaceWoodenPlanksModel;
|
||||
import eu.midnightdust.visualoverhaul.block.renderer.BrewingStandBlockEntityRenderer;
|
||||
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 net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry;
|
||||
import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry;
|
||||
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.color.world.BiomeColors;
|
||||
import net.minecraft.client.item.ModelPredicateProviderRegistry;
|
||||
import net.minecraft.client.render.RenderLayer;
|
||||
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.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.qsl.base.api.entrypoint.client.ClientModInitializer;
|
||||
import org.quiltmc.qsl.block.extensions.api.client.BlockRenderLayerMap;
|
||||
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 static eu.midnightdust.visualoverhaul.VisualOverhaul.*;
|
||||
import static eu.midnightdust.visualoverhaul.VisualOverhaulClient.JukeBoxTop;
|
||||
|
||||
public class VisualOverhaulClientQuilt implements ClientModInitializer {
|
||||
@Override
|
||||
public void onInitializeClient(ModContainer mod) {
|
||||
VisualOverhaulClient.onInitializeClient();
|
||||
// Block only registered on client, because it's just used for the renderer //
|
||||
Registry.register(Registry.BLOCK, new Identifier(MOD_ID,"jukebox_top"), JukeBoxTop);
|
||||
|
||||
EntityModelLayerRegistry.registerModelLayer(FurnaceWoodenPlanksModel.WOODEN_PLANKS_MODEL_LAYER, FurnaceWoodenPlanksModel::getTexturedModelData);
|
||||
|
||||
BlockRenderLayerMap.put(RenderLayer.getCutout(), Blocks.JUKEBOX);
|
||||
BlockRenderLayerMap.put(RenderLayer.getCutout(), JukeBoxTop);
|
||||
BlockRenderLayerMap.put(RenderLayer.getCutout(), Blocks.FURNACE);
|
||||
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);
|
||||
|
||||
// // Phonos Compat //
|
||||
// if (FabricLoader.getInstance().isModLoaded("phonos")) {
|
||||
// PhonosCompatInit.init();
|
||||
// BlockEntityRendererRegistry.INSTANCE.register(PhonosBlocks.RADIO_JUKEBOX_ENTITY, RadioJukeboxBlockEntityRenderer::new);
|
||||
// }
|
||||
|
||||
Registry.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);
|
||||
}
|
||||
});
|
||||
|
||||
ClientPlayNetworking.registerGlobalReceiver(UPDATE_POTION_BOTTLES,
|
||||
(client, handler, attachedData, packetSender) -> {
|
||||
BlockPos pos = attachedData.readBlockPos();
|
||||
DefaultedList<ItemStack> inv = DefaultedList.ofSize(5, ItemStack.EMPTY);
|
||||
for (int i = 0; i < 4; i++) {
|
||||
inv.set(i, attachedData.readItemStack());
|
||||
}
|
||||
client.execute(() -> {
|
||||
if (client.world != null && client.world.getBlockEntity(pos) != null && client.world.getBlockEntity(pos) instanceof BrewingStandBlockEntity blockEntity) {
|
||||
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));
|
||||
}
|
||||
});
|
||||
});
|
||||
ClientPlayNetworking.registerGlobalReceiver(UPDATE_RECORD,
|
||||
(client, handler, attachedData, packetSender) -> {
|
||||
BlockPos pos = attachedData.readBlockPos();
|
||||
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);
|
||||
}
|
||||
});
|
||||
});
|
||||
ClientPlayNetworking.registerGlobalReceiver(UPDATE_FURNACE_ITEMS,
|
||||
(client, handler, attachedData, packetSender) -> {
|
||||
BlockPos pos = attachedData.readBlockPos();
|
||||
DefaultedList<ItemStack> inv = DefaultedList.ofSize(3, ItemStack.EMPTY);
|
||||
for (int i = 0; i < 2; i++) {
|
||||
inv.set(i, attachedData.readItemStack());
|
||||
}
|
||||
client.execute(() -> {
|
||||
if (client.world != null && client.world.getBlockEntity(pos) != null && client.world.getBlockEntity(pos) instanceof AbstractFurnaceBlockEntity blockEntity) {
|
||||
blockEntity.setStack(0, inv.get(0));
|
||||
blockEntity.setStack(1, inv.get(1));
|
||||
blockEntity.setStack(2, inv.get(2));
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Register builtin resourcepacks
|
||||
ResourceLoader.registerBuiltinResourcePack(new Identifier(MOD_ID,"nobrewingbottles"), mod, ResourcePackActivationType.DEFAULT_ENABLED);
|
||||
ResourceLoader.registerBuiltinResourcePack(new Identifier(MOD_ID,"fancyfurnace"), mod, ResourcePackActivationType.DEFAULT_ENABLED);
|
||||
ResourceLoader.registerBuiltinResourcePack(new Identifier(MOD_ID,"coloredwaterbucket"), mod, ResourcePackActivationType.DEFAULT_ENABLED);
|
||||
ResourceLoader.registerBuiltinResourcePack(new Identifier(MOD_ID,"rounddiscs"), mod, ResourcePackActivationType.ALWAYS_ENABLED);
|
||||
|
||||
// Biome-colored Items
|
||||
if (VOConfig.coloredItems) {
|
||||
ClientTickEvents.END.register(client -> {
|
||||
int waterColor;
|
||||
int foliageColor;
|
||||
int grassColor;
|
||||
if (client.world != null && client.player != null) {
|
||||
waterColor = BiomeColors.getWaterColor(client.world, client.player.getBlockPos());
|
||||
foliageColor = BiomeColors.getFoliageColor(client.world, client.player.getBlockPos());
|
||||
grassColor = BiomeColors.getGrassColor(client.world, client.player.getBlockPos());
|
||||
}
|
||||
else {
|
||||
waterColor = 4159204;
|
||||
foliageColor = -8934609;
|
||||
grassColor = -8934609;
|
||||
}
|
||||
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> tintIndex == 0 ? -1 : waterColor, Items.WATER_BUCKET);
|
||||
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> tintIndex == 0 ? -1 : waterColor, Items.AXOLOTL_BUCKET);
|
||||
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> tintIndex == 0 ? -1 : waterColor, Items.COD_BUCKET);
|
||||
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> tintIndex == 0 ? -1 : waterColor, Items.PUFFERFISH_BUCKET);
|
||||
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> tintIndex == 0 ? -1 : waterColor, Items.TROPICAL_FISH_BUCKET);
|
||||
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> tintIndex == 0 ? -1 : waterColor, Items.SALMON_BUCKET);
|
||||
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> grassColor, Items.GRASS_BLOCK);
|
||||
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> grassColor, Items.GRASS);
|
||||
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> grassColor, Items.TALL_GRASS);
|
||||
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> grassColor, Items.FERN);
|
||||
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> grassColor, Items.LARGE_FERN);
|
||||
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> foliageColor, Items.ACACIA_LEAVES);
|
||||
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> foliageColor, Items.DARK_OAK_LEAVES);
|
||||
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> foliageColor, Items.JUNGLE_LEAVES);
|
||||
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> foliageColor, Items.OAK_LEAVES);
|
||||
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> foliageColor, Items.VINE);
|
||||
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> foliageColor, Items.SUGAR_CANE);
|
||||
if (VOConfig.coloredLilypad) ColorProviderRegistry.ITEM.register((stack, tintIndex) -> foliageColor, Items.LILY_PAD);
|
||||
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> {
|
||||
if ((PotionUtil.getPotion(stack) == Potions.WATER || PotionUtil.getPotion(stack) == Potions.MUNDANE || PotionUtil.getPotion(stack) == Potions.THICK || PotionUtil.getPotion(stack) == Potions.AWKWARD) && tintIndex == 0) {
|
||||
return waterColor;
|
||||
}
|
||||
return tintIndex > 0 ? -1 : PotionUtil.getColor(stack);
|
||||
}, Items.POTION);
|
||||
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> {
|
||||
if ((PotionUtil.getPotion(stack) == Potions.WATER || PotionUtil.getPotion(stack) == Potions.MUNDANE || PotionUtil.getPotion(stack) == Potions.THICK || PotionUtil.getPotion(stack) == Potions.AWKWARD) && tintIndex == 0) {
|
||||
return waterColor;
|
||||
}
|
||||
return tintIndex > 0 ? -1 : PotionUtil.getColor(stack);
|
||||
}, Items.SPLASH_POTION);
|
||||
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> {
|
||||
if ((PotionUtil.getPotion(stack) == Potions.WATER || PotionUtil.getPotion(stack) == Potions.MUNDANE || PotionUtil.getPotion(stack) == Potions.THICK || PotionUtil.getPotion(stack) == Potions.AWKWARD) && tintIndex == 0) {
|
||||
return waterColor;
|
||||
}
|
||||
return tintIndex > 0 ? -1 : PotionUtil.getColor(stack);
|
||||
}, Items.LINGERING_POTION);
|
||||
});
|
||||
}
|
||||
if (VOConfig.coloredLilypad) {
|
||||
ColorProviderRegistry.BLOCK.register((state, world, pos, tintIndex) -> world != null ? world.getColor(pos, BiomeColors.FOLIAGE_COLOR) : 0, Blocks.LILY_PAD);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package eu.midnightdust.visualoverhaul.quilt.mixin;
|
||||
|
||||
import eu.midnightdust.visualoverhaul.VisualOverhaul;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.entity.AbstractFurnaceBlockEntity;
|
||||
import net.minecraft.block.entity.BlockEntityType;
|
||||
import net.minecraft.block.entity.LockableContainerBlockEntity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.network.PacketByteBuf;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import org.quiltmc.qsl.networking.api.PlayerLookup;
|
||||
import org.quiltmc.qsl.networking.api.ServerPlayNetworking;
|
||||
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.CallbackInfo;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@Mixin(AbstractFurnaceBlockEntity.class)
|
||||
public abstract class MixinAbstractFurnaceBlockEntity extends LockableContainerBlockEntity {
|
||||
|
||||
private static boolean invUpdate = true;
|
||||
private static int playerUpdate = -1;
|
||||
|
||||
|
||||
protected MixinAbstractFurnaceBlockEntity(BlockEntityType<?> blockEntityType, BlockPos blockPos, BlockState blockState) {
|
||||
super(blockEntityType, blockPos, blockState);
|
||||
}
|
||||
|
||||
@Inject(at = @At("TAIL"), method = "tick")
|
||||
private static void tick(World world, BlockPos pos, BlockState state, AbstractFurnaceBlockEntity blockEntity, CallbackInfo ci) {
|
||||
if (world.getBlockState(pos).hasBlockEntity()) {
|
||||
if (!world.isClient && (invUpdate || world.getPlayers().size() == playerUpdate)) {
|
||||
Stream<ServerPlayerEntity> watchingPlayers = PlayerLookup.tracking(blockEntity).stream();
|
||||
PacketByteBuf passedData = new PacketByteBuf(Unpooled.buffer());
|
||||
passedData.writeBlockPos(pos);
|
||||
passedData.writeItemStack(blockEntity.getStack(0));
|
||||
passedData.writeItemStack(blockEntity.getStack(1));
|
||||
passedData.writeItemStack(blockEntity.getStack(2));
|
||||
|
||||
watchingPlayers.forEach(player -> ServerPlayNetworking.send(player, VisualOverhaul.UPDATE_FURNACE_ITEMS, passedData));
|
||||
invUpdate = false;
|
||||
}
|
||||
playerUpdate = world.getPlayers().size();
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(at = @At("RETURN"), method = "getStack")
|
||||
public void getStack(int slot, CallbackInfoReturnable<ItemStack> cir) {
|
||||
invUpdate = true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package eu.midnightdust.visualoverhaul.quilt.mixin;
|
||||
|
||||
import eu.midnightdust.visualoverhaul.VisualOverhaul;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.entity.BlockEntityType;
|
||||
import net.minecraft.block.entity.BrewingStandBlockEntity;
|
||||
import net.minecraft.block.entity.LockableContainerBlockEntity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.network.PacketByteBuf;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import org.quiltmc.qsl.networking.api.PlayerLookup;
|
||||
import org.quiltmc.qsl.networking.api.ServerPlayNetworking;
|
||||
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.CallbackInfo;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@Mixin(BrewingStandBlockEntity.class)
|
||||
public abstract class MixinBrewingStandBlockEntity extends LockableContainerBlockEntity {
|
||||
|
||||
private static boolean invUpdate = true;
|
||||
private static int playerUpdate = -1;
|
||||
|
||||
protected MixinBrewingStandBlockEntity(BlockEntityType<?> blockEntityType, BlockPos blockPos, BlockState blockState) {
|
||||
super(blockEntityType, blockPos, blockState);
|
||||
}
|
||||
|
||||
@Inject(at = @At("TAIL"), method = "tick")
|
||||
private static void tick(World world, BlockPos pos, BlockState state, BrewingStandBlockEntity blockEntity, CallbackInfo ci) {
|
||||
if (!world.isClient && (invUpdate || world.getPlayers().size() == playerUpdate)) {
|
||||
Stream<ServerPlayerEntity> watchingPlayers = PlayerLookup.tracking(blockEntity).stream();
|
||||
PacketByteBuf passedData = new PacketByteBuf(Unpooled.buffer());
|
||||
passedData.writeBlockPos(pos);
|
||||
passedData.writeItemStack(blockEntity.getStack(0));
|
||||
passedData.writeItemStack(blockEntity.getStack(1));
|
||||
passedData.writeItemStack(blockEntity.getStack(2));
|
||||
passedData.writeItemStack(blockEntity.getStack(3));
|
||||
passedData.writeItemStack(blockEntity.getStack(4));
|
||||
|
||||
watchingPlayers.forEach(player -> ServerPlayNetworking.send(player, VisualOverhaul.UPDATE_POTION_BOTTLES, passedData));
|
||||
invUpdate = false;
|
||||
}
|
||||
playerUpdate = world.getPlayers().size();
|
||||
}
|
||||
|
||||
@Inject(at = @At("RETURN"), method = "getStack")
|
||||
public void getStack(int slot, CallbackInfoReturnable<ItemStack> cir) {
|
||||
invUpdate = true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package eu.midnightdust.visualoverhaul.quilt.mixin;
|
||||
|
||||
import eu.midnightdust.visualoverhaul.VisualOverhaul;
|
||||
import eu.midnightdust.visualoverhaul.util.JukeboxPacketUpdate;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import net.minecraft.block.BlockRenderType;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.BlockWithEntity;
|
||||
import net.minecraft.block.JukeboxBlock;
|
||||
import net.minecraft.block.entity.BlockEntity;
|
||||
import net.minecraft.block.entity.BlockEntityTicker;
|
||||
import net.minecraft.block.entity.BlockEntityType;
|
||||
import net.minecraft.block.entity.JukeboxBlockEntity;
|
||||
import net.minecraft.network.PacketByteBuf;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.quiltmc.qsl.networking.api.PlayerLookup;
|
||||
import org.quiltmc.qsl.networking.api.ServerPlayNetworking;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@Mixin(JukeboxBlock.class)
|
||||
public abstract class MixinJukeboxBlock extends BlockWithEntity {
|
||||
|
||||
protected MixinJukeboxBlock(Settings settings) {
|
||||
super(settings);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockRenderType getRenderType(BlockState state) {
|
||||
return BlockRenderType.MODEL;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state, BlockEntityType<T> type) {
|
||||
return world.isClient() ? null : checkType(type, BlockEntityType.JUKEBOX, MixinJukeboxBlock::tick);
|
||||
}
|
||||
@Unique
|
||||
private static void tick(World world, BlockPos pos, BlockState state, JukeboxBlockEntity blockEntity) {
|
||||
if (!world.isClient && (JukeboxPacketUpdate.invUpdate || world.getPlayers().size() == JukeboxPacketUpdate.playerUpdate)) {
|
||||
Stream<ServerPlayerEntity> watchingPlayers = PlayerLookup.tracking(blockEntity).stream();
|
||||
PacketByteBuf passedData = new PacketByteBuf(Unpooled.buffer());
|
||||
passedData.writeBlockPos(pos);
|
||||
passedData.writeItemStack(blockEntity.getRecord());
|
||||
|
||||
watchingPlayers.forEach(player -> ServerPlayNetworking.send(player, VisualOverhaul.UPDATE_RECORD, passedData));
|
||||
JukeboxPacketUpdate.invUpdate = false;
|
||||
}
|
||||
JukeboxPacketUpdate.playerUpdate = world.getPlayers().size();
|
||||
}
|
||||
}
|
||||
|
||||
61
quilt/src/main/resources/quilt.mod.json
Normal file
61
quilt/src/main/resources/quilt.mod.json
Normal file
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"quilt_loader": {
|
||||
"group": "${group}",
|
||||
"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",
|
||||
"intermediate_mappings": "net.fabricmc:intermediary",
|
||||
"environment": "client",
|
||||
"entrypoints": {
|
||||
"client_init": [
|
||||
"eu.midnightdust.visualoverhaul.quilt.VisualOverhaulClientQuilt"
|
||||
]
|
||||
},
|
||||
"depends": [
|
||||
{
|
||||
"id": "quilt_loader",
|
||||
"version": "*"
|
||||
},
|
||||
{
|
||||
"id": "quilt_base",
|
||||
"version": "*"
|
||||
},
|
||||
{
|
||||
"id": "midnightlib",
|
||||
"version": "*"
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"name": "VisualOverhaul (Quilt)",
|
||||
"description": "Adds better visuals for certain Minecraft Vanilla Blocks.",
|
||||
"contributors": {
|
||||
"Motschen": "Author",
|
||||
"TeamMidnightDust": "Mascot"
|
||||
},
|
||||
"contact": {
|
||||
"email": "mail@midnightdust.eu",
|
||||
"homepage": "https://modrinth.com/mod/visualoverhaul",
|
||||
"issues": "https://github.com/TeamMidnightDust/VisualOverhaul/issues",
|
||||
"sources": "https://github.com/TeamMidnightDust/VisualOverhaul"
|
||||
},
|
||||
"icon": "assets/visualoverhaul/icon.png"
|
||||
}
|
||||
},
|
||||
"mixin": [
|
||||
"visualoverhaul.mixins.json",
|
||||
"visualoverhaul-quilt.mixins.json"
|
||||
]
|
||||
}
|
||||
14
quilt/src/main/resources/visualoverhaul-quilt.mixins.json
Normal file
14
quilt/src/main/resources/visualoverhaul-quilt.mixins.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"required": true,
|
||||
"package": "eu.midnightdust.visualoverhaul.quilt.mixin",
|
||||
"compatibilityLevel": "JAVA_17",
|
||||
"minVersion": "0.8",
|
||||
"mixins": [
|
||||
"MixinJukeboxBlock",
|
||||
"MixinAbstractFurnaceBlockEntity",
|
||||
"MixinBrewingStandBlockEntity"
|
||||
],
|
||||
"injectors": {
|
||||
"defaultRequire": 1
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user