diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-08-28 20:48:46 +0900 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2022-08-28 21:14:21 +0900 |
| commit | fb91ed996b01f986492de4007cb86be5e68ad192 (patch) | |
| tree | b1176be6374ac6d56094c9bcf2b48226b31e68ec /default-plugin/src/main | |
| parent | 94e323f75c17e297c33fba1d3afb5c47ae66a8ad (diff) | |
| download | RoughlyEnoughItems-fb91ed996b01f986492de4007cb86be5e68ad192.tar.gz RoughlyEnoughItems-fb91ed996b01f986492de4007cb86be5e68ad192.tar.bz2 RoughlyEnoughItems-fb91ed996b01f986492de4007cb86be5e68ad192.zip | |
More internal changes
Diffstat (limited to 'default-plugin/src/main')
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 |
