mirror of
https://github.com/Jozufozu/Flywheel.git
synced 2024-12-28 16:06:28 +01:00
It renders stuff
- The lightmap moved - Begin to move away from access transformers - .textureManager -> .getTextureManager() - RIP cutout, saw that coming
This commit is contained in:
parent
5784cb975d
commit
d53c9b0a32
14 changed files with 71 additions and 144 deletions
|
@ -41,6 +41,7 @@ minecraft {
|
||||||
property 'forge.logging.markers', ''
|
property 'forge.logging.markers', ''
|
||||||
property 'forge.logging.console.level', 'debug'
|
property 'forge.logging.console.level', 'debug'
|
||||||
property 'fml.earlyprogresswindow', 'false'
|
property 'fml.earlyprogresswindow', 'false'
|
||||||
|
property 'mixin.debug.export', 'true'
|
||||||
|
|
||||||
arg "-mixin.config=flywheel.mixins.json"
|
arg "-mixin.config=flywheel.mixins.json"
|
||||||
|
|
||||||
|
@ -100,7 +101,7 @@ dependencies {
|
||||||
|
|
||||||
//implementation "org.joml:joml:1.10.1"
|
//implementation "org.joml:joml:1.10.1"
|
||||||
|
|
||||||
//annotationProcessor 'org.spongepowered:mixin:0.8.4:processor'
|
annotationProcessor 'org.spongepowered:mixin:0.8.4:processor'
|
||||||
}
|
}
|
||||||
|
|
||||||
// Example for how to get properties into the manifest for reading by the runtime..
|
// Example for how to get properties into the manifest for reading by the runtime..
|
||||||
|
|
|
@ -8,9 +8,11 @@ import com.jozufozu.flywheel.core.Contexts;
|
||||||
import com.jozufozu.flywheel.core.shader.WorldProgram;
|
import com.jozufozu.flywheel.core.shader.WorldProgram;
|
||||||
import com.jozufozu.flywheel.event.BeginFrameEvent;
|
import com.jozufozu.flywheel.event.BeginFrameEvent;
|
||||||
import com.jozufozu.flywheel.event.RenderLayerEvent;
|
import com.jozufozu.flywheel.event.RenderLayerEvent;
|
||||||
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.multiplayer.ClientLevel;
|
import net.minecraft.client.multiplayer.ClientLevel;
|
||||||
|
import net.minecraft.client.renderer.ShaderInstance;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
|
|
||||||
|
@ -99,6 +101,10 @@ public class InstanceWorld {
|
||||||
public void renderLayer(RenderLayerEvent event) {
|
public void renderLayer(RenderLayerEvent event) {
|
||||||
event.type.setupRenderState();
|
event.type.setupRenderState();
|
||||||
|
|
||||||
|
ShaderInstance shader = RenderSystem.getShader();
|
||||||
|
if (shader != null)
|
||||||
|
shader.apply();
|
||||||
|
|
||||||
materialManager.render(event.layer, event.viewProjection, event.camX, event.camY, event.camZ);
|
materialManager.render(event.layer, event.viewProjection, event.camX, event.camY, event.camZ);
|
||||||
|
|
||||||
event.type.clearRenderState();
|
event.type.clearRenderState();
|
||||||
|
|
|
@ -34,7 +34,7 @@ public class TextureRenderState implements IRenderState {
|
||||||
@Override
|
@Override
|
||||||
public void bind() {
|
public void bind() {
|
||||||
unit.makeActive();
|
unit.makeActive();
|
||||||
Minecraft.getInstance().textureManager.bindForSetup(location);
|
Minecraft.getInstance().getTextureManager().bindForSetup(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -16,7 +16,7 @@ public class AtlasInfo {
|
||||||
private static final Map<ResourceLocation, SheetData> sheetData = new HashMap<>();
|
private static final Map<ResourceLocation, SheetData> sheetData = new HashMap<>();
|
||||||
|
|
||||||
public static TextureAtlas getAtlas(ResourceLocation name) {
|
public static TextureAtlas getAtlas(ResourceLocation name) {
|
||||||
AbstractTexture texture = Minecraft.getInstance().textureManager.getTexture(name);
|
AbstractTexture texture = Minecraft.getInstance().getTextureManager().getTexture(name);
|
||||||
|
|
||||||
if (texture instanceof TextureAtlas)
|
if (texture instanceof TextureAtlas)
|
||||||
return (TextureAtlas) texture;
|
return (TextureAtlas) texture;
|
||||||
|
|
|
@ -14,6 +14,7 @@ import com.jozufozu.flywheel.backend.material.MaterialManagerImpl;
|
||||||
import com.jozufozu.flywheel.backend.state.RenderLayer;
|
import com.jozufozu.flywheel.backend.state.RenderLayer;
|
||||||
import com.jozufozu.flywheel.core.Contexts;
|
import com.jozufozu.flywheel.core.Contexts;
|
||||||
import com.jozufozu.flywheel.event.ReloadRenderersEvent;
|
import com.jozufozu.flywheel.event.ReloadRenderersEvent;
|
||||||
|
import com.jozufozu.flywheel.mixin.LevelRendererAccessor;
|
||||||
import com.jozufozu.flywheel.util.Lazy;
|
import com.jozufozu.flywheel.util.Lazy;
|
||||||
import com.jozufozu.flywheel.util.Pair;
|
import com.jozufozu.flywheel.util.Pair;
|
||||||
|
|
||||||
|
@ -66,7 +67,7 @@ public class CrumblingRenderer {
|
||||||
|
|
||||||
InstanceManager<BlockEntity> renderer = state.instanceManager;
|
InstanceManager<BlockEntity> renderer = state.instanceManager;
|
||||||
|
|
||||||
TextureManager textureManager = Minecraft.getInstance().textureManager;
|
TextureManager textureManager = Minecraft.getInstance().getTextureManager();
|
||||||
Camera info = Minecraft.getInstance().gameRenderer.getMainCamera();
|
Camera info = Minecraft.getInstance().gameRenderer.getMainCamera();
|
||||||
|
|
||||||
MaterialManagerImpl<CrumblingProgram> materials = state.materialManager;
|
MaterialManagerImpl<CrumblingProgram> materials = state.materialManager;
|
||||||
|
@ -102,11 +103,11 @@ public class CrumblingRenderer {
|
||||||
* Associate each breaking stage with a list of all tile entities at that stage.
|
* Associate each breaking stage with a list of all tile entities at that stage.
|
||||||
*/
|
*/
|
||||||
private static Int2ObjectMap<List<BlockEntity>> getActiveStageTiles(ClientLevel world) {
|
private static Int2ObjectMap<List<BlockEntity>> getActiveStageTiles(ClientLevel world) {
|
||||||
Long2ObjectMap<SortedSet<BlockDestructionProgress>> breakingProgressions = Minecraft.getInstance().levelRenderer.destructionProgress;
|
|
||||||
|
|
||||||
Int2ObjectMap<List<BlockEntity>> breakingEntities = new Int2ObjectArrayMap<>();
|
Int2ObjectMap<List<BlockEntity>> breakingEntities = new Int2ObjectArrayMap<>();
|
||||||
|
|
||||||
for (Long2ObjectMap.Entry<SortedSet<BlockDestructionProgress>> entry : breakingProgressions.long2ObjectEntrySet()) {
|
for (Long2ObjectMap.Entry<SortedSet<BlockDestructionProgress>> entry : ((LevelRendererAccessor) Minecraft.getInstance().levelRenderer).getDestructionProgress()
|
||||||
|
.long2ObjectEntrySet()) {
|
||||||
BlockPos breakingPos = BlockPos.of(entry.getLongKey());
|
BlockPos breakingPos = BlockPos.of(entry.getLongKey());
|
||||||
|
|
||||||
SortedSet<BlockDestructionProgress> progresses = entry.getValue();
|
SortedSet<BlockDestructionProgress> progresses = entry.getValue();
|
||||||
|
|
|
@ -33,7 +33,7 @@ public class WorldProgram extends ExtensibleGlProgram {
|
||||||
|
|
||||||
protected void registerSamplers() {
|
protected void registerSamplers() {
|
||||||
uBlockAtlas = setSamplerBinding("uBlockAtlas", 0);
|
uBlockAtlas = setSamplerBinding("uBlockAtlas", 0);
|
||||||
uLightMap = setSamplerBinding("uLightMap", 2);
|
uLightMap = setSamplerBinding("uLightMap", 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void uploadViewProjection(Matrix4f viewProjection) {
|
public void uploadViewProjection(Matrix4f viewProjection) {
|
||||||
|
|
|
@ -20,6 +20,7 @@ import net.minecraft.util.ClassInstanceMultiMap;
|
||||||
@Mixin(LevelRenderer.class)
|
@Mixin(LevelRenderer.class)
|
||||||
public class CancelEntityRenderMixin {
|
public class CancelEntityRenderMixin {
|
||||||
|
|
||||||
|
// TODO: Don't use redirect
|
||||||
@Group(name = "entityFilter", min = 1, max = 1)
|
@Group(name = "entityFilter", min = 1, max = 1)
|
||||||
@Redirect(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientLevel;entitiesForRendering()Ljava/lang/Iterable;"))
|
@Redirect(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientLevel;entitiesForRendering()Ljava/lang/Iterable;"))
|
||||||
private Iterable<Entity> filterEntities(ClientLevel world) {
|
private Iterable<Entity> filterEntities(ClientLevel world) {
|
||||||
|
@ -37,19 +38,19 @@ public class CancelEntityRenderMixin {
|
||||||
return entities;
|
return entities;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Group(name = "entityFilter")
|
// @Group(name = "entityFilter")
|
||||||
@Redirect(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/ClassInstanceMultiMap;iterator()Ljava/util/Iterator;"))
|
// @Redirect(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/ClassInstanceMultiMap;iterator()Ljava/util/Iterator;"))
|
||||||
private Iterator<Entity> filterEntitiesOF(ClassInstanceMultiMap<Entity> classInheritanceMultiMap) {
|
// private Iterator<Entity> filterEntitiesOF(ClassInstanceMultiMap<Entity> classInheritanceMultiMap) {
|
||||||
if (Backend.getInstance()
|
// if (Backend.getInstance()
|
||||||
.canUseInstancing()) {
|
// .canUseInstancing()) {
|
||||||
|
//
|
||||||
ArrayList<Entity> filtered = Lists.newArrayList(classInheritanceMultiMap);
|
// ArrayList<Entity> filtered = Lists.newArrayList(classInheritanceMultiMap);
|
||||||
|
//
|
||||||
InstancedRenderRegistry r = InstancedRenderRegistry.getInstance();
|
// InstancedRenderRegistry r = InstancedRenderRegistry.getInstance();
|
||||||
filtered.removeIf(r::shouldSkipRender);
|
// filtered.removeIf(r::shouldSkipRender);
|
||||||
|
//
|
||||||
return filtered.iterator();
|
// return filtered.iterator();
|
||||||
}
|
// }
|
||||||
return classInheritanceMultiMap.iterator();
|
// return classInheritanceMultiMap.iterator();
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,10 +12,7 @@ import com.jozufozu.flywheel.backend.instancing.InstancedRenderRegistry;
|
||||||
|
|
||||||
import net.minecraft.client.renderer.chunk.ChunkRenderDispatcher;
|
import net.minecraft.client.renderer.chunk.ChunkRenderDispatcher;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
|
||||||
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
|
||||||
@Mixin(ChunkRenderDispatcher.CompiledChunk.class)
|
@Mixin(ChunkRenderDispatcher.CompiledChunk.class)
|
||||||
public class CancelTileEntityRenderMixin {
|
public class CancelTileEntityRenderMixin {
|
||||||
|
|
||||||
|
|
|
@ -1,94 +0,0 @@
|
||||||
package com.jozufozu.flywheel.mixin;
|
|
||||||
|
|
||||||
import org.spongepowered.asm.mixin.Final;
|
|
||||||
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.Redirect;
|
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
|
||||||
|
|
||||||
import com.jozufozu.flywheel.backend.Backend;
|
|
||||||
|
|
||||||
import net.minecraft.client.multiplayer.ClientChunkCache;
|
|
||||||
import net.minecraft.client.multiplayer.ClientLevel;
|
|
||||||
import net.minecraft.nbt.CompoundTag;
|
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
|
||||||
import net.minecraft.world.level.chunk.ChunkBiomeContainer;
|
|
||||||
import net.minecraft.world.level.chunk.ChunkSource;
|
|
||||||
import net.minecraft.world.level.chunk.LevelChunk;
|
|
||||||
import net.minecraft.world.level.chunk.ChunkStatus;
|
|
||||||
import net.minecraft.world.level.chunk.ChunkAccess;
|
|
||||||
|
|
||||||
import java.util.BitSet;
|
|
||||||
|
|
||||||
@Mixin(ClientChunkCache.class)
|
|
||||||
public abstract class FastChunkProviderMixin extends ChunkSource {
|
|
||||||
|
|
||||||
@Shadow
|
|
||||||
@Final
|
|
||||||
private ClientLevel level;
|
|
||||||
@Unique
|
|
||||||
private int lastX;
|
|
||||||
@Unique
|
|
||||||
private int lastZ;
|
|
||||||
|
|
||||||
@Unique
|
|
||||||
private ChunkAccess lastChunk;
|
|
||||||
|
|
||||||
@Inject(method = "getChunk",
|
|
||||||
at = @At("HEAD"),
|
|
||||||
cancellable = true)
|
|
||||||
public void returnCachedChunk(int x, int z, ChunkStatus status, boolean create, CallbackInfoReturnable<ChunkAccess> cir) {
|
|
||||||
if (Backend.getInstance().chunkCachingEnabled && status.isOrAfter(ChunkStatus.FULL)) {
|
|
||||||
synchronized (level) {
|
|
||||||
if (lastChunk != null && x == lastX && z == lastZ) {
|
|
||||||
cir.setReturnValue(lastChunk);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject(method = "getChunk",
|
|
||||||
at = @At("RETURN"))
|
|
||||||
public void cacheChunk(int x, int z, ChunkStatus status, boolean create, CallbackInfoReturnable<ChunkAccess> cir) {
|
|
||||||
if (Backend.getInstance().chunkCachingEnabled && status.isOrAfter(ChunkStatus.FULL)) {
|
|
||||||
synchronized (level) {
|
|
||||||
lastChunk = cir.getReturnValue();
|
|
||||||
lastX = x;
|
|
||||||
lastZ = z;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject(method = "drop", at = @At("HEAD"))
|
|
||||||
public void invalidateOnDrop(int x, int z, CallbackInfo ci) {
|
|
||||||
if (Backend.getInstance().chunkCachingEnabled) {
|
|
||||||
synchronized (level) {
|
|
||||||
if (x == lastX && z == lastZ) lastChunk = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject(method = "replaceWithPacketData", at = @At("HEAD"))
|
|
||||||
public void invalidateOnPacket(int x, int z, ChunkBiomeContainer p_171618_, FriendlyByteBuf p_171619_, CompoundTag p_171620_, BitSet p_171621_, CallbackInfoReturnable<LevelChunk> cir) {
|
|
||||||
if (Backend.getInstance().chunkCachingEnabled) {
|
|
||||||
synchronized (level) {
|
|
||||||
if (x == lastX && z == lastZ) lastChunk = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Redirect(method = "isTickingChunk", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientChunkProvider;hasChunk(II)Z"))
|
|
||||||
public boolean redirectTicking(ClientChunkCache clientChunkProvider, int x, int z) {
|
|
||||||
if (Backend.getInstance().chunkCachingEnabled) {
|
|
||||||
synchronized (level) {
|
|
||||||
if (lastChunk != null && x == lastX && z == lastZ) return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return clientChunkProvider.hasChunk(x, z);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -9,26 +9,24 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
import com.jozufozu.flywheel.backend.instancing.InstancedRenderDispatcher;
|
import com.jozufozu.flywheel.backend.instancing.InstancedRenderDispatcher;
|
||||||
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
import net.minecraft.world.level.chunk.LevelChunk;
|
import net.minecraft.world.level.chunk.LevelChunk;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
@OnlyIn(Dist.CLIENT)
|
||||||
@Mixin(value = LevelChunk.class, priority = 1100) // this and create.mixins.json have high priority to load after Performant
|
@Mixin(LevelChunk.class)
|
||||||
public class TileWorldHookMixin {
|
public class InstanceAddMixin {
|
||||||
|
|
||||||
@Shadow
|
@Shadow
|
||||||
@Final
|
@Final
|
||||||
Level level;
|
Level level;
|
||||||
|
|
||||||
@Inject(at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/world/level/block/entity/BlockEntity;clearRemoved()V"),
|
@Inject(method = "setBlockEntity",
|
||||||
method = "setBlockEntity")
|
at = @At(value = "INVOKE_ASSIGN", target = "Ljava/util/Map;put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"))
|
||||||
private void onAddTile(BlockEntity te, CallbackInfo ci) {
|
private void tileAdded(BlockEntity be, CallbackInfo ci) {
|
||||||
if (level.isClientSide) {
|
if (level.isClientSide) InstancedRenderDispatcher.getTiles(this.level)
|
||||||
InstancedRenderDispatcher.getTiles(level)
|
.add(be);
|
||||||
.queueAdd(te);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -15,15 +15,25 @@ import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
|
||||||
@Mixin(BlockEntity.class)
|
@Mixin(BlockEntity.class)
|
||||||
public class TileRemoveMixin {
|
public class InstanceRemoveMixin {
|
||||||
|
|
||||||
@Shadow
|
@Shadow
|
||||||
@Nullable
|
@Nullable
|
||||||
protected Level level;
|
protected Level level;
|
||||||
|
|
||||||
@Inject(at = @At("TAIL"), method = "setRemoved")
|
@Inject(at = @At("TAIL"), method = "setRemoved")
|
||||||
private void onRemove(CallbackInfo ci) {
|
private void removeInstance(CallbackInfo ci) {
|
||||||
if (level instanceof ClientLevel) InstancedRenderDispatcher.getTiles(this.level)
|
if (level instanceof ClientLevel) InstancedRenderDispatcher.getTiles(this.level)
|
||||||
.remove((BlockEntity) (Object) this);
|
.remove((BlockEntity) (Object) this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * Don't do this.
|
||||||
|
// * It can cause infinite loops if an instance class tries to access another tile entity in its constructor.
|
||||||
|
// */
|
||||||
|
// @Inject(at = @At("TAIL"), method = "clearRemoved")
|
||||||
|
// private void addInstance(CallbackInfo ci) {
|
||||||
|
// if (level.isClientSide) InstancedRenderDispatcher.getTiles(this.level)
|
||||||
|
// .add((BlockEntity) (Object) this);
|
||||||
|
// }
|
||||||
}
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
package com.jozufozu.flywheel.mixin;
|
||||||
|
|
||||||
|
import java.util.SortedSet;
|
||||||
|
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||||
|
|
||||||
|
import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
|
||||||
|
import net.minecraft.client.renderer.LevelRenderer;
|
||||||
|
import net.minecraft.server.level.BlockDestructionProgress;
|
||||||
|
|
||||||
|
@Mixin(LevelRenderer.class)
|
||||||
|
public interface LevelRendererAccessor {
|
||||||
|
@Accessor
|
||||||
|
Long2ObjectMap<SortedSet<BlockDestructionProgress>> getDestructionProgress();
|
||||||
|
}
|
|
@ -2,12 +2,6 @@
|
||||||
# Don't jitter when game is paused
|
# Don't jitter when game is paused
|
||||||
public net.minecraft.client.Minecraft f_91013_ #renderPartialTicksPaused
|
public net.minecraft.client.Minecraft f_91013_ #renderPartialTicksPaused
|
||||||
|
|
||||||
# Expose fog state for use in flywheel shaders
|
|
||||||
public com.mojang.blaze3d.platform.GlStateManager$FogState
|
|
||||||
public com.mojang.blaze3d.platform.GlStateManager f_84068_ #FOG
|
|
||||||
public com.mojang.blaze3d.platform.GlStateManager$BooleanState
|
|
||||||
public com.mojang.blaze3d.platform.GlStateManager$BooleanState f_84586_ #field_179201_b
|
|
||||||
|
|
||||||
# For uploading matrices as vertex attributes.
|
# For uploading matrices as vertex attributes.
|
||||||
public com.mojang.math.Matrix3f f_8134_ #a00
|
public com.mojang.math.Matrix3f f_8134_ #a00
|
||||||
public com.mojang.math.Matrix3f f_8135_ #a01
|
public com.mojang.math.Matrix3f f_8135_ #a01
|
||||||
|
@ -35,6 +29,3 @@ public com.mojang.math.Matrix4f f_27615_ #a30
|
||||||
public com.mojang.math.Matrix4f f_27616_ #a31
|
public com.mojang.math.Matrix4f f_27616_ #a31
|
||||||
public com.mojang.math.Matrix4f f_27617_ #a32
|
public com.mojang.math.Matrix4f f_27617_ #a32
|
||||||
public com.mojang.math.Matrix4f f_27618_ #a33
|
public com.mojang.math.Matrix4f f_27618_ #a33
|
||||||
|
|
||||||
# For fancy breaking overlay rendering
|
|
||||||
public net.minecraft.client.renderer.LevelRenderer f_109409_ #blockBreakingProgressions
|
|
|
@ -10,15 +10,15 @@
|
||||||
"FixFabulousDepthMixin",
|
"FixFabulousDepthMixin",
|
||||||
"RenderHooksMixin",
|
"RenderHooksMixin",
|
||||||
"ShaderCloseMixin",
|
"ShaderCloseMixin",
|
||||||
"TileRemoveMixin",
|
|
||||||
"TileWorldHookMixin",
|
|
||||||
"atlas.AtlasDataMixin",
|
"atlas.AtlasDataMixin",
|
||||||
"atlas.SheetDataAccessor",
|
"atlas.SheetDataAccessor",
|
||||||
"light.LightUpdateMixin",
|
"light.LightUpdateMixin",
|
||||||
"light.NetworkLightUpdateMixin",
|
"light.NetworkLightUpdateMixin",
|
||||||
"FastChunkProviderMixin"
|
"LevelRendererAccessor",
|
||||||
|
"InstanceAddMixin",
|
||||||
|
"InstanceRemoveMixin"
|
||||||
],
|
],
|
||||||
"injectors": {
|
"injectors": {
|
||||||
"defaultRequire": 0
|
"defaultRequire": 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue