From ebba0dde6c99cdc7d34312ca5dce356bf4b4aa90 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 27 Jan 2022 14:05:37 +0300 Subject: [PATCH 1/2] Allow enchantment table mixins skip target --- .../java/ru/bclib/mixin/client/EnchantingTableBlockMixin.java | 4 +++- src/main/java/ru/bclib/mixin/common/EnchantmentMenuMixin.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/bclib/mixin/client/EnchantingTableBlockMixin.java b/src/main/java/ru/bclib/mixin/client/EnchantingTableBlockMixin.java index 3b6d8fad..9ac56d2e 100644 --- a/src/main/java/ru/bclib/mixin/client/EnchantingTableBlockMixin.java +++ b/src/main/java/ru/bclib/mixin/client/EnchantingTableBlockMixin.java @@ -17,7 +17,9 @@ public abstract class EnchantingTableBlockMixin extends Block { @Redirect(method = "animateTick", at = @At( value = "INVOKE", - target = "Lnet/minecraft/world/level/block/state/BlockState;is(Lnet/minecraft/world/level/block/Block;)Z")//, + target = "Lnet/minecraft/world/level/block/state/BlockState;is(Lnet/minecraft/world/level/block/Block;)Z"), + require = -1, + expect = -1 ) private boolean bclib_isBookshelf(BlockState state, Block block) { return block == Blocks.BOOKSHELF ? state.is(CommonBlockTags.BOOKSHELVES) : state.is(block); diff --git a/src/main/java/ru/bclib/mixin/common/EnchantmentMenuMixin.java b/src/main/java/ru/bclib/mixin/common/EnchantmentMenuMixin.java index 75ac69b6..6e33274f 100644 --- a/src/main/java/ru/bclib/mixin/common/EnchantmentMenuMixin.java +++ b/src/main/java/ru/bclib/mixin/common/EnchantmentMenuMixin.java @@ -19,7 +19,9 @@ public abstract class EnchantmentMenuMixin extends AbstractContainerMenu { @Redirect(method = "lambda$slotsChanged$0(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;)V", at = @At( value = "INVOKE", - target = "Lnet/minecraft/world/level/block/state/BlockState;is(Lnet/minecraft/world/level/block/Block;)Z")//, + target = "Lnet/minecraft/world/level/block/state/BlockState;is(Lnet/minecraft/world/level/block/Block;)Z"), + require = -1, + expect = -1 ) private boolean bclib_isBookshelf(BlockState state, Block block) { return block == Blocks.BOOKSHELF ? state.is(CommonBlockTags.BOOKSHELVES) : state.is(block); From d802de90f9d7ac8de523ea7c79558880c032ce05 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 27 Jan 2022 14:48:16 +0300 Subject: [PATCH 2/2] Liquid fog fix (#81), Nether fog config --- src/main/java/ru/bclib/BCLib.java | 3 +- src/main/java/ru/bclib/api/PostInitAPI.java | 2 +- .../java/ru/bclib/api/biomes/BiomeAPI.java | 34 ++++++++++++++----- .../client/render/CustomFogRenderer.java | 22 ++++++++---- .../java/ru/bclib/config/ClientConfig.java | 11 ++++-- .../bclib/interfaces/SurfaceRuleProvider.java | 3 -- .../bclib/mixin/client/FogRendererMixin.java | 2 +- .../bclib/mixin/common/BiomeSourceMixin.java | 5 --- .../mixin/common/MinecraftServerMixin.java | 1 - .../world/features/NBTStructureFeature.java | 2 +- 10 files changed, 55 insertions(+), 30 deletions(-) diff --git a/src/main/java/ru/bclib/BCLib.java b/src/main/java/ru/bclib/BCLib.java index e356e7f7..f80d8a0d 100644 --- a/src/main/java/ru/bclib/BCLib.java +++ b/src/main/java/ru/bclib/BCLib.java @@ -4,15 +4,14 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.ModInitializer; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.resources.ResourceLocation; -import ru.bclib.api.tag.TagAPI; import ru.bclib.api.WorldDataAPI; -import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.dataexchange.DataExchangeAPI; import ru.bclib.api.dataexchange.handler.autosync.Chunker; import ru.bclib.api.dataexchange.handler.autosync.HelloClient; import ru.bclib.api.dataexchange.handler.autosync.HelloServer; import ru.bclib.api.dataexchange.handler.autosync.RequestFiles; import ru.bclib.api.dataexchange.handler.autosync.SendFiles; +import ru.bclib.api.tag.TagAPI; import ru.bclib.config.Configs; import ru.bclib.recipes.CraftingRecipes; import ru.bclib.registry.BaseBlockEntities; diff --git a/src/main/java/ru/bclib/api/PostInitAPI.java b/src/main/java/ru/bclib/api/PostInitAPI.java index cdf17eb1..c2676f9b 100644 --- a/src/main/java/ru/bclib/api/PostInitAPI.java +++ b/src/main/java/ru/bclib/api/PostInitAPI.java @@ -8,9 +8,9 @@ import net.minecraft.client.renderer.RenderType; import net.minecraft.core.Registry; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.tag.TagAPI; import ru.bclib.api.tag.TagAPI.TagLocation; -import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.blocks.BaseBarrelBlock; import ru.bclib.blocks.BaseChestBlock; import ru.bclib.blocks.BaseFurnaceBlock; diff --git a/src/main/java/ru/bclib/api/biomes/BiomeAPI.java b/src/main/java/ru/bclib/api/biomes/BiomeAPI.java index 1ddaeff4..274783f8 100644 --- a/src/main/java/ru/bclib/api/biomes/BiomeAPI.java +++ b/src/main/java/ru/bclib/api/biomes/BiomeAPI.java @@ -1,10 +1,14 @@ package ru.bclib.api.biomes; -import com.google.common.collect.*; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.Sets; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.event.registry.DynamicRegistrySetupCallback; -import net.fabricmc.fabric.api.event.registry.RegistryEntryAddedCallback; import net.fabricmc.fabric.impl.biome.NetherBiomeData; import net.fabricmc.fabric.impl.biome.TheEndBiomeData; import net.fabricmc.fabric.impl.structure.FabricStructureImpl; @@ -22,7 +26,11 @@ import net.minecraft.world.entity.MobCategory; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.WorldGenLevel; -import net.minecraft.world.level.biome.*; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeGenerationSettings; +import net.minecraft.world.level.biome.BiomeSource; +import net.minecraft.world.level.biome.Biomes; +import net.minecraft.world.level.biome.Climate; import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; @@ -42,14 +50,16 @@ import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.StructureFeatureConfiguration; import net.minecraft.world.level.levelgen.placement.PlacedFeature; -import net.minecraft.world.level.storage.WorldData; import org.apache.commons.lang3.mutable.MutableInt; import org.jetbrains.annotations.Nullable; import ru.bclib.BCLib; import ru.bclib.entity.BCLEntityWrapper; -import ru.bclib.interfaces.*; +import ru.bclib.interfaces.BiomeSourceAccessor; +import ru.bclib.interfaces.NoiseGeneratorSettingsProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceProvider; +import ru.bclib.interfaces.SurfaceRuleProvider; import ru.bclib.mixin.common.BiomeGenerationSettingsAccessor; -import ru.bclib.mixin.common.BiomeSourceMixin; import ru.bclib.mixin.common.MobSpawnSettingsAccessor; import ru.bclib.mixin.common.StructureSettingsAccessor; import ru.bclib.util.CollectionsUtil; @@ -61,8 +71,16 @@ import ru.bclib.world.features.BCLFeature; import ru.bclib.world.generator.BiomePicker; import ru.bclib.world.structures.BCLStructureFeature; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; import java.util.Map.Entry; +import java.util.Objects; +import java.util.Optional; +import java.util.Random; +import java.util.Set; import java.util.function.BiConsumer; import java.util.function.Supplier; import java.util.stream.Collectors; diff --git a/src/main/java/ru/bclib/client/render/CustomFogRenderer.java b/src/main/java/ru/bclib/client/render/CustomFogRenderer.java index 0ac7efb0..90affb44 100644 --- a/src/main/java/ru/bclib/client/render/CustomFogRenderer.java +++ b/src/main/java/ru/bclib/client/render/CustomFogRenderer.java @@ -2,8 +2,6 @@ package ru.bclib.client.render; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.Camera; -import net.minecraft.client.renderer.FogRenderer; -import net.minecraft.client.renderer.FogRenderer.FogMode; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.util.Mth; import net.minecraft.world.effect.MobEffectInstance; @@ -12,7 +10,9 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.level.Level; import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.material.FogType; import ru.bclib.api.biomes.BiomeAPI; +import ru.bclib.config.Configs; import ru.bclib.util.BackgroundInfo; import ru.bclib.util.MHelper; import ru.bclib.world.biomes.BCLBiome; @@ -25,12 +25,12 @@ public class CustomFogRenderer { private static float fogStart = 0; private static float fogEnd = 192; - public static boolean applyFogDensity(Camera camera, FogRenderer.FogMode fogMode, float viewDistance, boolean thickFog) { - if (fogMode != FogMode.FOG_SKY && fogMode != FogMode.FOG_TERRAIN) { + public static boolean applyFogDensity(Camera camera, float viewDistance, boolean thickFog) { + FogType fogType = camera.getFluidInCamera(); + if (fogType != FogType.NONE) { BackgroundInfo.fogDensity = 1; return false; } - Entity entity = camera.getEntity(); if (!isForcedDimension(entity.level) && shouldIgnoreArea(entity.level, (int) entity.getX(), (int) entity.getEyeY(), (int) entity.getZ())) { @@ -41,7 +41,7 @@ public class CustomFogRenderer { float fog = getFogDensity(entity.level, entity.getX(), entity.getEyeY(), entity.getZ()); BackgroundInfo.fogDensity = fog; - if (thickFog) { + if (thickFog(thickFog, entity.level)) { fogStart = viewDistance * 0.05F / fog; fogEnd = Math.min(viewDistance, 192.0F) * 0.5F / fog; } @@ -78,6 +78,16 @@ public class CustomFogRenderer { return true; } + private static boolean thickFog(boolean thickFog, Level level) { + if (!thickFog) { + return false; + } + if (level.dimension() == Level.NETHER) { + return Configs.CLIENT_CONFIG.netherThickFog(); + } + return true; + } + private static boolean isForcedDimension(Level level) { return level.dimension() == Level.END || level.dimension() == Level.NETHER; } diff --git a/src/main/java/ru/bclib/config/ClientConfig.java b/src/main/java/ru/bclib/config/ClientConfig.java index 5cd5c3fc..e3f888c3 100644 --- a/src/main/java/ru/bclib/config/ClientConfig.java +++ b/src/main/java/ru/bclib/config/ClientConfig.java @@ -20,8 +20,10 @@ public class ClientConfig extends NamedPathConfig { @ConfigUI(topPadding = 12) public static final ConfigToken DEBUG_HASHES = ConfigToken.Boolean(false, "debugHashes", AutoSync.SYNC_CATEGORY); - - + + @ConfigUI(leftPadding = 8) + public static final ConfigToken NETHER_THICK_FOG = ConfigToken.Boolean(true, "netherThickFog", "rendering"); + public ClientConfig() { super(BCLib.MOD_ID, "client", false); } @@ -49,7 +51,12 @@ public class ClientConfig extends NamedPathConfig { public boolean isShowingModInfo() { return get(DISPLAY_MOD_INFO) /*&& isAllowingAutoSync()*/; } + public boolean suppressExperimentalDialog() { return get(SUPPRESS_EXPERIMENTAL_DIALOG); } + + public boolean netherThickFog() { + return get(NETHER_THICK_FOG); + } } diff --git a/src/main/java/ru/bclib/interfaces/SurfaceRuleProvider.java b/src/main/java/ru/bclib/interfaces/SurfaceRuleProvider.java index e4482def..d76a8d0e 100644 --- a/src/main/java/ru/bclib/interfaces/SurfaceRuleProvider.java +++ b/src/main/java/ru/bclib/interfaces/SurfaceRuleProvider.java @@ -1,9 +1,6 @@ package ru.bclib.interfaces; import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.levelgen.SurfaceRules.RuleSource; - -import java.util.List; public interface SurfaceRuleProvider { void bclib_addBiomeSource(BiomeSource source); diff --git a/src/main/java/ru/bclib/mixin/client/FogRendererMixin.java b/src/main/java/ru/bclib/mixin/client/FogRendererMixin.java index 64e5186f..d7d69d36 100644 --- a/src/main/java/ru/bclib/mixin/client/FogRendererMixin.java +++ b/src/main/java/ru/bclib/mixin/client/FogRendererMixin.java @@ -50,7 +50,7 @@ public class FogRendererMixin { @Inject(method = "setupFog", at = @At("HEAD"), cancellable = true) private static void bclib_fogDensity(Camera camera, FogRenderer.FogMode fogMode, float viewDistance, boolean thickFog, CallbackInfo info) { - if (CustomFogRenderer.applyFogDensity(camera, fogMode, viewDistance, thickFog)) { + if (CustomFogRenderer.applyFogDensity(camera, viewDistance, thickFog)) { info.cancel(); } } diff --git a/src/main/java/ru/bclib/mixin/common/BiomeSourceMixin.java b/src/main/java/ru/bclib/mixin/common/BiomeSourceMixin.java index 89d1e22b..1ea16ead 100644 --- a/src/main/java/ru/bclib/mixin/common/BiomeSourceMixin.java +++ b/src/main/java/ru/bclib/mixin/common/BiomeSourceMixin.java @@ -7,12 +7,7 @@ import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.At.Shift; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import ru.bclib.BCLib; -import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.interfaces.BiomeSourceAccessor; import java.util.List; diff --git a/src/main/java/ru/bclib/mixin/common/MinecraftServerMixin.java b/src/main/java/ru/bclib/mixin/common/MinecraftServerMixin.java index 0c470b28..da5ce859 100644 --- a/src/main/java/ru/bclib/mixin/common/MinecraftServerMixin.java +++ b/src/main/java/ru/bclib/mixin/common/MinecraftServerMixin.java @@ -21,7 +21,6 @@ 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 ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.dataexchange.DataExchangeAPI; import ru.bclib.recipes.BCLRecipeManager; diff --git a/src/main/java/ru/bclib/world/features/NBTStructureFeature.java b/src/main/java/ru/bclib/world/features/NBTStructureFeature.java index 35b645dc..77f51198 100644 --- a/src/main/java/ru/bclib/world/features/NBTStructureFeature.java +++ b/src/main/java/ru/bclib/world/features/NBTStructureFeature.java @@ -18,8 +18,8 @@ import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConf import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; -import ru.bclib.api.tag.CommonBlockTags; import ru.bclib.api.biomes.BiomeAPI; +import ru.bclib.api.tag.CommonBlockTags; import ru.bclib.util.BlocksHelper; import ru.bclib.world.processors.DestructionStructureProcessor;