aboutsummaryrefslogtreecommitdiff
path: root/default-plugin/src/main
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2022-08-28 20:48:46 +0900
committershedaniel <daniel@shedaniel.me>2022-08-28 21:14:21 +0900
commitfb91ed996b01f986492de4007cb86be5e68ad192 (patch)
treeb1176be6374ac6d56094c9bcf2b48226b31e68ec /default-plugin/src/main
parent94e323f75c17e297c33fba1d3afb5c47ae66a8ad (diff)
downloadRoughlyEnoughItems-fb91ed996b01f986492de4007cb86be5e68ad192.tar.gz
RoughlyEnoughItems-fb91ed996b01f986492de4007cb86be5e68ad192.tar.bz2
RoughlyEnoughItems-fb91ed996b01f986492de4007cb86be5e68ad192.zip
More internal changes
Diffstat (limited to 'default-plugin/src/main')
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java46
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/client/favorites/EntryStackFavoriteEntry.java93
2 files changed, 138 insertions, 1 deletions
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java
index cc39f9e3a..01c7f3b0c 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java
@@ -26,13 +26,23 @@ package me.shedaniel.rei.plugin.client;
import com.google.common.collect.Iterators;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
+import com.mojang.blaze3d.systems.RenderSystem;
+import com.mojang.blaze3d.vertex.PoseStack;
import dev.architectury.platform.Platform;
import it.unimi.dsi.fastutil.objects.Object2FloatMap;
import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet;
import it.unimi.dsi.fastutil.objects.ReferenceSet;
import me.shedaniel.math.Rectangle;
+import me.shedaniel.rei.api.client.ClientHelper;
+import me.shedaniel.rei.api.client.REIRuntime;
import me.shedaniel.rei.api.client.favorites.FavoriteEntry;
import me.shedaniel.rei.api.client.favorites.FavoriteEntryType;
+import me.shedaniel.rei.api.client.gui.AbstractRenderer;
+import me.shedaniel.rei.api.client.gui.drag.component.DraggableComponentProviderWidget;
+import me.shedaniel.rei.api.client.gui.drag.component.DraggableComponentVisitorWidget;
+import me.shedaniel.rei.api.client.gui.widgets.Tooltip;
+import me.shedaniel.rei.api.client.gui.widgets.TooltipContext;
+import me.shedaniel.rei.api.client.gui.widgets.Widgets;
import me.shedaniel.rei.api.client.plugins.REIClientPlugin;
import me.shedaniel.rei.api.client.registry.category.CategoryRegistry;
import me.shedaniel.rei.api.client.registry.display.DisplayRegistry;
@@ -40,6 +50,7 @@ import me.shedaniel.rei.api.client.registry.entry.EntryRegistry;
import me.shedaniel.rei.api.client.registry.screen.ExclusionZones;
import me.shedaniel.rei.api.client.registry.screen.ScreenRegistry;
import me.shedaniel.rei.api.client.registry.transfer.TransferHandlerRegistry;
+import me.shedaniel.rei.api.client.util.ClientEntryStacks;
import me.shedaniel.rei.api.common.entry.EntryIngredient;
import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.api.common.util.EntryIngredients;
@@ -55,6 +66,7 @@ import me.shedaniel.rei.plugin.client.categories.crafting.DefaultCraftingCategor
import me.shedaniel.rei.plugin.client.categories.tag.DefaultTagCategory;
import me.shedaniel.rei.plugin.client.exclusionzones.DefaultPotionEffectExclusionZones;
import me.shedaniel.rei.plugin.client.exclusionzones.DefaultRecipeBookExclusionZones;
+import me.shedaniel.rei.plugin.client.favorites.EntryStackFavoriteEntry;
import me.shedaniel.rei.plugin.client.favorites.GameModeFavoriteEntry;
import me.shedaniel.rei.plugin.client.favorites.TimeFavoriteEntry;
import me.shedaniel.rei.plugin.client.favorites.WeatherFavoriteEntry;
@@ -77,6 +89,7 @@ import net.minecraft.client.gui.screens.inventory.*;
import net.minecraft.client.gui.screens.recipebook.RecipeUpdateListener;
import net.minecraft.core.Registry;
import net.minecraft.network.chat.Component;
+import net.minecraft.network.chat.TextComponent;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.BlockTags;
@@ -97,7 +110,9 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.FluidState;
import org.jetbrains.annotations.ApiStatus;
+import org.jetbrains.annotations.Nullable;
+import java.time.LocalDateTime;
import java.util.*;
import java.util.function.Supplier;
import java.util.function.UnaryOperator;
@@ -135,6 +150,24 @@ public class DefaultClientPlugin implements REIClientPlugin, BuiltinClientPlugin
registry.addEntry(EntryStacks.of(fluid));
}
}
+
+ if (LocalDateTime.now().getMonthValue() == 4 && LocalDateTime.now().getDayOfMonth() == 1) {
+ registry.addEntry(ClientEntryStacks.of(new AbstractRenderer() {
+ private final ResourceLocation id = new ResourceLocation("roughlyenoughitems", "textures/gui/kirb.png");
+
+ @Override
+ public void render(PoseStack matrices, Rectangle bounds, int mouseX, int mouseY, float delta) {
+ RenderSystem.setShaderTexture(0, id);
+ innerBlit(matrices.last().pose(), bounds.x, bounds.getMaxX(), bounds.y, bounds.getMaxY(), getBlitOffset(), 0, 1, 0, 1);
+ }
+
+ @Override
+ @Nullable
+ public Tooltip getTooltip(TooltipContext context) {
+ return Tooltip.create(context, new TextComponent("Kirby"), ClientHelper.getInstance().getFormattedModFromModId("Dream Land"));
+ }
+ }));
+ }
}
@Override
@@ -324,7 +357,6 @@ public class DefaultClientPlugin implements REIClientPlugin, BuiltinClientPlugin
}
protected void registerForgePotions(DisplayRegistry registry, BuiltinClientPlugin clientPlugin) {
-
}
@Override
@@ -341,6 +373,17 @@ public class DefaultClientPlugin implements REIClientPlugin, BuiltinClientPlugin
registry.registerContainerClickArea(new Rectangle(78, 32, 28, 23), FurnaceScreen.class, SMELTING);
registry.registerContainerClickArea(new Rectangle(78, 32, 28, 23), SmokerScreen.class, SMOKING);
registry.registerContainerClickArea(new Rectangle(78, 32, 28, 23), BlastFurnaceScreen.class, BLASTING);
+
+ registry.registerDraggableComponentProvider(DraggableComponentProviderWidget.from(context -> {
+ if (!ScreenRegistry.getInstance().shouldDisplay(context.getScreen()) || !REIRuntime.getInstance().isOverlayVisible())
+ return Collections.emptyList();
+ return Widgets.walk(REIRuntime.getInstance().getOverlay().get().children(), DraggableComponentProviderWidget.class::isInstance);
+ }));
+ registry.registerDraggableComponentVisitor(DraggableComponentVisitorWidget.from(context -> {
+ if (!ScreenRegistry.getInstance().shouldDisplay(context.getScreen()) || !REIRuntime.getInstance().isOverlayVisible())
+ return Collections.emptyList();
+ return Widgets.walk(REIRuntime.getInstance().getOverlay().get().children(), DraggableComponentVisitorWidget.class::isInstance);
+ }));
}
@Override
@@ -350,6 +393,7 @@ public class DefaultClientPlugin implements REIClientPlugin, BuiltinClientPlugin
@Override
public void registerFavorites(FavoriteEntryType.Registry registry) {
+ registry.register(FavoriteEntryType.ENTRY_STACK, EntryStackFavoriteEntry.Type.INSTANCE);
registry.register(GameModeFavoriteEntry.ID, GameModeFavoriteEntry.Type.INSTANCE);
registry.getOrCrateSection(new TranslatableComponent(GameModeFavoriteEntry.TRANSLATION_KEY))
.add(Stream.concat(
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/favorites/EntryStackFavoriteEntry.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/favorites/EntryStackFavoriteEntry.java
new file mode 100644
index 000000000..ecd9e673e
--- /dev/null
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/favorites/EntryStackFavoriteEntry.java
@@ -0,0 +1,93 @@
+package me.shedaniel.rei.plugin.client.favorites;
+
+import com.mojang.serialization.DataResult;
+import com.mojang.serialization.Lifecycle;
+import me.shedaniel.rei.api.client.favorites.FavoriteEntry;
+import me.shedaniel.rei.api.client.favorites.FavoriteEntryType;
+import me.shedaniel.rei.api.client.gui.Renderer;
+import me.shedaniel.rei.api.common.entry.EntryStack;
+import me.shedaniel.rei.api.common.util.EntryStacks;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.resources.ResourceLocation;
+
+import java.util.function.Function;
+
+public class EntryStackFavoriteEntry extends FavoriteEntry {
+ private static final Function<EntryStack<?>, String> CANCEL_FLUID_AMOUNT = s -> null;
+ private final EntryStack<?> stack;
+ private final long hash;
+
+ public EntryStackFavoriteEntry(EntryStack<?> stack) {
+ this.stack = stack.normalize();
+ this.hash = EntryStacks.hashExact(this.stack);
+ }
+
+ @Override
+ public boolean isInvalid() {
+ return this.stack.isEmpty();
+ }
+
+ @Override
+ public Renderer getRenderer(boolean showcase) {
+ return this.stack;
+ }
+
+ @Override
+ public boolean doAction(int button) {
+ return false;
+ }
+
+ @Override
+ public long hashIgnoreAmount() {
+ return hash;
+ }
+
+ @Override
+ public FavoriteEntry copy() {
+ return new EntryStackFavoriteEntry(stack.normalize());
+ }
+
+ @Override
+ public ResourceLocation getType() {
+ return FavoriteEntryType.ENTRY_STACK;
+ }
+
+ @Override
+ public boolean isSame(FavoriteEntry other) {
+ if (!(other instanceof EntryStackFavoriteEntry that)) return false;
+ return EntryStacks.equalsExact(stack, that.stack);
+ }
+
+ public enum Type implements FavoriteEntryType<EntryStackFavoriteEntry> {
+ INSTANCE;
+
+ private final String key = "data";
+
+ @Override
+ public DataResult<EntryStackFavoriteEntry> read(CompoundTag object) {
+ EntryStack<?> stack;
+ try {
+ stack = EntryStack.read(object.getCompound(key));
+ } catch (Throwable throwable) {
+ return DataResult.error(throwable.getMessage());
+ }
+ return DataResult.success(new EntryStackFavoriteEntry(stack), Lifecycle.stable());
+ }
+
+ @Override
+ public DataResult<EntryStackFavoriteEntry> fromArgs(Object... args) {
+ if (args.length == 0) return DataResult.error("Cannot create EntryStackFavoriteEntry from empty args!");
+ if (!(args[0] instanceof EntryStack<?> stack))
+ return DataResult.error("Creation of EntryStackFavoriteEntry from args expected EntryStack as the first argument!");
+ if (!stack.supportSaving())
+ return DataResult.error("Creation of EntryStackFavoriteEntry from an unserializable stack!");
+ return DataResult.success(new EntryStackFavoriteEntry(stack), Lifecycle.stable());
+ }
+
+ @Override
+ public CompoundTag save(EntryStackFavoriteEntry entry, CompoundTag tag) {
+ tag.put(key, entry.stack.saveStack());
+ return tag;
+ }
+ }
+} \ No newline at end of file