aboutsummaryrefslogtreecommitdiff
path: root/forge/src/main/java
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2023-06-08 14:54:28 +0800
committershedaniel <daniel@shedaniel.me>2023-06-08 14:54:28 +0800
commita5c727c6f21d8c6dcedd51b0f66f209027580375 (patch)
tree8ad839e55cfc2209c71a8c70492609092c63610e /forge/src/main/java
parente0031d020f0a1d76cd971b45dffa8b6864b2c5d8 (diff)
downloadRoughlyEnoughItems-a5c727c6f21d8c6dcedd51b0f66f209027580375.tar.gz
RoughlyEnoughItems-a5c727c6f21d8c6dcedd51b0f66f209027580375.tar.bz2
RoughlyEnoughItems-a5c727c6f21d8c6dcedd51b0f66f209027580375.zip
Update to 1.20 and support Forge
Diffstat (limited to 'forge/src/main/java')
-rw-r--r--forge/src/main/java/me/shedaniel/rei/impl/client/CodepointMapWrapper.java69
-rw-r--r--forge/src/main/java/me/shedaniel/rei/impl/client/gui/forge/ScreenOverlayImplForge.java17
-rw-r--r--forge/src/main/java/me/shedaniel/rei/mixin/forge/MixinEffectRenderingInventoryScreen.java2
-rw-r--r--forge/src/main/java/me/shedaniel/rei/mixin/forge/MixinFontSet.java10
4 files changed, 88 insertions, 10 deletions
diff --git a/forge/src/main/java/me/shedaniel/rei/impl/client/CodepointMapWrapper.java b/forge/src/main/java/me/shedaniel/rei/impl/client/CodepointMapWrapper.java
new file mode 100644
index 000000000..2362d48da
--- /dev/null
+++ b/forge/src/main/java/me/shedaniel/rei/impl/client/CodepointMapWrapper.java
@@ -0,0 +1,69 @@
+package me.shedaniel.rei.impl.client;
+
+import it.unimi.dsi.fastutil.ints.IntSet;
+import net.minecraft.client.gui.font.CodepointMap;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.function.IntFunction;
+
+public class CodepointMapWrapper<T> extends CodepointMap<T> {
+ private final CodepointMap<T> delegate;
+ protected transient IntSet keys;
+
+ public CodepointMapWrapper(CodepointMap<T> delegate) {
+ super(delegate.blockConstructor, i -> delegate.blockMap);
+ this.empty = delegate.empty;
+ this.blockMap = delegate.blockMap;
+ this.delegate = delegate;
+ }
+
+ @Override
+ public void clear() {
+ synchronized (this) {
+ delegate.clear();
+ }
+ }
+
+ @Nullable
+ @Override
+ public T put(int i, T object) {
+ synchronized (this) {
+ return delegate.put(i, object);
+ }
+ }
+
+ @Nullable
+ @Override
+ public T get(int i) {
+ synchronized (this) {
+ return delegate.get(i);
+ }
+ }
+
+ @Override
+ public T computeIfAbsent(int i, IntFunction<T> intFunction) {
+ synchronized (this) {
+ return delegate.computeIfAbsent(i, intFunction);
+ }
+ }
+
+ @Nullable
+ @Override
+ public T remove(int i) {
+ synchronized (this) {
+ return delegate.remove(i);
+ }
+ }
+
+ @Override
+ public void forEach(Output<T> arg) {
+ synchronized (this) {
+ delegate.forEach(arg);
+ }
+ }
+
+ @Override
+ public IntSet keySet() {
+ return delegate.keySet();
+ }
+}
diff --git a/forge/src/main/java/me/shedaniel/rei/impl/client/gui/forge/ScreenOverlayImplForge.java b/forge/src/main/java/me/shedaniel/rei/impl/client/gui/forge/ScreenOverlayImplForge.java
index e6f299510..e8937ca26 100644
--- a/forge/src/main/java/me/shedaniel/rei/impl/client/gui/forge/ScreenOverlayImplForge.java
+++ b/forge/src/main/java/me/shedaniel/rei/impl/client/gui/forge/ScreenOverlayImplForge.java
@@ -23,12 +23,14 @@
package me.shedaniel.rei.impl.client.gui.forge;
-import com.mojang.blaze3d.vertex.PoseStack;
import me.shedaniel.rei.api.client.gui.widgets.Tooltip;
import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes;
import me.shedaniel.rei.api.common.util.CollectionUtils;
import me.shedaniel.rei.impl.client.gui.ScreenOverlayImpl;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Font;
+import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent;
import net.minecraft.client.gui.screens.inventory.tooltip.DefaultTooltipPositioner;
@@ -39,6 +41,7 @@ import net.minecraftforge.client.ForgeHooksClient;
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
public class ScreenOverlayImplForge extends ScreenOverlayImpl {
@Override
@@ -47,7 +50,7 @@ public class ScreenOverlayImplForge extends ScreenOverlayImpl {
EntryStack<?> stack = tooltip.getContextStack();
ItemStack itemStack = stack.getType() == VanillaEntryTypes.ITEM ? stack.castValue() : ItemStack.EMPTY;
List<Component> texts = CollectionUtils.filterAndMap(tooltip.entries(), Tooltip.Entry::isText, Tooltip.Entry::getAsText);
- List<ClientTooltipComponent> components = ForgeHooksClient.gatherTooltipComponents(itemStack, texts, mouseX, screen.width, screen.height, null, screen.getMinecraft().font);
+ List<ClientTooltipComponent> components = ForgeHooksClient.gatherTooltipComponents(itemStack, texts, Optional.empty(), mouseX, screen.width, screen.height, screen.getMinecraft().font);
components = new ArrayList<>(components);
for (Tooltip.Entry entry : tooltip.entries()) {
if (!entry.isText()) {
@@ -61,9 +64,13 @@ public class ScreenOverlayImplForge extends ScreenOverlayImpl {
components.add(1, ClientTooltipComponent.create(component));
}
}
- screen.tooltipStack = itemStack;
- screen.renderTooltipInternal(matrices, components, mouseX, mouseY, DefaultTooltipPositioner.INSTANCE);
- screen.tooltipStack = ItemStack.EMPTY;
+ Font font = Minecraft.getInstance().font;
+ if (!itemStack.isEmpty()) {
+ font = ForgeHooksClient.getTooltipFont(itemStack, font);
+ }
+ graphics.tooltipStack = itemStack;
+ graphics.renderTooltipInternal(font, components, mouseX, mouseY, DefaultTooltipPositioner.INSTANCE);
+ graphics.tooltipStack = ItemStack.EMPTY;
graphics.pose().popPose();
}
}
diff --git a/forge/src/main/java/me/shedaniel/rei/mixin/forge/MixinEffectRenderingInventoryScreen.java b/forge/src/main/java/me/shedaniel/rei/mixin/forge/MixinEffectRenderingInventoryScreen.java
index b3f1b9d58..db426f893 100644
--- a/forge/src/main/java/me/shedaniel/rei/mixin/forge/MixinEffectRenderingInventoryScreen.java
+++ b/forge/src/main/java/me/shedaniel/rei/mixin/forge/MixinEffectRenderingInventoryScreen.java
@@ -56,7 +56,7 @@ public abstract class MixinEffectRenderingInventoryScreen extends AbstractContai
@ModifyVariable(method = "renderEffects",
at = @At(value = "INVOKE",
- target = "Lnet/minecraft/client/gui/screens/inventory/EffectRenderingInventoryScreen;renderBackgrounds(Lcom/mojang/blaze3d/vertex/PoseStack;IILjava/lang/Iterable;Z)V",
+ target = "Lnet/minecraft/client/gui/screens/inventory/EffectRenderingInventoryScreen;renderBackgrounds(Lnet/minecraft/client/gui/GuiGraphics;IILjava/lang/Iterable;Z)V",
ordinal = 0),
ordinal = 0) // 1st bool
public boolean modifyBl(boolean bl) {
diff --git a/forge/src/main/java/me/shedaniel/rei/mixin/forge/MixinFontSet.java b/forge/src/main/java/me/shedaniel/rei/mixin/forge/MixinFontSet.java
index 9dee7c9fb..4d0adc4fd 100644
--- a/forge/src/main/java/me/shedaniel/rei/mixin/forge/MixinFontSet.java
+++ b/forge/src/main/java/me/shedaniel/rei/mixin/forge/MixinFontSet.java
@@ -27,6 +27,8 @@ import com.mojang.blaze3d.font.GlyphInfo;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectMaps;
import it.unimi.dsi.fastutil.ints.IntList;
+import me.shedaniel.rei.impl.client.CodepointMapWrapper;
+import net.minecraft.client.gui.font.CodepointMap;
import net.minecraft.client.gui.font.FontSet;
import net.minecraft.client.gui.font.FontTexture;
import net.minecraft.client.gui.font.glyphs.BakedGlyph;
@@ -45,15 +47,15 @@ import java.util.List;
@Mixin(FontSet.class)
public class MixinFontSet {
- @Shadow @Mutable @Final private Int2ObjectMap<BakedGlyph> glyphs;
- @Shadow @Mutable @Final private Int2ObjectMap<GlyphInfo> glyphInfos;
+ @Shadow @Mutable @Final private CodepointMap<BakedGlyph> glyphs;
+ @Shadow @Mutable @Final private CodepointMap<?> glyphInfos;
@Shadow @Mutable @Final private Int2ObjectMap<IntList> glyphsByWidth;
@Shadow @Mutable @Final private List<FontTexture> textures;
@Inject(method = "<init>", at = @At("RETURN"))
private void init(TextureManager textureManager, ResourceLocation id, CallbackInfo ci) {
- this.glyphs = Int2ObjectMaps.synchronize(this.glyphs);
- this.glyphInfos = Int2ObjectMaps.synchronize(this.glyphInfos);
+ this.glyphs = new CodepointMapWrapper<>(this.glyphs);
+ this.glyphInfos = new CodepointMapWrapper<>(this.glyphInfos);
this.glyphsByWidth = Int2ObjectMaps.synchronize(this.glyphsByWidth);
this.textures = Collections.synchronizedList(this.textures);
}