diff options
| author | shedaniel <daniel@shedaniel.me> | 2020-01-16 16:10:19 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2020-01-16 16:10:19 +0800 |
| commit | b4be45e414504afb49910d766bebcd00f55b052b (patch) | |
| tree | 05c36b311681a120c0e3c85131531a159fbc59c2 /src/main/java/me/shedaniel/rei/impl | |
| parent | 01e8ede4fc41f6f113ae623044c3a4e98ed81eb4 (diff) | |
| download | RoughlyEnoughItems-b4be45e414504afb49910d766bebcd00f55b052b.tar.gz RoughlyEnoughItems-b4be45e414504afb49910d766bebcd00f55b052b.tar.bz2 RoughlyEnoughItems-b4be45e414504afb49910d766bebcd00f55b052b.zip | |
3.3.11
Diffstat (limited to 'src/main/java/me/shedaniel/rei/impl')
5 files changed, 124 insertions, 65 deletions
diff --git a/src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java b/src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java index db224ae61..1b3dae811 100644 --- a/src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java +++ b/src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java @@ -9,6 +9,7 @@ import com.google.common.collect.ImmutableList; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonElement; +import io.github.prospector.modmenu.ModMenu; import me.sargunvohra.mcmods.autoconfig1u.AutoConfig; import me.sargunvohra.mcmods.autoconfig1u.gui.ConfigScreenProvider; import me.sargunvohra.mcmods.autoconfig1u.gui.registry.GuiRegistry; @@ -23,7 +24,6 @@ import me.shedaniel.clothconfig2.api.Modifier; import me.shedaniel.clothconfig2.api.ModifierKeyCode; import me.shedaniel.clothconfig2.gui.entries.KeyCodeEntry; import me.shedaniel.clothconfig2.gui.entries.TooltipListEntry; -import me.shedaniel.math.api.Rectangle; import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.api.ConfigManager; import me.shedaniel.rei.api.ConfigObject; @@ -35,11 +35,12 @@ import me.shedaniel.rei.gui.ContainerScreenOverlay; import me.shedaniel.rei.gui.PreRecipeViewingScreen; import me.shedaniel.rei.gui.config.RecipeScreenType; import me.shedaniel.rei.gui.credits.CreditsScreen; -import me.shedaniel.rei.gui.widget.ButtonWidget; import me.shedaniel.rei.gui.widget.ReloadConfigButtonWidget; +import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.AbstractButtonWidget; import net.minecraft.client.gui.widget.AbstractPressableButtonWidget; import net.minecraft.client.resource.language.I18n; import net.minecraft.client.util.InputUtil; @@ -117,9 +118,9 @@ public class ConfigManagerImpl implements ConfigManager { int width = 220; return Collections.singletonList(new TooltipListEntry<RecipeScreenType>(i13n, null) { private RecipeScreenType type = getUnsafely(field, config, RecipeScreenType.UNSET); - private ButtonWidget buttonWidget = new ButtonWidget(new Rectangle(0, 0, 0, 20), "") { + private AbstractButtonWidget buttonWidget = new AbstractPressableButtonWidget(0, 0, 0, 20, "") { @Override - public void onPressed() { + public void onPress() { MinecraftClient.getInstance().openScreen(new PreRecipeViewingScreen(getScreen(), type, false, original -> { MinecraftClient.getInstance().openScreen(getScreen()); type = original ? RecipeScreenType.ORIGINAL : RecipeScreenType.VILLAGER; @@ -129,11 +130,11 @@ public class ConfigManagerImpl implements ConfigManager { @Override public void render(int mouseX, int mouseY, float delta) { - setText(I18n.translate("config.roughlyenoughitems.recipeScreenType.config", type.toString())); + setMessage(I18n.translate("config.roughlyenoughitems.recipeScreenType.config", type.toString())); super.render(mouseX, mouseY, delta); } }; - private List<ButtonWidget> children = ImmutableList.of(buttonWidget); + private List<Element> children = ImmutableList.of(buttonWidget); @Override public RecipeScreenType getValue() { @@ -159,10 +160,10 @@ public class ConfigManagerImpl implements ConfigManager { public void render(int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) { super.render(index, y, x, entryWidth, entryHeight, mouseX, mouseY, isSelected, delta); Window window = MinecraftClient.getInstance().getWindow(); - this.buttonWidget.enabled = this.isEditable(); - this.buttonWidget.getBounds().y = y; - this.buttonWidget.getBounds().x = x + entryWidth / 2 - width / 2; - this.buttonWidget.getBounds().width = width; + this.buttonWidget.active = this.isEditable(); + this.buttonWidget.y = y; + this.buttonWidget.x = x + entryWidth / 2 - width / 2; + this.buttonWidget.setWidth(width); this.buttonWidget.render(mouseX, mouseY, delta); } }); @@ -228,6 +229,46 @@ public class ConfigManagerImpl implements ConfigManager { provider.setOptionFunction((baseI13n, field) -> field.isAnnotationPresent(ConfigObject.DontApplyFieldName.class) ? baseI13n : String.format("%s.%s", baseI13n, field.getName())); provider.setCategoryFunction((baseI13n, categoryName) -> String.format("%s.%s", baseI13n, categoryName)); provider.setBuildFunction(builder -> { + if (FabricLoader.getInstance().isModLoaded("modmenu")) { + builder.getOrCreateCategory("config.roughlyenoughitems.!general").addEntry(new TooltipListEntry<Object>(I18n.translate("config.roughlyenoughitems.smooth_scrolling"), null) { + int width = 220; + private AbstractButtonWidget buttonWidget = new AbstractPressableButtonWidget(0, 0, 0, 20, this.getFieldName()) { + public void onPress() { + Screen screen = ModMenu.getConfigScreen("cloth-config2", parent); + if (screen != null) { + MinecraftClient.getInstance().openScreen(screen); + } else + ModMenu.openConfigScreen("cloth-config2"); + } + }; + private List<Element> children = ImmutableList.of(this.buttonWidget); + + public Object getValue() { + return null; + } + + public Optional<Object> getDefaultValue() { + return Optional.empty(); + } + + public void save() { + } + + public List<? extends Element> children() { + return this.children; + } + + public void render(int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) { + super.render(index, y, x, entryWidth, entryHeight, mouseX, mouseY, isSelected, delta); + Window window = MinecraftClient.getInstance().getWindow(); + this.buttonWidget.active = this.isEditable(); + this.buttonWidget.y = y; + this.buttonWidget.x = x + entryWidth / 2 - this.width / 2; + this.buttonWidget.setWidth(this.width); + this.buttonWidget.render(mouseX, mouseY, delta); + } + }); + } return builder.setAfterInitConsumer(screen -> { if (MinecraftClient.getInstance().getNetworkHandler() != null && MinecraftClient.getInstance().getNetworkHandler().getRecipeManager() != null) { ((ScreenHooks) screen).cloth_addButton(new ReloadConfigButtonWidget(4, 4, 100, 20, I18n.translate("text.rei.reload_config"), buttonWidget -> { diff --git a/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java b/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java index 8ef87e6e4..32c5dc5c4 100644 --- a/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java +++ b/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java @@ -200,7 +200,7 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData { @Override public boolean doesFastEntryRendering() { - return performance.fastEntryRendering; + return performance.newFastEntryRendering; } @Override @@ -326,6 +326,6 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData { public static class Performance { @Comment("Whether REI should render entry's enchantment glint") private boolean renderEntryEnchantmentGlint = true; - @ConfigEntry.Gui.Excluded private boolean fastEntryRendering = false; + private boolean newFastEntryRendering = true; } } diff --git a/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java b/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java index fa000359e..e2fcecbc8 100644 --- a/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java +++ b/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java @@ -8,10 +8,7 @@ package me.shedaniel.rei.impl; import com.google.common.collect.Lists; import com.mojang.blaze3d.platform.GlStateManager; import me.shedaniel.math.api.Rectangle; -import me.shedaniel.rei.api.ClientHelper; -import me.shedaniel.rei.api.ConfigObject; -import me.shedaniel.rei.api.EntryStack; -import me.shedaniel.rei.api.ItemStackHook; +import me.shedaniel.rei.api.*; import me.shedaniel.rei.gui.widget.QueuedTooltip; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.OverlayTexture; @@ -31,7 +28,7 @@ import java.util.Map; import java.util.Optional; @Deprecated -public class ItemEntryStack extends AbstractEntryStack { +public class ItemEntryStack extends AbstractEntryStack implements OptimalEntryStack { private ItemStack itemStack; private int hash = -1; @@ -152,46 +149,67 @@ public class ItemEntryStack extends AbstractEntryStack { return QueuedTooltip.create(toolTip); } - @SuppressWarnings("PointlessBooleanExpression") + private static final MatrixStack matrices = new MatrixStack(); + private final ItemRenderer itemRenderer = MinecraftClient.getInstance().getItemRenderer(); + @Override public void render(Rectangle bounds, int mouseX, int mouseY, float delta) { + optimisedRenderStart(delta); + optimisedRenderBase(bounds, mouseX, mouseY, delta); + optimisedRenderOverlay(bounds, mouseX, mouseY, delta); + optimisedRenderEnd(delta); + } + + @Override + public void optimisedRenderStart(float delta) { + MinecraftClient.getInstance().getTextureManager().bindTexture(SpriteAtlasTexture.BLOCK_ATLAS_TEX); + GlStateManager.enableRescaleNormal(); + } + + @Override + public void optimisedRenderEnd(float delta) { + GlStateManager.disableRescaleNormal(); + } + + private BakedModel getModelFromStack(ItemStack stack) { + BakedModel model = itemRenderer.getModels().getModel(stack); + if (stack.getItem().hasPropertyGetters()) + model = model.getItemPropertyOverrides().apply(model, stack, null, null); + if (model != null) + return model; + return itemRenderer.getModels().getModelManager().getMissingModel(); + } + + @Override + public void optimisedRenderBase(Rectangle bounds, int mouseX, int mouseY, float delta) { if (!isEmpty() && get(Settings.RENDER).get()) { ItemStack stack = getItemStack(); - if (ConfigObject.getInstance().doesFastEntryRendering() || true) { - ItemRenderer itemRenderer = MinecraftClient.getInstance().getItemRenderer(); - itemRenderer.zOffset = getZ(); - BakedModel model = itemRenderer.getModels().getModel(stack); - if (stack.getItem().hasPropertyGetters()) - model = model.getItemPropertyOverrides().apply(model, stack, null, null); - if (model == null) - model = itemRenderer.getModels().getModelManager().getMissingModel(); - MinecraftClient.getInstance().getTextureManager().bindTexture(SpriteAtlasTexture.BLOCK_ATLAS_TEX); - GlStateManager.enableRescaleNormal(); - MatrixStack matrices = new MatrixStack(); - matrices.translate(bounds.getCenterX(), bounds.getCenterY(), 100.0F + getZ()); - matrices.scale(bounds.getWidth(), (bounds.getWidth() + bounds.getHeight()) / -2f, bounds.getHeight()); - VertexConsumerProvider.Immediate immediate = MinecraftClient.getInstance().getBufferBuilders().getEntityVertexConsumers(); - boolean bl = !model.hasDepthInGui(); - if (bl) - GlStateManager.method_24221(); - itemRenderer.renderItem(stack, ModelTransformation.Type.GUI, false, matrices, immediate, 15728880, OverlayTexture.DEFAULT_UV, model); - immediate.draw(); - if (bl) - GlStateManager.method_24222(); - GlStateManager.disableRescaleNormal(); - itemRenderer.renderGuiItemOverlay(MinecraftClient.getInstance().textRenderer, stack, bounds.x, bounds.y, get(Settings.RENDER_COUNTS).get() ? get(Settings.COUNTS).apply(this) : ""); - itemRenderer.zOffset = 0.0F; - } else { - ((ItemStackHook) (Object) stack).rei_setRenderEnchantmentGlint(get(Settings.Item.RENDER_ENCHANTMENT_GLINT).get()); - ItemRenderer itemRenderer = MinecraftClient.getInstance().getItemRenderer(); - itemRenderer.zOffset = getZ(); - int i1 = bounds.x; - int i2 = bounds.y; - itemRenderer.renderGuiItemIcon(stack, i1, i2); - itemRenderer.renderGuiItemOverlay(MinecraftClient.getInstance().textRenderer, stack, i1, i2, get(Settings.RENDER_COUNTS).get() ? get(Settings.COUNTS).apply(this) : ""); - itemRenderer.zOffset = 0.0F; - ((ItemStackHook) (Object) stack).rei_setRenderEnchantmentGlint(true); - } + ((ItemStackHook) (Object) stack).rei_setRenderEnchantmentGlint(get(Settings.Item.RENDER_ENCHANTMENT_GLINT).get()); + itemRenderer.zOffset = getZ(); + matrices.push(); + matrices.translate(bounds.getCenterX(), bounds.getCenterY(), 100.0F + getZ()); + matrices.scale(bounds.getWidth(), (bounds.getWidth() + bounds.getHeight()) / -2f, bounds.getHeight()); + VertexConsumerProvider.Immediate immediate = MinecraftClient.getInstance().getBufferBuilders().getEntityVertexConsumers(); + BakedModel model = getModelFromStack(stack); + boolean bl = !model.hasDepthInGui(); + if (bl) + GlStateManager.method_24221(); + itemRenderer.renderItem(stack, ModelTransformation.Type.GUI, false, matrices, immediate, 15728880, OverlayTexture.DEFAULT_UV, model); + immediate.draw(); + if (bl) + GlStateManager.method_24222(); + itemRenderer.zOffset = 0.0F; + matrices.pop(); + ((ItemStackHook) (Object) stack).rei_setRenderEnchantmentGlint(false); + } + } + + @Override + public void optimisedRenderOverlay(Rectangle bounds, int mouseX, int mouseY, float delta) { + if (!isEmpty() && get(Settings.RENDER).get()) { + itemRenderer.zOffset = getZ(); + itemRenderer.renderGuiItemOverlay(MinecraftClient.getInstance().textRenderer, getItemStack(), bounds.x, bounds.y, get(Settings.RENDER_COUNTS).get() ? get(Settings.COUNTS).apply(this) : ""); + itemRenderer.zOffset = 0.0F; } } } diff --git a/src/main/java/me/shedaniel/rei/impl/ScreenHelper.java b/src/main/java/me/shedaniel/rei/impl/ScreenHelper.java index bd9e93ab6..1a1497973 100644 --- a/src/main/java/me/shedaniel/rei/impl/ScreenHelper.java +++ b/src/main/java/me/shedaniel/rei/impl/ScreenHelper.java @@ -11,6 +11,7 @@ import com.google.common.collect.Sets; import me.shedaniel.cloth.hooks.ClothClientHooks; import me.shedaniel.rei.api.ConfigManager; import me.shedaniel.rei.api.ConfigObject; +import me.shedaniel.rei.api.annotations.Internal; import me.shedaniel.rei.gui.ContainerScreenOverlay; import me.shedaniel.rei.gui.OverlaySearchField; import me.shedaniel.rei.listeners.ContainerScreenHooks; @@ -34,7 +35,7 @@ public class ScreenHelper implements ClientModInitializer { * @deprecated Use getters instead */ @Deprecated public static OverlaySearchField searchField; - public static List<ItemStack> inventoryStacks = Lists.newArrayList(); + @Deprecated @Internal public static List<ItemStack> inventoryStacks = Lists.newArrayList(); private static ContainerScreenOverlay overlay; private static AbstractContainerScreen<?> lastContainerScreen = null; private static LinkedHashSet<Screen> lastRecipeScreen = Sets.newLinkedHashSetWithExpectedSize(5); diff --git a/src/main/java/me/shedaniel/rei/impl/Weather.java b/src/main/java/me/shedaniel/rei/impl/Weather.java index 11ce30e84..fb1c78979 100644 --- a/src/main/java/me/shedaniel/rei/impl/Weather.java +++ b/src/main/java/me/shedaniel/rei/impl/Weather.java @@ -5,6 +5,9 @@ package me.shedaniel.rei.impl; +import me.shedaniel.rei.api.annotations.Internal; + +@Internal public enum Weather { CLEAR(0, "text.rei.weather.clear"), RAIN(1, "text.rei.weather.rain"), @@ -18,20 +21,16 @@ public enum Weather { this.translateKey = translateKey; } - public static Weather byId(int int_1) { - return byId(int_1, CLEAR); + public static Weather byId(int id) { + return byId(id, CLEAR); } - public static Weather byId(int int_1, Weather gameMode_1) { - Weather[] var2 = values(); - int var3 = var2.length; - - for (int var4 = 0; var4 < var3; ++var4) { - Weather gameMode_2 = var2[var4]; - if (gameMode_2.id == int_1) - return gameMode_2; + public static Weather byId(int id, Weather defaultWeather) { + for (Weather weather : values()) { + if (weather.id == id) + return weather; } - return gameMode_1; + return defaultWeather; } public int getId() { |
