Add Nuker as well as Xray, Fullbright with support for Sodium+Iris
parent
e174655189
commit
cd2c208d3c
|
@ -56,8 +56,8 @@ dependencies {
|
||||||
runtimeOnly("org.anarres:jcpp:1.4.14")
|
runtimeOnly("org.anarres:jcpp:1.4.14")
|
||||||
|
|
||||||
modImplementation(files("vendor/mods/baritone-unoptimized-fabric-1.8.2.jar"))
|
modImplementation(files("vendor/mods/baritone-unoptimized-fabric-1.8.2.jar"))
|
||||||
modRuntimeOnly(files("vendor/mods/iris-mc1.18.1-1.2.0-pre.jar"))
|
modImplementation(files("vendor/mods/iris-mc1.18.1-1.2.0-pre.jar"))
|
||||||
modRuntimeOnly(files("vendor/mods/sodium-fabric-mc1.18.1-0.4.0-alpha6+build.14.jar"))
|
modImplementation(files("vendor/mods/sodium-fabric-mc1.18.1-0.4.0-alpha6+build.14.jar"))
|
||||||
modRuntimeOnly(files("vendor/mods/lazydfu-0.1.2.jar"))
|
modRuntimeOnly(files("vendor/mods/lazydfu-0.1.2.jar"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
package codes.som.hibiscus.mixins;
|
||||||
|
|
||||||
|
import codes.som.hibiscus.HibiscusMod;
|
||||||
|
import codes.som.hibiscus.events.WorldCullingEvent;
|
||||||
|
import me.jellysquid.mods.sodium.client.render.chunk.RenderSectionManager;
|
||||||
|
import net.minecraft.client.MinecraftClient;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||||
|
|
||||||
|
@Mixin(RenderSectionManager.class)
|
||||||
|
public abstract class MixinRenderSectionManager {
|
||||||
|
@Redirect(method = "initSearch", at = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;chunkCullingEnabled:Z"))
|
||||||
|
public boolean cancelCulling(MinecraftClient client) {
|
||||||
|
var event = new WorldCullingEvent();
|
||||||
|
HibiscusMod.bus().fire(event);
|
||||||
|
return client.chunkCullingEnabled && !event.isCancelled();
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,9 +1,11 @@
|
||||||
package codes.som.hibiscus.mixins;
|
package codes.som.hibiscus.mixins;
|
||||||
|
|
||||||
import codes.som.hibiscus.HibiscusMod;
|
import codes.som.hibiscus.HibiscusMod;
|
||||||
import codes.som.hibiscus.events.*;
|
import codes.som.hibiscus.events.PostRenderEntitiesEvent;
|
||||||
|
import codes.som.hibiscus.events.PostRenderWorldEvent;
|
||||||
|
import codes.som.hibiscus.events.PreRenderEntitiesEvent;
|
||||||
|
import codes.som.hibiscus.events.PreRenderWorldEvent;
|
||||||
import codes.som.hibiscus.util.graphics.MinecraftRenderPipelineProgress;
|
import codes.som.hibiscus.util.graphics.MinecraftRenderPipelineProgress;
|
||||||
import net.minecraft.client.network.ClientPlayerEntity;
|
|
||||||
import net.minecraft.client.render.Camera;
|
import net.minecraft.client.render.Camera;
|
||||||
import net.minecraft.client.render.GameRenderer;
|
import net.minecraft.client.render.GameRenderer;
|
||||||
import net.minecraft.client.render.LightmapTextureManager;
|
import net.minecraft.client.render.LightmapTextureManager;
|
||||||
|
@ -13,7 +15,6 @@ import net.minecraft.util.math.Matrix4f;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
@Mixin(WorldRenderer.class)
|
@Mixin(WorldRenderer.class)
|
||||||
|
@ -28,12 +29,13 @@ public abstract class MixinWorldRenderer {
|
||||||
HibiscusMod.bus().fire(new PostRenderWorldEvent(tickDelta, camera, matrices));
|
HibiscusMod.bus().fire(new PostRenderWorldEvent(tickDelta, camera, matrices));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;isSpectator()Z"))
|
/* Obsoleted by Sodium-compatible MixinRenderSectionManager
|
||||||
public boolean cancelCulling(ClientPlayerEntity instance) {
|
@Redirect(method = "setupTerrain", at = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;chunkCullingEnabled:Z"))
|
||||||
|
public boolean cancelCulling(MinecraftClient client) {
|
||||||
var event = new WorldCullingEvent();
|
var event = new WorldCullingEvent();
|
||||||
HibiscusMod.bus().fire(event);
|
HibiscusMod.bus().fire(event);
|
||||||
return instance.isSpectator() || event.isCancelled();
|
return client.chunkCullingEnabled && !event.isCancelled();
|
||||||
}
|
} */
|
||||||
|
|
||||||
@Inject(method = "render", at = @At(value = "INVOKE_STRING", target = "Lnet/minecraft/util/profiler/Profiler;swap(Ljava/lang/String;)V", args = "ldc=entities"))
|
@Inject(method = "render", at = @At(value = "INVOKE_STRING", target = "Lnet/minecraft/util/profiler/Profiler;swap(Ljava/lang/String;)V", args = "ldc=entities"))
|
||||||
private void startRenderEntities(MatrixStack matrices, float tickDelta, long limitTime, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightmapTextureManager lightmapTextureManager, Matrix4f matrix4f, CallbackInfo ci) {
|
private void startRenderEntities(MatrixStack matrices, float tickDelta, long limitTime, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightmapTextureManager lightmapTextureManager, Matrix4f matrix4f, CallbackInfo ci) {
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
package codes.som.hibiscus.mixins.xray;
|
||||||
|
|
||||||
|
import codes.som.hibiscus.subsystems.xray.XrayBlockView;
|
||||||
|
import codes.som.hibiscus.subsystems.xray.XraySystem;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.Direction;
|
||||||
|
import net.minecraft.world.BlockView;
|
||||||
|
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(Block.class)
|
||||||
|
public abstract class MixinBlock {
|
||||||
|
private static boolean ignoreShouldDrawSide = false;
|
||||||
|
|
||||||
|
@Inject(method = "shouldDrawSide", at = @At("RETURN"), cancellable = true)
|
||||||
|
private static void onShouldRenderFace(BlockState state, BlockView world, BlockPos pos, Direction side, BlockPos blockPos, CallbackInfoReturnable<Boolean> cir) {
|
||||||
|
if (ignoreShouldDrawSide)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!XraySystem.shouldRenderXray())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!XraySystem.isXrayBlock(state)) {
|
||||||
|
cir.setReturnValue(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var xrayView = new XrayBlockView(world);
|
||||||
|
ignoreShouldDrawSide = true;
|
||||||
|
boolean xrayShouldDrawSide = Block.shouldDrawSide(state, xrayView, pos, side, blockPos);
|
||||||
|
ignoreShouldDrawSide = false;
|
||||||
|
|
||||||
|
cir.setReturnValue(xrayShouldDrawSide);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
package codes.som.hibiscus.mixins.xray;
|
||||||
|
|
||||||
|
import codes.som.hibiscus.subsystems.xray.XrayBlockView;
|
||||||
|
import codes.som.hibiscus.subsystems.xray.XraySystem;
|
||||||
|
import me.jellysquid.mods.sodium.client.render.occlusion.BlockOcclusionCache;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.Direction;
|
||||||
|
import net.minecraft.world.BlockView;
|
||||||
|
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.CallbackInfoReturnable;
|
||||||
|
|
||||||
|
@Mixin(BlockOcclusionCache.class)
|
||||||
|
public abstract class MixinBlockOcclusionCache {
|
||||||
|
@Shadow
|
||||||
|
public abstract boolean shouldDrawSide(BlockState selfState, BlockView view, BlockPos pos, Direction facing);
|
||||||
|
|
||||||
|
private boolean ignoreShouldDrawSide = false;
|
||||||
|
|
||||||
|
@Inject(method = "shouldDrawSide", at = @At("RETURN"), cancellable = true)
|
||||||
|
private void onShouldDrawSide(BlockState selfState, BlockView view, BlockPos pos, Direction facing, CallbackInfoReturnable<Boolean> cir) {
|
||||||
|
if (ignoreShouldDrawSide)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!XraySystem.shouldRenderXray())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!XraySystem.isXrayBlock(selfState)) {
|
||||||
|
cir.setReturnValue(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var xrayView = new XrayBlockView(view);
|
||||||
|
ignoreShouldDrawSide = true;
|
||||||
|
boolean xrayShouldDrawSide = this.shouldDrawSide(selfState, xrayView, pos, facing);
|
||||||
|
ignoreShouldDrawSide = false;
|
||||||
|
|
||||||
|
cir.setReturnValue(xrayShouldDrawSide);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package codes.som.hibiscus.mixins.xray;
|
||||||
|
|
||||||
|
import codes.som.hibiscus.subsystems.xray.XraySystem;
|
||||||
|
import me.jellysquid.mods.sodium.client.render.chunk.tasks.ChunkRenderRebuildTask;
|
||||||
|
import net.minecraft.block.BlockRenderType;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||||
|
|
||||||
|
@Mixin(ChunkRenderRebuildTask.class)
|
||||||
|
public abstract class MixinChunkRenderRebuildTask {
|
||||||
|
@Redirect(method = "performBuild", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/BlockState;getRenderType()Lnet/minecraft/block/BlockRenderType;"))
|
||||||
|
private BlockRenderType onGetRenderType(BlockState instance) {
|
||||||
|
if (!XraySystem.shouldRenderXray() || XraySystem.isXrayBlock(instance))
|
||||||
|
return instance.getRenderType();
|
||||||
|
|
||||||
|
return BlockRenderType.INVISIBLE;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
package codes.som.hibiscus.mixins.xray;
|
||||||
|
|
||||||
|
import codes.som.hibiscus.subsystems.xray.XrayBlockRenderView;
|
||||||
|
import codes.som.hibiscus.subsystems.xray.XraySystem;
|
||||||
|
import me.jellysquid.mods.sodium.client.render.pipeline.FluidRenderer;
|
||||||
|
import net.minecraft.fluid.Fluid;
|
||||||
|
import net.minecraft.util.math.Direction;
|
||||||
|
import net.minecraft.world.BlockRenderView;
|
||||||
|
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.CallbackInfoReturnable;
|
||||||
|
|
||||||
|
@Mixin(FluidRenderer.class)
|
||||||
|
public abstract class MixinFluidRenderer {
|
||||||
|
@Shadow
|
||||||
|
protected abstract boolean isFluidOccluded(BlockRenderView world, int x, int y, int z, Direction dir, Fluid fluid);
|
||||||
|
|
||||||
|
@Shadow
|
||||||
|
protected abstract boolean isSideExposed(BlockRenderView world, int x, int y, int z, Direction dir, float height);
|
||||||
|
|
||||||
|
private boolean ignoreFluidOccluded = false;
|
||||||
|
private boolean ignoreSideExposed = false;
|
||||||
|
|
||||||
|
@Inject(method = "isFluidOccluded", at = @At("HEAD"), cancellable = true)
|
||||||
|
private void onIsFluidOccluded(BlockRenderView world, int x, int y, int z, Direction dir, Fluid fluid, CallbackInfoReturnable<Boolean> cir) {
|
||||||
|
if (ignoreFluidOccluded)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!XraySystem.shouldRenderXray())
|
||||||
|
return;
|
||||||
|
|
||||||
|
var xrayView = new XrayBlockRenderView(world);
|
||||||
|
ignoreFluidOccluded = true;
|
||||||
|
var xrayFluidOccluded = this.isFluidOccluded(xrayView, x, y, z, dir, fluid);
|
||||||
|
ignoreFluidOccluded = false;
|
||||||
|
|
||||||
|
cir.setReturnValue(xrayFluidOccluded);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Inject(method = "isSideExposed", at = @At("HEAD"), cancellable = true)
|
||||||
|
private void onIsSideExposed(BlockRenderView world, int x, int y, int z, Direction dir, float height, CallbackInfoReturnable<Boolean> cir) {
|
||||||
|
if (ignoreSideExposed)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!XraySystem.shouldRenderXray())
|
||||||
|
return;
|
||||||
|
|
||||||
|
var xrayView = new XrayBlockRenderView(world);
|
||||||
|
ignoreSideExposed = true;
|
||||||
|
var xraySideExposed = this.isSideExposed(xrayView, x, y, z, dir, height);
|
||||||
|
ignoreSideExposed = false;
|
||||||
|
|
||||||
|
cir.setReturnValue(xraySideExposed);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package codes.som.hibiscus.mixins.xray;
|
||||||
|
|
||||||
|
import codes.som.hibiscus.subsystems.fullbright.FullbrightSystem;
|
||||||
|
import codes.som.hibiscus.subsystems.xray.XraySystem;
|
||||||
|
import me.jellysquid.mods.sodium.client.model.light.data.LightDataAccess;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.client.render.WorldRenderer;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.BlockRenderView;
|
||||||
|
import net.minecraft.world.BlockView;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||||
|
|
||||||
|
@Mixin(LightDataAccess.class)
|
||||||
|
public abstract class MixinLightDataAccess {
|
||||||
|
@Redirect(method = "compute", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/BlockState;getAmbientOcclusionLightLevel(Lnet/minecraft/world/BlockView;Lnet/minecraft/util/math/BlockPos;)F"))
|
||||||
|
private float getAOLevel(BlockState instance, BlockView blockView, BlockPos blockPos) {
|
||||||
|
if (XraySystem.shouldRenderXray() || FullbrightSystem.shouldRenderFullbright())
|
||||||
|
return 1f;
|
||||||
|
|
||||||
|
return instance.getAmbientOcclusionLightLevel(blockView, blockPos);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Redirect(method = "compute", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;getLightmapCoordinates(Lnet/minecraft/world/BlockRenderView;Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/BlockPos;)I"))
|
||||||
|
private int getLMCoords(BlockRenderView world, BlockState state, BlockPos pos) {
|
||||||
|
if (XraySystem.shouldRenderXray() || FullbrightSystem.shouldRenderFullbright())
|
||||||
|
return 15728832;
|
||||||
|
return WorldRenderer.getLightmapCoordinates(world, state, pos);
|
||||||
|
}
|
||||||
|
}
|
|
@ -66,6 +66,7 @@ object HibiscusMod : ModInitializer {
|
||||||
keybinds.register(GLFW_KEY_O, "nofall")
|
keybinds.register(GLFW_KEY_O, "nofall")
|
||||||
keybinds.register(GLFW_KEY_G, "speed")
|
keybinds.register(GLFW_KEY_G, "speed")
|
||||||
keybinds.register(GLFW_KEY_B, "freecam")
|
keybinds.register(GLFW_KEY_B, "freecam")
|
||||||
|
keybinds.register(GLFW_KEY_X, "xray")
|
||||||
|
|
||||||
features.getFeature<AntiGhost>().enabled = true
|
features.getFeature<AntiGhost>().enabled = true
|
||||||
features.getFeature<NoFallDamage>().enabled = true
|
features.getFeature<NoFallDamage>().enabled = true
|
||||||
|
|
|
@ -9,7 +9,10 @@ import codes.som.hibiscus.features.movement.Speed
|
||||||
import codes.som.hibiscus.features.overlay.Overlay
|
import codes.som.hibiscus.features.overlay.Overlay
|
||||||
import codes.som.hibiscus.features.player.NoFallDamage
|
import codes.som.hibiscus.features.player.NoFallDamage
|
||||||
import codes.som.hibiscus.features.player.NoSprintingPacket
|
import codes.som.hibiscus.features.player.NoSprintingPacket
|
||||||
|
import codes.som.hibiscus.features.player.Nuker
|
||||||
import codes.som.hibiscus.features.visual.Freecam
|
import codes.som.hibiscus.features.visual.Freecam
|
||||||
|
import codes.som.hibiscus.features.visual.Fullbright
|
||||||
|
import codes.som.hibiscus.features.visual.Xray
|
||||||
import codes.som.hibiscus.util.Resettable
|
import codes.som.hibiscus.util.Resettable
|
||||||
|
|
||||||
fun allFeatureClasses(): Array<() -> Feature> = arrayOf(
|
fun allFeatureClasses(): Array<() -> Feature> = arrayOf(
|
||||||
|
@ -22,6 +25,9 @@ fun allFeatureClasses(): Array<() -> Feature> = arrayOf(
|
||||||
::AntiGhost,
|
::AntiGhost,
|
||||||
::Freecam,
|
::Freecam,
|
||||||
::NoSprintingPacket,
|
::NoSprintingPacket,
|
||||||
|
::Xray,
|
||||||
|
::Nuker,
|
||||||
|
::Fullbright,
|
||||||
)
|
)
|
||||||
|
|
||||||
class FeaturesRegistry : Resettable {
|
class FeaturesRegistry : Resettable {
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
package codes.som.hibiscus.features.player
|
||||||
|
|
||||||
|
import codes.som.hibiscus.api.feature.Feature
|
||||||
|
import codes.som.hibiscus.api.feature.FeatureCategory
|
||||||
|
import codes.som.hibiscus.events.PlayerTickEvent
|
||||||
|
import codes.som.hibiscus.player
|
||||||
|
import codes.som.hibiscus.world
|
||||||
|
import net.minecraft.item.PickaxeItem
|
||||||
|
import net.minecraft.item.ShovelItem
|
||||||
|
import net.minecraft.network.packet.c2s.play.PlayerActionC2SPacket
|
||||||
|
import net.minecraft.util.math.Direction
|
||||||
|
|
||||||
|
class Nuker : Feature("Nuker", FeatureCategory.PLAYER) {
|
||||||
|
init {
|
||||||
|
on { _: PlayerTickEvent ->
|
||||||
|
val activeItem = player.mainHandStack
|
||||||
|
if (activeItem == null || (activeItem.item !is PickaxeItem && activeItem.item !is ShovelItem))
|
||||||
|
return@on
|
||||||
|
|
||||||
|
if (activeItem.damage > activeItem.maxDamage * 0.75)
|
||||||
|
return@on
|
||||||
|
|
||||||
|
for (x in -6..6) {
|
||||||
|
for (z in -6..6) {
|
||||||
|
for (y in 0..5) {
|
||||||
|
val pos = player.blockPos.add(x, y, z)
|
||||||
|
if (player.pos.squaredDistanceTo(
|
||||||
|
pos.x.toDouble() + 0.5,
|
||||||
|
pos.y.toDouble() + 0.5,
|
||||||
|
pos.z.toDouble() + 0.5
|
||||||
|
) > 36.0
|
||||||
|
) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
val blockState = world.getBlockState(pos)
|
||||||
|
if (blockState.isAir)
|
||||||
|
continue
|
||||||
|
|
||||||
|
if (blockState.calcBlockBreakingDelta(player, world, pos) < 0.7) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
player.networkHandler.sendPacket(
|
||||||
|
PlayerActionC2SPacket(
|
||||||
|
PlayerActionC2SPacket.Action.START_DESTROY_BLOCK,
|
||||||
|
pos,
|
||||||
|
Direction.UP
|
||||||
|
)
|
||||||
|
)
|
||||||
|
player.networkHandler.sendPacket(
|
||||||
|
PlayerActionC2SPacket(
|
||||||
|
PlayerActionC2SPacket.Action.STOP_DESTROY_BLOCK,
|
||||||
|
pos,
|
||||||
|
Direction.UP
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package codes.som.hibiscus.features.visual
|
||||||
|
|
||||||
|
import codes.som.hibiscus.api.feature.Feature
|
||||||
|
import codes.som.hibiscus.api.feature.FeatureCategory
|
||||||
|
import codes.som.hibiscus.mc
|
||||||
|
|
||||||
|
class Fullbright : Feature("Fullbright", FeatureCategory.VISUAL) {
|
||||||
|
override fun onEnable() {
|
||||||
|
mc.worldRenderer.reload()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDisable() {
|
||||||
|
mc.worldRenderer.reload()
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package codes.som.hibiscus.features.visual
|
||||||
|
|
||||||
|
import codes.som.hibiscus.api.feature.Feature
|
||||||
|
import codes.som.hibiscus.api.feature.FeatureCategory
|
||||||
|
import codes.som.hibiscus.events.WorldCullingEvent
|
||||||
|
import codes.som.hibiscus.mc
|
||||||
|
|
||||||
|
class Xray : Feature("X-ray", FeatureCategory.VISUAL) {
|
||||||
|
init {
|
||||||
|
on { event: WorldCullingEvent -> event.cancel() }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onEnable() {
|
||||||
|
mc.worldRenderer.reload()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDisable() {
|
||||||
|
mc.worldRenderer.reload()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun createFeatureCommand() = super.createFeatureCommand().apply {
|
||||||
|
alias("xray")
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
package codes.som.hibiscus.subsystems.fullbright
|
||||||
|
|
||||||
|
import codes.som.hibiscus.HibiscusMod
|
||||||
|
import codes.som.hibiscus.features.visual.Fullbright
|
||||||
|
|
||||||
|
object FullbrightSystem {
|
||||||
|
@JvmStatic
|
||||||
|
fun shouldRenderFullbright(): Boolean {
|
||||||
|
try {
|
||||||
|
return HibiscusMod.features.getFeature<Fullbright>().enabled
|
||||||
|
} catch (_: Exception) {
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
package codes.som.hibiscus.subsystems.xray
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState
|
||||||
|
import net.minecraft.block.Blocks
|
||||||
|
import net.minecraft.util.math.BlockPos
|
||||||
|
import net.minecraft.world.BlockRenderView
|
||||||
|
import net.minecraft.world.BlockView
|
||||||
|
|
||||||
|
class XrayBlockView(private val delegate: BlockView) : BlockView by delegate {
|
||||||
|
override fun getBlockState(pos: BlockPos): BlockState {
|
||||||
|
val state = delegate.getBlockState(pos)
|
||||||
|
if (state.isAir || XraySystem.isXrayBlock(state)) {
|
||||||
|
return state
|
||||||
|
}
|
||||||
|
|
||||||
|
return Blocks.BIRCH_FENCE.defaultState
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class XrayBlockRenderView(private val delegate: BlockRenderView) : BlockRenderView by delegate {
|
||||||
|
override fun getBlockState(pos: BlockPos): BlockState {
|
||||||
|
val state = delegate.getBlockState(pos)
|
||||||
|
if (state.isAir || XraySystem.isXrayBlock(state)) {
|
||||||
|
return state
|
||||||
|
}
|
||||||
|
|
||||||
|
return Blocks.BIRCH_FENCE.defaultState
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
package codes.som.hibiscus.subsystems.xray
|
||||||
|
|
||||||
|
import codes.som.hibiscus.HibiscusMod
|
||||||
|
import codes.som.hibiscus.features.visual.Xray
|
||||||
|
import net.minecraft.block.BlockState
|
||||||
|
import net.minecraft.block.FluidBlock
|
||||||
|
import net.minecraft.block.IceBlock
|
||||||
|
import net.minecraft.block.OreBlock
|
||||||
|
|
||||||
|
object XraySystem {
|
||||||
|
@JvmStatic
|
||||||
|
fun shouldRenderXray(): Boolean {
|
||||||
|
try {
|
||||||
|
return HibiscusMod.features.getFeature<Xray>().enabled
|
||||||
|
} catch (_: Exception) {
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
fun isXrayBlock(blockState: BlockState): Boolean {
|
||||||
|
return when (blockState.block) {
|
||||||
|
is OreBlock, is FluidBlock, is IceBlock -> true
|
||||||
|
else -> false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,3 +2,24 @@ accessWidener v1 named
|
||||||
|
|
||||||
accessible class net/minecraft/network/packet/c2s/play/PlayerInteractEntityC2SPacket$InteractType
|
accessible class net/minecraft/network/packet/c2s/play/PlayerInteractEntityC2SPacket$InteractType
|
||||||
accessible class net/minecraft/network/packet/c2s/play/PlayerInteractEntityC2SPacket$InteractTypeHandler
|
accessible class net/minecraft/network/packet/c2s/play/PlayerInteractEntityC2SPacket$InteractTypeHandler
|
||||||
|
|
||||||
|
accessible class net/minecraft/client/render/RenderLayer$MultiPhaseParameters
|
||||||
|
accessible class net/minecraft/client/render/RenderPhase$Cull
|
||||||
|
accessible class net/minecraft/client/render/RenderPhase$DepthTest
|
||||||
|
accessible class net/minecraft/client/render/RenderPhase$Layering
|
||||||
|
accessible class net/minecraft/client/render/RenderPhase$Lightmap
|
||||||
|
accessible class net/minecraft/client/render/RenderPhase$LineWidth
|
||||||
|
accessible class net/minecraft/client/render/RenderPhase$OffsetTexturing
|
||||||
|
accessible class net/minecraft/client/render/RenderPhase$Overlay
|
||||||
|
accessible class net/minecraft/client/render/RenderPhase$Shader
|
||||||
|
accessible class net/minecraft/client/render/RenderPhase$Target
|
||||||
|
accessible class net/minecraft/client/render/RenderPhase$Texture
|
||||||
|
accessible class net/minecraft/client/render/RenderPhase$TextureBase
|
||||||
|
accessible class net/minecraft/client/render/RenderPhase$Textures
|
||||||
|
accessible class net/minecraft/client/render/RenderPhase$Texturing
|
||||||
|
accessible class net/minecraft/client/render/RenderPhase$Toggleable
|
||||||
|
accessible class net/minecraft/client/render/RenderPhase$Transparency
|
||||||
|
accessible class net/minecraft/client/render/RenderPhase$WriteMaskState
|
||||||
|
accessible field net/minecraft/client/render/RenderPhase SOLID_SHADER Lnet/minecraft/client/render/RenderPhase$Shader;
|
||||||
|
accessible method net/minecraft/client/render/RenderLayer of (Ljava/lang/String;Lnet/minecraft/client/render/VertexFormat;Lnet/minecraft/client/render/VertexFormat$DrawMode;IZZLnet/minecraft/client/render/RenderLayer$MultiPhaseParameters;)Lnet/minecraft/client/render/RenderLayer$MultiPhase;
|
||||||
|
accessible class net/minecraft/client/render/RenderLayer$MultiPhase
|
||||||
|
|
|
@ -17,6 +17,12 @@
|
||||||
"MixinGameRenderer",
|
"MixinGameRenderer",
|
||||||
"MixinKeyboard",
|
"MixinKeyboard",
|
||||||
"MixinMinecraftClient",
|
"MixinMinecraftClient",
|
||||||
"MixinWorldRenderer"
|
"MixinRenderSectionManager",
|
||||||
|
"MixinWorldRenderer",
|
||||||
|
"xray.MixinBlock",
|
||||||
|
"xray.MixinBlockOcclusionCache",
|
||||||
|
"xray.MixinChunkRenderRebuildTask",
|
||||||
|
"xray.MixinFluidRenderer",
|
||||||
|
"xray.MixinLightDataAccess"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue