Skip to content

Commit 618698a

Browse files
committed
Merge remote-tracking branch 'origin/1.18' into 1.19.2
2 parents cb22591 + b610a21 commit 618698a

File tree

5 files changed

+119
-95
lines changed

5 files changed

+119
-95
lines changed

common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/edge_chunk_not_saved/ChunkManagerMixin.java

Lines changed: 0 additions & 33 deletions
This file was deleted.

common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/faster_item_rendering/ItemRendererMixin.java

Lines changed: 12 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -2,55 +2,33 @@
22

33
import com.mojang.blaze3d.vertex.PoseStack;
44
import com.mojang.blaze3d.vertex.VertexConsumer;
5-
import net.minecraft.client.color.item.ItemColors;
65
import net.minecraft.client.renderer.MultiBufferSource;
7-
import net.minecraft.client.renderer.block.model.BakedQuad;
86
import net.minecraft.client.renderer.block.model.ItemTransform;
97
import net.minecraft.client.renderer.block.model.ItemTransforms;
108
import net.minecraft.client.renderer.entity.ItemRenderer;
119
import net.minecraft.client.resources.model.BakedModel;
1210
import net.minecraft.client.resources.model.SimpleBakedModel;
13-
import net.minecraft.core.Direction;
14-
import net.minecraft.util.RandomSource;
1511
import net.minecraft.world.item.BlockItem;
1612
import net.minecraft.world.item.ItemStack;
1713
import org.embeddedt.modernfix.render.FastItemRenderType;
1814
import org.embeddedt.modernfix.render.RenderState;
19-
import org.spongepowered.asm.mixin.Final;
15+
import org.embeddedt.modernfix.render.SimpleItemModelView;
2016
import org.spongepowered.asm.mixin.Mixin;
21-
import org.spongepowered.asm.mixin.Shadow;
2217
import org.spongepowered.asm.mixin.injection.At;
2318
import org.spongepowered.asm.mixin.injection.Inject;
19+
import org.spongepowered.asm.mixin.injection.ModifyVariable;
2420
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
2521

26-
import java.util.List;
27-
28-
@Mixin(ItemRenderer.class)
22+
@Mixin(value = ItemRenderer.class, priority = 600)
2923
public abstract class ItemRendererMixin {
30-
@Shadow @Final private ItemColors itemColors;
31-
32-
private final RandomSource dummyRandom = RandomSource.createNewThreadLocalInstance();
33-
34-
private static final float[] COLOR_MULTIPLIER = new float[]{1.0F, 1.0F, 1.0F, 1.0F};
35-
3624
private ItemTransforms.TransformType transformType;
25+
private final SimpleItemModelView modelView = new SimpleItemModelView();
3726

3827
@Inject(method = "render", at = @At("HEAD"))
3928
private void markRenderingType(ItemStack itemStack, ItemTransforms.TransformType transformType, boolean leftHand, PoseStack matrixStack, MultiBufferSource buffer, int combinedLight, int combinedOverlay, BakedModel model, CallbackInfo ci) {
4029
this.transformType = transformType;
4130
}
4231

43-
private static final Direction[] ITEM_DIRECTIONS = new Direction[] { Direction.SOUTH };
44-
private static final Direction[] BLOCK_DIRECTIONS = new Direction[] { Direction.UP, Direction.EAST, Direction.NORTH };
45-
46-
private boolean isCorrectDirectionForType(FastItemRenderType type, Direction direction) {
47-
if(type == FastItemRenderType.SIMPLE_ITEM)
48-
return direction == Direction.SOUTH;
49-
else {
50-
return direction == Direction.UP || direction == Direction.EAST || direction == Direction.NORTH;
51-
}
52-
}
53-
5432
/**
5533
* If a model
5634
* - is a vanilla item model (SimpleBakedModel),
@@ -59,8 +37,8 @@ private boolean isCorrectDirectionForType(FastItemRenderType type, Direction dir
5937
* we do not need to go through the process of rendering every quad. Just render the south ones (the ones facing the
6038
* camera).
6139
*/
62-
@Inject(method = "renderModelLists", at = @At("HEAD"), cancellable = true)
63-
private void fasterItemRender(BakedModel model, ItemStack stack, int combinedLight, int combinedOverlay, PoseStack matrixStack, VertexConsumer buffer, CallbackInfo ci) {
40+
@ModifyVariable(method = "renderModelLists", at = @At("HEAD"), index = 1, argsOnly = true)
41+
private BakedModel useSimpleWrappedItemModel(BakedModel model, BakedModel arg, ItemStack stack, int combinedLight, int combinedOverlay, PoseStack matrixStack, VertexConsumer buffer) {
6442
if(!RenderState.IS_RENDERING_LEVEL && !stack.isEmpty() && model.getClass() == SimpleBakedModel.class && transformType == ItemTransforms.TransformType.GUI) {
6543
FastItemRenderType type;
6644
ItemTransform transform = model.getTransforms().gui;
@@ -69,43 +47,17 @@ private void fasterItemRender(BakedModel model, ItemStack stack, int combinedLig
6947
else if(stack.getItem() instanceof BlockItem && isBlockTransforms(transform))
7048
type = FastItemRenderType.SIMPLE_BLOCK;
7149
else
72-
return;
73-
ci.cancel();
74-
PoseStack.Pose pose = matrixStack.last();
75-
int[] combinedLights = new int[] {combinedLight, combinedLight, combinedLight, combinedLight};
76-
Direction[] directions = type == FastItemRenderType.SIMPLE_ITEM ? ITEM_DIRECTIONS : BLOCK_DIRECTIONS;
77-
for(Direction direction : directions) {
78-
List<BakedQuad> culledFaces = model.getQuads(null, direction, dummyRandom);
79-
/* check size to avoid instantiating iterator when the list is empty */
80-
if(culledFaces.size() > 0) {
81-
for(BakedQuad quad : culledFaces) {
82-
render2dItemFace(quad, stack, buffer, pose, combinedLights, combinedOverlay);
83-
}
84-
}
85-
}
86-
List<BakedQuad> unculledFaces = model.getQuads(null, null, dummyRandom);
87-
for(BakedQuad quad : unculledFaces) {
88-
if(isCorrectDirectionForType(type, quad.getDirection()))
89-
render2dItemFace(quad, stack, buffer, pose, combinedLights, combinedOverlay);
90-
}
91-
}
50+
return model;
51+
modelView.setItem(model);
52+
modelView.setType(type);
53+
return modelView;
54+
} else
55+
return model;
9256
}
9357

9458
private boolean isBlockTransforms(ItemTransform transform) {
9559
return transform.rotation.x() == 30f
9660
&& transform.rotation.y() == 225f
9761
&& transform.rotation.z() == 0f;
9862
}
99-
100-
private void render2dItemFace(BakedQuad quad, ItemStack stack, VertexConsumer buffer, PoseStack.Pose pose, int[] combinedLights, int combinedOverlay) {
101-
int i = -1;
102-
if (quad.isTinted()) {
103-
i = this.itemColors.getColor(stack, quad.getTintIndex());
104-
}
105-
106-
float f = (float)(i >> 16 & 255) / 255.0F;
107-
float f1 = (float)(i >> 8 & 255) / 255.0F;
108-
float f2 = (float)(i & 255) / 255.0F;
109-
buffer.putBulkData(pose, quad, COLOR_MULTIPLIER, f, f1, f2, combinedLights, combinedOverlay, true);
110-
}
11163
}

common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ public static String sanitize(String mixinClassName) {
5959
private final Set<String> mixinOptions = new ObjectOpenHashSet<>();
6060
private final Map<String, String> mixinsMissingMods = new Object2ObjectOpenHashMap<>();
6161

62+
public static boolean isFabric = false;
63+
6264
public Map<String, String> getPermanentlyDisabledMixins() {
6365
return mixinsMissingMods;
6466
}
@@ -71,6 +73,8 @@ private void scanForAndBuildMixinOptions() {
7173
if(stream == null)
7274
continue;
7375
try(Reader reader = new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8))) {
76+
if(configFile.contains("fabric"))
77+
isFabric = true;
7478
JsonObject configObject = (JsonObject)new JsonParser().parse(reader);
7579
JsonArray mixinList = configObject.getAsJsonArray("mixins");
7680
String packageName = configObject.get("package").getAsString().replace('.', '/');
@@ -178,15 +182,20 @@ private ModernFixEarlyConfig(File file) {
178182
disableIfModPresent("mixin.perf.thread_priorities", "smoothboot");
179183
disableIfModPresent("mixin.perf.boost_worker_count", "smoothboot");
180184
disableIfModPresent("mixin.perf.async_jei", "modernui");
181-
disableIfModPresent("mixin.perf.compress_biome_container", "chocolate", "betterendforge");
185+
disableIfModPresent("mixin.perf.compress_biome_container", "chocolate", "betterendforge" ,"skyblockbuilder");
182186
disableIfModPresent("mixin.bugfix.mc218112", "performant");
183187
disableIfModPresent("mixin.bugfix.remove_block_chunkloading", "performant");
184188
disableIfModPresent("mixin.bugfix.paper_chunk_patches", "c2me");
189+
// DimThread makes changes to the server chunk manager (understandably), C2ME probably does the same
190+
disableIfModPresent("mixin.bugfix.chunk_deadlock", "c2me", "dimthread");
185191
disableIfModPresent("mixin.perf.reuse_datapacks", "tac");
186192
disableIfModPresent("mixin.launch.class_search_cache", "optifine");
187193
disableIfModPresent("mixin.perf.faster_texture_stitching", "optifine");
188194
disableIfModPresent("mixin.perf.datapack_reload_exceptions", "cyanide");
189195
disableIfModPresent("mixin.perf.faster_texture_loading", "stitch", "optifine", "changed");
196+
if(isFabric) {
197+
disableIfModPresent("mixin.bugfix.packet_leak", "memoryleakfix");
198+
}
190199
}
191200

192201
private void disableIfModPresent(String configName, String... ids) {
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package org.embeddedt.modernfix.render;
2+
3+
import com.google.common.collect.ImmutableList;
4+
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
5+
import net.minecraft.client.renderer.block.model.BakedQuad;
6+
import net.minecraft.client.renderer.block.model.ItemOverrides;
7+
import net.minecraft.client.renderer.block.model.ItemTransforms;
8+
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
9+
import net.minecraft.client.resources.model.BakedModel;
10+
import net.minecraft.core.Direction;
11+
import net.minecraft.util.RandomSource;
12+
import net.minecraft.world.level.block.state.BlockState;
13+
import org.jetbrains.annotations.Nullable;
14+
15+
import java.util.List;
16+
17+
/**
18+
* Wrapper class that presents a fake view of item models (only showing the simple front-facing quads), rather
19+
* than every quad.
20+
*/
21+
public class SimpleItemModelView implements BakedModel {
22+
private BakedModel wrappedItem;
23+
private FastItemRenderType type;
24+
25+
public void setItem(BakedModel model) {
26+
this.wrappedItem = model;
27+
}
28+
29+
public void setType(FastItemRenderType type) {
30+
this.type = type;
31+
}
32+
33+
private boolean isCorrectDirectionForType(Direction direction) {
34+
if(type == FastItemRenderType.SIMPLE_ITEM)
35+
return direction == Direction.SOUTH;
36+
else {
37+
return direction == Direction.UP || direction == Direction.EAST || direction == Direction.NORTH;
38+
}
39+
}
40+
41+
private final List<BakedQuad> nullQuadList = new ObjectArrayList<>();
42+
43+
@Override
44+
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, RandomSource rand) {
45+
if(side != null) {
46+
return isCorrectDirectionForType(side) ? wrappedItem.getQuads(state, side, rand) : ImmutableList.of();
47+
} else {
48+
nullQuadList.clear();
49+
List<BakedQuad> realList = wrappedItem.getQuads(state, null, rand);
50+
for(int i = 0; i < realList.size(); i++) {
51+
BakedQuad quad = realList.get(i);
52+
if(isCorrectDirectionForType(quad.getDirection())) {
53+
nullQuadList.add(quad);
54+
}
55+
}
56+
return nullQuadList;
57+
}
58+
}
59+
60+
@Override
61+
public boolean useAmbientOcclusion() {
62+
return wrappedItem.useAmbientOcclusion();
63+
}
64+
65+
@Override
66+
public boolean isGui3d() {
67+
return wrappedItem.isGui3d();
68+
}
69+
70+
@Override
71+
public boolean usesBlockLight() {
72+
return wrappedItem.usesBlockLight();
73+
}
74+
75+
@Override
76+
public boolean isCustomRenderer() {
77+
return wrappedItem.isCustomRenderer();
78+
}
79+
80+
@Override
81+
public TextureAtlasSprite getParticleIcon() {
82+
return wrappedItem.getParticleIcon();
83+
}
84+
85+
@Override
86+
public ItemTransforms getTransforms() {
87+
return wrappedItem.getTransforms();
88+
}
89+
90+
@Override
91+
public ItemOverrides getOverrides() {
92+
return wrappedItem.getOverrides();
93+
}
94+
}

common/src/main/java/org/embeddedt/modernfix/util/CanonizingStringMap.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,14 +141,16 @@ public int hashCode() {
141141
}
142142

143143
public static <T> CanonizingStringMap<T> deepCopy(CanonizingStringMap<T> inputMap, Function<T, T> deepCopier) {
144+
Objects.requireNonNull(deepCopier);
144145
Object2ObjectMap<String, T> copiedBackingMap;
145146
int size = inputMap.backingMap.size();
146147
if(size > GROWTH_THRESHOLD) {
147148
copiedBackingMap = new Object2ObjectOpenHashMap<>(size);
148149
} else
149150
copiedBackingMap = new Object2ObjectArrayMap<>(size);
150151
inputMap.backingMap.object2ObjectEntrySet().forEach(entry -> {
151-
copiedBackingMap.put(entry.getKey(), deepCopier.apply(entry.getValue()));
152+
if(entry.getKey() != null && entry.getValue() != null)
153+
copiedBackingMap.put(entry.getKey(), deepCopier.apply(entry.getValue()));
152154
});
153155
return new CanonizingStringMap<>(copiedBackingMap);
154156
}

0 commit comments

Comments
 (0)