diff options
9 files changed, 106 insertions, 28 deletions
diff --git a/fabric/src/main/resources/error_notifier.json b/fabric/src/main/resources/error_notifier.json index 132e07187..2049592bc 100644 --- a/fabric/src/main/resources/error_notifier.json +++ b/fabric/src/main/resources/error_notifier.json @@ -12,7 +12,7 @@ "type": "depends", "modId": "architectury", "modName": "Architectury API", - "versions": ">=9.0.0 <10.0.0", + "versions": ">=9.0.7 <10.0.0", "url": "https://www.curseforge.com/minecraft/mc-mods/architectury-api/files/all" }, { 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); } diff --git a/forge/src/main/resources/META-INF/accesstransformer.cfg b/forge/src/main/resources/META-INF/accesstransformer.cfg index 0b9eaa001..6653ebfee 100644 --- a/forge/src/main/resources/META-INF/accesstransformer.cfg +++ b/forge/src/main/resources/META-INF/accesstransformer.cfg @@ -29,8 +29,8 @@ public-f net.minecraft.client.gui.screens.inventory.AbstractContainerScreen f_97 protected net.minecraft.client.gui.screens.Screen m_6575_(Lnet/minecraft/client/Minecraft;II)V public net.minecraft.client.gui.screens.Screen m_142416_(Lnet/minecraft/client/gui/components/events/GuiEventListener;)Lnet/minecraft/client/gui/components/events/GuiEventListener; public net.minecraft.client.gui.screens.Screen m_169394_(Lnet/minecraft/client/gui/components/Renderable;)Lnet/minecraft/client/gui/components/Renderable; -public net.minecraft.client.gui.screens.Screen m_262809_(Lcom/mojang/blaze3d/vertex/PoseStack;Ljava/util/List;IILnet/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipPositioner;)V # renderTooltipInternal -public net.minecraft.client.gui.screens.Screen tooltipStack +public net.minecraft.client.gui.GuiGraphics m_280497_(Lnet/minecraft/client/gui/Font;Ljava/util/List;IILnet/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipPositioner;)V # renderTooltipInternal +public net.minecraft.client.gui.GuiGraphics tooltipStack public net.minecraft.client.renderer.RenderType m_173209_(Ljava/lang/String;Lcom/mojang/blaze3d/vertex/VertexFormat;Lcom/mojang/blaze3d/vertex/VertexFormat$Mode;ILnet/minecraft/client/renderer/RenderType$CompositeState;)Lnet/minecraft/client/renderer/RenderType$CompositeRenderType; public net.minecraft.client.renderer.RenderType$OutlineProperty public net.minecraft.client.renderer.RenderType$CompositeState @@ -41,4 +41,7 @@ public net.minecraft.world.item.crafting.SmithingTransformRecipe f_265888_ # bas public net.minecraft.world.item.crafting.SmithingTransformRecipe f_265907_ # addition public net.minecraft.world.item.crafting.SmithingTrimRecipe f_265958_ # template public net.minecraft.world.item.crafting.SmithingTrimRecipe f_266040_ # base -public net.minecraft.world.item.crafting.SmithingTrimRecipe f_266053_ # addition
\ No newline at end of file +public net.minecraft.world.item.crafting.SmithingTrimRecipe f_266053_ # addition +public-f net.minecraft.client.gui.font.CodepointMap f_283911_ # empty +public-f net.minecraft.client.gui.font.CodepointMap f_283938_ # blockMap +public-f net.minecraft.client.gui.font.CodepointMap f_283773_ # blockConstructor diff --git a/gradle.properties b/gradle.properties index 07bab4de4..556d1fc40 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,14 +1,14 @@ org.gradle.jvmargs=-Xmx6G base_version=12.0 unstable=false -supported_version=1.20-rc1 -minecraft_version=1.20-rc1 -forgeEnabled=false -forge_version=45.0.6 +supported_version=1.20 +minecraft_version=1.20 +forgeEnabled=true +forge_version=46.0.1 fabricloader_version=0.14.21 -cloth_config_version=11.0.98 -modmenu_version=6.1.0-rc.4 +cloth_config_version=11.0.99 +modmenu_version=7.0.0 fabric_api=0.83.0+1.20 -architectury_version=9.0.5 +architectury_version=9.0.7 api_exculde= #api_include=me.shedaniel.cloth:cloth-events,me.shedaniel.cloth:config-2,me.sargunvohra.mcmods:autoconfig1u,org.jetbrains:annotations,net.fabricmc.fabric-api:fabric diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/DefaultScreenOverlayRenderer.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/DefaultScreenOverlayRenderer.java index 55f840854..233e1e421 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/DefaultScreenOverlayRenderer.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/DefaultScreenOverlayRenderer.java @@ -71,13 +71,10 @@ public enum DefaultScreenOverlayRenderer implements OverlayRendererProvider { return; rendered[0] = 2; resetFocused(screen); - PoseStack poseStack = RenderSystem.getModelViewStack(); - poseStack.pushPose(); - poseStack.translate(-screen.leftPos, -screen.topPos, 0.0); - RenderSystem.applyModelViewMatrix(); + graphics.pose().pushPose(); + graphics.pose().translate(-screen.leftPos, -screen.topPos, 0.0); sink.lateRender(graphics, mouseX, mouseY, delta); - poseStack.popPose(); - RenderSystem.applyModelViewMatrix(); + graphics.pose().popPose(); resetFocused(screen); }); ClientGuiEvent.RENDER_POST.register(renderPost = (screen, graphics, mouseX, mouseY, delta) -> { diff --git a/settings.gradle b/settings.gradle index 857bbede0..937a949bf 100755 --- a/settings.gradle +++ b/settings.gradle @@ -13,4 +13,4 @@ include "api" include "default-plugin" include "runtime" include "fabric" -//include "forge" +include "forge" |
