diff --git a/src/main/java/com/teammoeg/frostedheart/FHTextIcon.java b/src/main/java/com/teammoeg/frostedheart/FHTextIcon.java deleted file mode 100644 index adbfb58ca..000000000 --- a/src/main/java/com/teammoeg/frostedheart/FHTextIcon.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.teammoeg.frostedheart; - -import com.teammoeg.frostedheart.util.lang.Lang; - -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.MutableComponent; -import net.minecraft.resources.ResourceLocation; - -public class FHTextIcon { - private static final ResourceLocation iconFont=FHMain.rl("default"); - public static record TextIconType(String code){ - public MutableComponent getIcon() { - return Lang.str(code).withStyle(t->t.withFont(iconFont)); - } - public MutableComponent appendBefore(Component which) { - return Lang.str("").append(getIcon()).append(which); - - } - public MutableComponent appendAfter(Component which) { - return Lang.str("").append(which).append(getIcon()); - } - } - public static final TextIconType thermometer=new TextIconType("\uF500"); - -} diff --git a/src/main/java/com/teammoeg/frostedheart/content/research/FHResearch.java b/src/main/java/com/teammoeg/frostedheart/content/research/FHResearch.java index 14f1aa3c2..30ab59334 100644 --- a/src/main/java/com/teammoeg/frostedheart/content/research/FHResearch.java +++ b/src/main/java/com/teammoeg/frostedheart/content/research/FHResearch.java @@ -253,7 +253,7 @@ public static Research load(Research r) { Research.CODEC.parse(JsonOps.INSTANCE, je).resultOrPartial(FHMain.LOGGER::error).map(o -> { o.setId(r.getId()); - System.out.println(o); + //System.out.println(o); return o; }).ifPresent(researches::replace); ; diff --git a/src/main/java/com/teammoeg/frostedheart/content/research/gui/FHIcons.java b/src/main/java/com/teammoeg/frostedheart/content/research/gui/FHIcons.java index d3cf851d0..d407351ca 100644 --- a/src/main/java/com/teammoeg/frostedheart/content/research/gui/FHIcons.java +++ b/src/main/java/com/teammoeg/frostedheart/content/research/gui/FHIcons.java @@ -29,6 +29,7 @@ import com.teammoeg.frostedheart.util.lang.Lang; import net.minecraft.client.gui.GuiGraphics; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.teammoeg.frostedheart.content.research.gui.editor.BaseEditDialog; import com.teammoeg.frostedheart.content.research.gui.editor.EditListDialog; @@ -66,15 +67,15 @@ public class FHIcons { private static final TypedCodecRegistry serializers = new TypedCodecRegistry<>(); public static final Codec CODEC=new AlternativeCodecBuilder(FHIcon.class) .fallback(()->FHNopIcon.INSTANCE) - .addSaveOnly(FHNopIcon.class ,FHNopIcon.CODEC) + .addSaveOnly(FHNopIcon.class ,FHNopIcon.CODEC.codec()) .add(FHItemIcon.class, FHItemIcon.ICON_CODEC) - .add(FHItemIcon.class,FHItemIcon.CODEC) + .add(FHItemIcon.class,FHItemIcon.CODEC.codec()) .add(FHAnimatedIcon.class,FHAnimatedIcon.ICON_CODEC) .add(serializers.codec()) - .add(FHNopIcon.CODEC) + .add(FHNopIcon.CODEC.codec()) .build(); private static class FHAnimatedIcon extends FHIcon { - private static final Codec CODEC=RecordCodecBuilder.create(t->t.group( + private static final MapCodec CODEC=RecordCodecBuilder.mapCodec(t->t.group( Codec.list(FHIcons.CODEC).fieldOf("icons").forGetter(o->o.icons) ).apply(t, FHAnimatedIcon::new)); private static final Codec ICON_CODEC=Codec.list(FHIcons.CODEC).xmap(FHAnimatedIcon::new, o->o.icons); @@ -104,7 +105,7 @@ public void draw(GuiGraphics ms, int x, int y, int w, int h) { } private static class FHCombinedIcon extends FHIcon { - private static final Codec CODEC=RecordCodecBuilder.create(t->t.group( + private static final MapCodec CODEC=RecordCodecBuilder.mapCodec(t->t.group( FHIcons.CODEC.fieldOf("base").forGetter(o->o.large), FHIcons.CODEC.fieldOf("small").forGetter(o->o.small) ).apply(t, FHCombinedIcon::new)); @@ -131,7 +132,7 @@ public void draw(GuiGraphics ms, int x, int y, int w, int h) { } private static class FHDelegateIcon extends FHIcon { - private static final Codec CODEC=RecordCodecBuilder.create(t->t.group( + private static final MapCodec CODEC=RecordCodecBuilder.mapCodec(t->t.group( Codec.STRING.fieldOf("name").forGetter(o->o.name) ).apply(t, FHDelegateIcon::new)); String name; @@ -187,7 +188,7 @@ public Icon asFtbIcon() { } private static class FHIngredientIcon extends FHAnimatedIcon { - private static final Codec CODEC=RecordCodecBuilder.create(t->t.group( + private static final MapCodec CODEC=RecordCodecBuilder.mapCodec(t->t.group( CodecUtil.INGREDIENT_CODEC.fieldOf("ingredient").forGetter(o->o.igd) ).apply(t, FHIngredientIcon::new)); Ingredient igd; @@ -204,7 +205,7 @@ public FHIngredientIcon(JsonElement elm) { } private static class FHItemIcon extends FHIcon { - private static final Codec CODEC=RecordCodecBuilder.create(t->t.group( + private static final MapCodec CODEC=RecordCodecBuilder.mapCodec(t->t.group( CodecUtil.ITEMSTACK_CODEC.fieldOf("item").forGetter(o->o.stack) ).apply(t, FHItemIcon::new)); private static final Codec ICON_CODEC= @@ -247,7 +248,7 @@ public void draw(GuiGraphics matrixStack, int x, int y, int w, int h) { private static class FHNopIcon extends FHIcon { public static final FHNopIcon INSTANCE = new FHNopIcon(); - private static final Codec CODEC=new NopCodec<>(INSTANCE); + private static final MapCodec CODEC=MapCodec.unit(INSTANCE); private FHNopIcon() { @@ -261,7 +262,7 @@ public void draw(GuiGraphics ms, int x, int y, int w, int h) { } private static class FHTextIcon extends FHIcon { - private static final Codec CODEC=RecordCodecBuilder.create(t->t.group( + private static final MapCodec CODEC=RecordCodecBuilder.mapCodec(t->t.group( Codec.STRING.fieldOf("text").forGetter(o->o.text) ).apply(t, FHTextIcon::new)); String text; @@ -290,7 +291,7 @@ public void draw(GuiGraphics ms, int x, int y, int w, int h) { } private static class FHTextureIcon extends FHIcon { - private static final Codec CODEC=RecordCodecBuilder.create(t->t.group( + private static final MapCodec CODEC=RecordCodecBuilder.mapCodec(t->t.group( ResourceLocation.CODEC.fieldOf("location").forGetter(o->o.rl) ).apply(t, FHTextureIcon::new)); Icon nested; @@ -310,7 +311,7 @@ public void draw(GuiGraphics ms, int x, int y, int w, int h) { } private static class FHTextureUVIcon extends FHIcon { - private static final Codec CODEC=RecordCodecBuilder.create(t->t.group( + private static final MapCodec CODEC=RecordCodecBuilder.mapCodec(t->t.group( ResourceLocation.CODEC.fieldOf("location").forGetter(o->o.rl), Codec.INT.fieldOf("x") .forGetter(o->o.x), Codec.INT.fieldOf("y") .forGetter(o->o.y), diff --git a/src/main/java/com/teammoeg/frostedheart/content/research/gui/editor/SelectItemStackDialog.java b/src/main/java/com/teammoeg/frostedheart/content/research/gui/editor/SelectItemStackDialog.java index a50b315b2..d09a5aa47 100644 --- a/src/main/java/com/teammoeg/frostedheart/content/research/gui/editor/SelectItemStackDialog.java +++ b/src/main/java/com/teammoeg/frostedheart/content/research/gui/editor/SelectItemStackDialog.java @@ -279,24 +279,24 @@ public boolean shouldAdd(String search, String mod) { @Override public Collection getAllResources() { - return RegistryUtils.getItems().stream().map(ItemStack::new).collect(Collectors.toList()); + return RegistryUtils.getItems().stream().filter(t->t!=null&&t!=Items.AIR).map(ItemStack::new).collect(Collectors.toList()); } @Override public MutableComponent getDisplayName() { - return Lang.str("ALL"); + return Lang.translateKey("ftblibrary.select_item.list_mode.all"); } @Override public Icon getIcon() { - return ItemIcon.getItemIcon(Blocks.STONE.asItem()); + return Icons.COMPASS; } }); modes.add(new ResourceSearchMode() { @Override public Collection getAllResources() { - return ClientUtils.getPlayer().getInventory().items.stream().map(ItemStack::copy).collect(Collectors.toList()); + return ClientUtils.getPlayer().getInventory().items.stream().filter(t->t!=null&&!t.isEmpty()).map(ItemStack::copy).collect(Collectors.toList()); } @Override @@ -306,14 +306,14 @@ public MutableComponent getDisplayName() { @Override public Icon getIcon() { - return ItemIcon.getItemIcon(Blocks.STONE.asItem()); + return ItemIcon.getItemIcon(Items.CHEST); } }); modes.add(new ResourceSearchMode() { @Override public Collection getAllResources() { - return RegistryUtils.getBlocks().stream().map(Block::asItem).filter(Objects::nonNull).map(ItemStack::new).collect(Collectors.toList()); + return RegistryUtils.getBlocks().stream().map(Block::asItem).filter(Objects::nonNull).filter(t->t!=Items.AIR).map(ItemStack::new).collect(Collectors.toList()); } @Override @@ -485,7 +485,6 @@ public List getItems(String search, Panel panel) { List widgets = new ArrayList<>(search.isEmpty() ? items.size() + 1 : 64); String mod = ""; - if (search.startsWith("@")) { mod = search.substring(1); } diff --git a/src/main/java/com/teammoeg/frostedheart/content/research/gui/tech/ResearchHierarchyPanel.java b/src/main/java/com/teammoeg/frostedheart/content/research/gui/tech/ResearchHierarchyPanel.java index bd37da890..de687bc29 100644 --- a/src/main/java/com/teammoeg/frostedheart/content/research/gui/tech/ResearchHierarchyPanel.java +++ b/src/main/java/com/teammoeg/frostedheart/content/research/gui/tech/ResearchHierarchyPanel.java @@ -229,7 +229,7 @@ public void onClicked(MouseButton mouseButton) { Research r = researchPanel.selectedResearch; ResearchEditorDialog.RESEARCH_LIST.open(this, "Edit parents", r.getParents(), s -> { try { - System.out.println(s); + //System.out.println(s); r.setParents(s.stream().map(Research::getId).collect(Collectors.toList())); FHResearch.reindex(); EditUtils.saveResearch(r); @@ -311,7 +311,7 @@ public void onClicked(MouseButton mouseButton) { x = ButtonPos[4] + (k - 4) * 32; } else x = ButtonPos[k]; - System.out.println(parent); + //System.out.println(parent); ResearchSimpleButton parentButton = new ResearchSimpleButton(this, parent); add(parentButton); parentButton.setPos(x, 16); diff --git a/src/main/java/com/teammoeg/frostedheart/content/research/network/FHResearchSyncPacket.java b/src/main/java/com/teammoeg/frostedheart/content/research/network/FHResearchSyncPacket.java index 862502220..fdd2a1863 100644 --- a/src/main/java/com/teammoeg/frostedheart/content/research/network/FHResearchSyncPacket.java +++ b/src/main/java/com/teammoeg/frostedheart/content/research/network/FHResearchSyncPacket.java @@ -44,10 +44,12 @@ public FHResearchSyncPacket(FriendlyByteBuf buffer) { public void encode(FriendlyByteBuf buffer) { ObjectWriter.writeObject(buffer, data); + System.out.println("encoded "+data); buffer.writeUtf(key); } public void handle(Supplier context) { + System.out.println("decoded "+data); context.get().enqueueWork(() -> FHResearch.readOne(key,CodecUtil.decodeOrThrow(Research.CODEC.decode(DataOps.COMPRESSED, data)))); context.get().setPacketHandled(true); } diff --git a/src/main/java/com/teammoeg/frostedheart/content/research/research/Research.java b/src/main/java/com/teammoeg/frostedheart/content/research/research/Research.java index a0243eea5..872395096 100644 --- a/src/main/java/com/teammoeg/frostedheart/content/research/research/Research.java +++ b/src/main/java/com/teammoeg/frostedheart/content/research/research/Research.java @@ -26,6 +26,7 @@ import java.util.HashSet; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; @@ -69,7 +70,7 @@ public class Research implements FHRegisteredItem { Codec.list(Codec.STRING).optionalFieldOf("parents",Arrays.asList()).forGetter(o->new ArrayList<>(o.parents)), Codec.list(Clue.CODEC).optionalFieldOf("clues",Arrays.asList()).forGetter(o->o.clues), Codec.list(CodecUtil.INGREDIENT_SIZE_CODEC).optionalFieldOf("ingredients",Arrays.asList()).forGetter(o->o.requiredItems), - Codec.list(Effect.CODEC).optionalFieldOf("effects",Arrays.asList()).forGetter(o->o.effects), + Codec.list(Effect.CODEC).optionalFieldOf("effects").forGetter(o->o.effects.size()>0?Optional.of(o.effects):Optional.empty()), Codec.STRING.optionalFieldOf("name","").forGetter(o->o.name), Codec.list(Codec.STRING).optionalFieldOf("desc",Arrays.asList()).forGetter(o->o.desc), Codec.list(Codec.STRING).optionalFieldOf("descAlt",Arrays.asList()).forGetter(o->o.fdesc), @@ -154,17 +155,19 @@ public Research() { this.icon = FHIcons.nop(); } - public Research(FHIcon icon, ResearchCategory category, List parents, List clues, List requiredItems, List effects, String name, + public Research(FHIcon icon, ResearchCategory category, List parents, List clues, List requiredItems, Optional> effects, String name, List desc, List fdesc, boolean[] flags, int points) { super(); this.icon = icon; this.category = category; if(parents!=null) this.parents.addAll(parents); - System.out.println(parents); + //System.out.println(parents); this.clues.addAll(clues); + this.requiredItems.addAll(requiredItems); - this.effects.addAll(effects); + effects.ifPresent(this.effects::addAll); + this.name = name; this.desc.addAll(desc); this.fdesc.addAll(fdesc); @@ -175,6 +178,7 @@ public Research(FHIcon icon, ResearchCategory category, List parents, Li this.alwaysShow = flags[4]; this.setInfinite(flags[5]); this.points = points; + System.out.println(effects); } /** diff --git a/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/AdvancementClue.java b/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/AdvancementClue.java index 721defad2..253d84541 100644 --- a/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/AdvancementClue.java +++ b/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/AdvancementClue.java @@ -20,6 +20,7 @@ package com.teammoeg.frostedheart.content.research.research.clues; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.teammoeg.frostedheart.FHMain; import com.teammoeg.frostedheart.content.research.data.TeamResearchData; @@ -37,7 +38,7 @@ import net.minecraft.network.chat.Component; public class AdvancementClue extends TickListenerClue { - public static final Codec CODEC=RecordCodecBuilder.create(t->t.group( + public static final MapCodec CODEC=RecordCodecBuilder.mapCodec(t->t.group( ListenerClue.BASE_CODEC.forGetter(o->o.getData()), ResourceLocation.CODEC.fieldOf("advancement").forGetter(o->o.advancement), CodecUtil.defaultValue(Codec.STRING, "").fieldOf("criterion").forGetter(o->o.criterion) diff --git a/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/Clue.java b/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/Clue.java index 0057ecd3c..f5db79259 100644 --- a/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/Clue.java +++ b/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/Clue.java @@ -82,7 +82,7 @@ public BaseData(String name, String desc, String hint, String nonce, boolean req register(KillClue.class, "kill", KillClue.CODEC); register(MinigameClue.class, "game", MinigameClue.CODEC); } - public static void register(Class cls, String id, Codec j) { + public static void register(Class cls, String id, MapCodec j) { registry.register(cls, id, j); } public final static Codec CODEC=registry.codec(); diff --git a/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/CustomClue.java b/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/CustomClue.java index b908e8137..3ac42fad9 100644 --- a/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/CustomClue.java +++ b/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/CustomClue.java @@ -20,6 +20,7 @@ package com.teammoeg.frostedheart.content.research.research.clues; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.teammoeg.frostedheart.base.team.TeamDataHolder; import com.teammoeg.frostedheart.content.research.research.Research; @@ -28,7 +29,7 @@ * Very Custom Clue trigger by code or manually. */ public class CustomClue extends Clue { - public static final Codec CODEC=RecordCodecBuilder.create(t->t.group( + public static final MapCodec CODEC=RecordCodecBuilder.mapCodec(t->t.group( Clue.BASE_CODEC.forGetter(o->o.getData()) ).apply(t,CustomClue::new)); public CustomClue() { diff --git a/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/ItemClue.java b/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/ItemClue.java index b9f819318..e98f4745c 100644 --- a/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/ItemClue.java +++ b/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/ItemClue.java @@ -20,6 +20,7 @@ package com.teammoeg.frostedheart.content.research.research.clues; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.teammoeg.frostedheart.FHMain; import com.teammoeg.frostedheart.base.team.SpecialDataTypes; @@ -34,7 +35,7 @@ import net.minecraft.network.chat.Component; public class ItemClue extends Clue { - public static final Codec CODEC=RecordCodecBuilder.create(t->t.group( + public static final MapCodec CODEC=RecordCodecBuilder.mapCodec(t->t.group( Clue.BASE_CODEC.forGetter(o->o.getData()), CodecUtil.defaultValue(Codec.BOOL, false).fieldOf("consume").forGetter(o->o.consume), CodecUtil.INGREDIENT_SIZE_CODEC.fieldOf("item").forGetter(o->o.stack) diff --git a/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/KillClue.java b/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/KillClue.java index 587071147..d4d2a1d11 100644 --- a/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/KillClue.java +++ b/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/KillClue.java @@ -20,6 +20,7 @@ package com.teammoeg.frostedheart.content.research.research.clues; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.teammoeg.frostedheart.FHMain; import com.teammoeg.frostedheart.base.team.TeamDataHolder; @@ -35,7 +36,7 @@ import net.minecraft.world.entity.LivingEntity; public class KillClue extends ListenerClue { - public static final Codec CODEC=RecordCodecBuilder.create(t->t.group( + public static final MapCodec CODEC=RecordCodecBuilder.mapCodec(t->t.group( ListenerClue.BASE_CODEC.forGetter(o->o.getData()), CodecUtil.registryCodec(()->BuiltInRegistries.ENTITY_TYPE).fieldOf("entity").forGetter(o->o.type) ).apply(t,KillClue::new)); diff --git a/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/MinigameClue.java b/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/MinigameClue.java index 926652207..56224a0c7 100644 --- a/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/MinigameClue.java +++ b/src/main/java/com/teammoeg/frostedheart/content/research/research/clues/MinigameClue.java @@ -20,6 +20,7 @@ package com.teammoeg.frostedheart.content.research.research.clues; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.teammoeg.frostedheart.FHMain; import com.teammoeg.frostedheart.content.research.research.Research; @@ -28,7 +29,7 @@ import net.minecraft.network.chat.Component; public class MinigameClue extends CustomClue { - public static final Codec CODEC=RecordCodecBuilder.create(t->t.group( + public static final MapCodec CODEC=RecordCodecBuilder.mapCodec(t->t.group( Clue.BASE_CODEC.forGetter(o->o.getData()), Codec.INT.fieldOf("level").forGetter(o->o.level) ).apply(t,MinigameClue::new)); diff --git a/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/Effect.java b/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/Effect.java index 866c7ce84..d32d25413 100644 --- a/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/Effect.java +++ b/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/Effect.java @@ -20,7 +20,9 @@ package com.teammoeg.frostedheart.content.research.research.effects; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.Optional; import java.util.UUID; import java.util.function.Supplier; @@ -63,30 +65,22 @@ * @date 2022/09/02 */ public abstract class Effect extends AutoIDItem{ - public static class BaseData{ - String name = ""; - List tooltip; - FHIcon icon; - String nonce; - boolean hidden; - public BaseData(String name, List tooltip, FHIcon icon, String nonce, boolean hidden) { - super(); - this.name = name; - this.tooltip = tooltip; - this.icon = icon; - this.nonce = nonce; - this.hidden = hidden; + public static record BaseData(String name,List tooltip,FHIcon icon,String nonce,boolean hidden){ + + public BaseData(String name, List tooltip, Optional icon, String nonce, boolean hidden) { + this(name,tooltip,icon.orElse(null),nonce,hidden); } } - public static final MapCodec BASE_CODEC=RecordCodecBuilder.mapCodec(t-> - t.group(CodecUtil.defaultValue(Codec.STRING,"").fieldOf("name").forGetter(o->o.name), - CodecUtil.defaultSupply(Codec.list(Codec.STRING),ArrayList::new).fieldOf("tooltip").forGetter(o->o.tooltip), - FHIcons.CODEC.fieldOf("icon").forGetter(o->o.icon), + public static final MapCodec BASE_CODEC=CodecUtil.debugCodec(RecordCodecBuilder.mapCodec(t-> + t.group( + Codec.STRING.optionalFieldOf("name","").forGetter(o->o.name), + Codec.list(Codec.STRING).optionalFieldOf("tooltip",Arrays.asList()).forGetter(o->o.tooltip), + FHIcons.CODEC.optionalFieldOf("icon").forGetter(o->Optional.ofNullable(o.icon)), Codec.STRING.fieldOf("id").forGetter(o->o.nonce), - Codec.BOOL.fieldOf("hidden").forGetter(o->o.hidden)).apply(t, BaseData::new)); + Codec.BOOL.optionalFieldOf("hidden",false).forGetter(o->o.hidden)).apply(t, BaseData::new))); private static TypedCodecRegistry registry = new TypedCodecRegistry<>(); - public static final Codec CODEC=registry.codec(); + public static final Codec CODEC=CodecUtil.debugCodec(registry.codec()); static { registerEffectType(EffectBuilding.class, "multiblock", EffectBuilding.CODEC); registerEffectType(EffectCrafting.class, "recipe", EffectCrafting.CODEC); @@ -97,8 +91,8 @@ public BaseData(String name, List tooltip, FHIcon icon, String nonce, bo registerEffectType(EffectCommand.class, "command", EffectCommand.CODEC); registerEffectType(EffectExperience.class, "experience", EffectExperience.CODEC); } - public static void registerEffectType(Class cls, String type, Codec json) { - registry.register(cls, type, json); + public static void registerEffectType(Class cls, String type, MapCodec json) { + registry.register(cls, type, CodecUtil.debugCodec(json)); } String name = ""; @@ -125,7 +119,7 @@ public Effect() { */ public Effect(BaseData data) { name=data.name; - tooltip=data.tooltip; + tooltip=new ArrayList<>(data.tooltip); icon=data.icon; nonce=data.nonce; hidden=data.hidden; diff --git a/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectBuilding.java b/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectBuilding.java index e9e831f03..6ade78c2a 100644 --- a/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectBuilding.java +++ b/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectBuilding.java @@ -24,6 +24,7 @@ import com.google.common.collect.ImmutableSet; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.teammoeg.frostedheart.base.team.TeamDataHolder; import com.teammoeg.frostedheart.content.research.ResearchListeners; @@ -53,7 +54,7 @@ * Allows forming multiblock */ public class EffectBuilding extends Effect { - public static final Codec CODEC=RecordCodecBuilder.create(t->t.group(Effect.BASE_CODEC.forGetter(Effect::getBaseData), + public static final MapCodec CODEC=RecordCodecBuilder.mapCodec(t->t.group(Effect.BASE_CODEC.forGetter(Effect::getBaseData), ResourceLocation.CODEC.xmap(MultiblockHandler::getByUniqueName, IMultiblock::getUniqueName).fieldOf("multiblock").forGetter(o->o.multiblock)) .apply(t,EffectBuilding::new)); IMultiblock multiblock; diff --git a/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectCommand.java b/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectCommand.java index 065fa5491..1d2561794 100644 --- a/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectCommand.java +++ b/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectCommand.java @@ -26,6 +26,7 @@ import java.util.Map; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.teammoeg.frostedheart.base.team.FHTeamDataManager; import com.teammoeg.frostedheart.base.team.TeamDataHolder; @@ -46,7 +47,7 @@ * Reward the research team executes command */ public class EffectCommand extends Effect { - public static final Codec CODEC=RecordCodecBuilder.create(t->t.group(Effect.BASE_CODEC.forGetter(Effect::getBaseData), + public static final MapCodec CODEC=RecordCodecBuilder.mapCodec(t->t.group(Effect.BASE_CODEC.forGetter(Effect::getBaseData), Codec.list(Codec.STRING).fieldOf("rewards").forGetter(o->o.rewards)) .apply(t,EffectCommand::new)); diff --git a/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectCrafting.java b/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectCrafting.java index 7c6e9561d..aaad08d00 100644 --- a/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectCrafting.java +++ b/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectCrafting.java @@ -30,6 +30,7 @@ import com.mojang.datafixers.util.Either; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.teammoeg.frostedheart.FHMain; import com.teammoeg.frostedheart.base.team.FHTeamDataManager; @@ -41,6 +42,7 @@ import com.teammoeg.frostedheart.content.research.gui.FHIcons; import com.teammoeg.frostedheart.content.research.gui.FHIcons.FHIcon; import com.teammoeg.frostedheart.util.lang.Lang; +import com.teammoeg.frostedheart.util.RegistryUtils; import com.teammoeg.frostedheart.util.io.CodecUtil; import mezz.jei.library.util.RecipeUtil; @@ -58,7 +60,7 @@ import net.minecraftforge.api.distmarker.OnlyIn; public class EffectCrafting extends Effect { - public static final Codec CODEC=RecordCodecBuilder.create(t->t.group( + public static final MapCodec CODEC=RecordCodecBuilder.mapCodec(t->t.group( Effect.BASE_CODEC.forGetter(Effect::getBaseData), CodecUtil.>either( CodecUtil.registryCodec(()->BuiltInRegistries.ITEM).fieldOf("item"), @@ -66,8 +68,8 @@ public class EffectCrafting extends Effect { Codec.list(ResourceLocation.CODEC).fieldOf("recipes"), o->o.item, o->o.itemStack, - o->o.unlocks.stream().map(Recipe::getId).collect(Collectors.toList())) - ) + o->o.unlocks.stream().map(Recipe::getId).collect(Collectors.toList()) + )) .apply(t,EffectCrafting::new)); List> unlocks = new ArrayList<>(); ItemStack itemStack = null; @@ -89,9 +91,9 @@ public EffectCrafting(ItemStack item) { public EffectCrafting(BaseData data,Either>> unlocks) { super(data); - unlocks.ifLeft(t->{this.item=t;initItem();}); + unlocks.ifLeft(t->{this.item=t;}); unlocks.ifRight(t->{ - t.ifLeft(o->{this.itemStack=o;initStack();}); + t.ifLeft(o->{this.itemStack=o;}); t.ifRight(o->o.stream().map(FHTeamDataManager.getRecipeManager()::byKey).filter(Optional::isPresent).map(Optional::get).forEach(this.unlocks::add)); }); @@ -173,13 +175,17 @@ public boolean grant(TeamDataHolder team,TeamResearchData trd, Player triggerPl @Override public void init() { + if(item!=null) + initItem(); + if(itemStack!=null) + initStack(); ResearchListeners.recipe.addAll(unlocks); } private void initItem() { unlocks.clear(); for (Recipe r : FHTeamDataManager.getRecipeManager().getRecipes()) { - if (RecipeUtil.getResultItem(r).getItem().equals(this.item)) { + if (r.getResultItem(RegistryUtils.getAccess()).getItem().equals(this.item)) { unlocks.add(r); } } @@ -189,7 +195,7 @@ private void initItem() { private void initStack() { unlocks.clear(); for (Recipe r : FHTeamDataManager.getRecipeManager().getRecipes()) { - if (RecipeUtil.getResultItem(r).equals(item)) { + if (r.getResultItem(RegistryUtils.getAccess()).equals(item)) { unlocks.add(r); } } diff --git a/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectEditor.java b/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectEditor.java index 4d1354aa7..cdc0cd5d1 100644 --- a/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectEditor.java +++ b/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectEditor.java @@ -202,7 +202,11 @@ public void addWidgets() { public EffectItemReward createEffect() { return new EffectItemReward(); } - + @Override + public void onClose() { + super.onClose(); + System.out.println(e.rewards); + } } private static class Stats extends EffectEditor { LabeledSelection perc; @@ -347,6 +351,7 @@ public void onClose() { e.name = name.getText(); e.hidden = sd.getSelection(); e.setNonce(nonce.getText()); + cb.accept(e); } diff --git a/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectExperience.java b/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectExperience.java index 92d1f2473..0b2133331 100644 --- a/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectExperience.java +++ b/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectExperience.java @@ -23,6 +23,7 @@ import java.util.List; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.teammoeg.frostedheart.base.team.TeamDataHolder; import com.teammoeg.frostedheart.content.research.data.TeamResearchData; @@ -39,7 +40,7 @@ * Reward the research team executes command */ public class EffectExperience extends Effect { - public static final Codec CODEC=RecordCodecBuilder.create(t->t.group(Effect.BASE_CODEC.forGetter(Effect::getBaseData), + public static final MapCodec CODEC=RecordCodecBuilder.mapCodec(t->t.group(Effect.BASE_CODEC.forGetter(Effect::getBaseData), Codec.INT.fieldOf("experience").forGetter(o->o.exp)) .apply(t,EffectExperience::new)); int exp; diff --git a/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectItemReward.java b/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectItemReward.java index 59670e173..b26fa017e 100644 --- a/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectItemReward.java +++ b/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectItemReward.java @@ -24,6 +24,7 @@ import java.util.List; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.teammoeg.frostedheart.base.team.TeamDataHolder; import com.teammoeg.frostedheart.content.research.data.TeamResearchData; @@ -42,7 +43,7 @@ * Reward the research team item rewards */ public class EffectItemReward extends Effect { - public static final Codec CODEC=RecordCodecBuilder.create(t->t.group(Effect.BASE_CODEC.forGetter(Effect::getBaseData), + public static final MapCodec CODEC=RecordCodecBuilder.mapCodec(t->t.group(Effect.BASE_CODEC.forGetter(Effect::getBaseData), Codec.list(CodecUtil.ITEMSTACK_CODEC).fieldOf("rewards").forGetter(o->o.rewards)) .apply(t,EffectItemReward::new)); List rewards; diff --git a/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectShowCategory.java b/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectShowCategory.java index b91bf499b..b918006fb 100644 --- a/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectShowCategory.java +++ b/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectShowCategory.java @@ -23,6 +23,7 @@ import java.util.List; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.teammoeg.frostedheart.base.team.TeamDataHolder; import com.teammoeg.frostedheart.compat.jei.JEICompat; @@ -45,7 +46,7 @@ * Allows the research team to use certain machines */ public class EffectShowCategory extends Effect { - public static final Codec CODEC=RecordCodecBuilder.create(t->t.group(Effect.BASE_CODEC.forGetter(Effect::getBaseData), + public static final MapCodec CODEC=RecordCodecBuilder.mapCodec(t->t.group(Effect.BASE_CODEC.forGetter(Effect::getBaseData), ResourceLocation.CODEC.fieldOf("category").forGetter(o->o.cate)) .apply(t,EffectShowCategory::new)); ResourceLocation cate; diff --git a/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectStats.java b/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectStats.java index 9c9fead1c..213a42e51 100644 --- a/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectStats.java +++ b/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectStats.java @@ -24,6 +24,7 @@ import java.util.List; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.teammoeg.frostedheart.base.team.TeamDataHolder; import com.teammoeg.frostedheart.content.research.data.TeamResearchData; @@ -40,7 +41,7 @@ */ public class EffectStats extends Effect { private static FHIcon addIcon = FHIcons.getDelegateIcon("plus"); - public static final Codec CODEC=RecordCodecBuilder.create(t->t.group(Effect.BASE_CODEC.forGetter(Effect::getBaseData), + public static final MapCodec CODEC=RecordCodecBuilder.mapCodec(t->t.group(Effect.BASE_CODEC.forGetter(Effect::getBaseData), Codec.STRING.fieldOf("vars").forGetter(o->o.vars), Codec.DOUBLE.fieldOf("val").forGetter(o->o.val), Codec.BOOL.fieldOf("percent").forGetter(o->o.isPercentage) diff --git a/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectUse.java b/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectUse.java index 6e58bfaa6..bf1ed05f7 100644 --- a/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectUse.java +++ b/src/main/java/com/teammoeg/frostedheart/content/research/research/effects/EffectUse.java @@ -24,6 +24,7 @@ import java.util.List; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.teammoeg.frostedheart.base.team.TeamDataHolder; import com.teammoeg.frostedheart.content.research.ResearchListeners; @@ -43,7 +44,7 @@ * Allows the research team to use certain machines */ public class EffectUse extends Effect { - public static final Codec CODEC=RecordCodecBuilder.create(t->t.group(Effect.BASE_CODEC.forGetter(Effect::getBaseData), + public static final MapCodec CODEC=RecordCodecBuilder.mapCodec(t->t.group(Effect.BASE_CODEC.forGetter(Effect::getBaseData), Codec.list(CodecUtil.registryCodec(()->BuiltInRegistries.BLOCK)).fieldOf("blocks").forGetter(o->o.blocks)) .apply(t,EffectUse::new)); List blocks; diff --git a/src/main/java/com/teammoeg/frostedheart/util/RegistryUtils.java b/src/main/java/com/teammoeg/frostedheart/util/RegistryUtils.java index 2296e1839..d3ec36538 100644 --- a/src/main/java/com/teammoeg/frostedheart/util/RegistryUtils.java +++ b/src/main/java/com/teammoeg/frostedheart/util/RegistryUtils.java @@ -3,6 +3,7 @@ import java.util.Collection; import java.util.stream.Stream; +import com.teammoeg.frostedheart.base.team.FHTeamDataManager; import com.teammoeg.frostedheart.compat.jei.category.CuttingCategory; import net.minecraft.world.level.block.Block; @@ -12,9 +13,13 @@ import net.minecraft.world.level.material.Fluid; import net.minecraft.world.item.Item; import net.minecraft.world.effect.MobEffect; +import net.minecraft.client.Minecraft; import net.minecraft.core.Holder; +import net.minecraft.core.RegistryAccess; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.levelgen.structure.Structure; @@ -46,6 +51,12 @@ public static ResourceLocation getRegistryName(Block v) { public static ResourceLocation getRegistryName(Fluid v) { return ForgeRegistries.FLUIDS.getKey(v); } + public static RegistryAccess getAccess() { + MinecraftServer server=FHTeamDataManager.getServer(); + if(server!=null) + return server.registryAccess(); + return Minecraft.getInstance().level.registryAccess(); + } public static ResourceLocation getRegistryName(Biome b) { return ForgeRegistries.BIOMES.getKey(b); } diff --git a/src/main/java/com/teammoeg/frostedheart/util/io/CodecUtil.java b/src/main/java/com/teammoeg/frostedheart/util/io/CodecUtil.java index a8b16ca03..36b1bd8f1 100644 --- a/src/main/java/com/teammoeg/frostedheart/util/io/CodecUtil.java +++ b/src/main/java/com/teammoeg/frostedheart/util/io/CodecUtil.java @@ -31,6 +31,8 @@ import com.mojang.serialization.JsonOps; import com.mojang.serialization.ListBuilder; import com.mojang.serialization.MapCodec; +import com.mojang.serialization.MapLike; +import com.mojang.serialization.RecordBuilder; import com.mojang.serialization.codecs.EitherMapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.teammoeg.frostedheart.FHMain; @@ -255,6 +257,55 @@ public static RecordCodecBuilder> either( return Either.right(fb.apply(o)); }); } + public static Codec debugCodec(Codec codec){ + return new Codec<>() { + + @Override + public DataResult encode(A input, DynamicOps ops, T prefix) { + DataResult res=codec.encode(input, ops, prefix); + System.out.println(res); + return res; + } + + @Override + public DataResult> decode(DynamicOps ops, T input) { + DataResult> res=codec.decode(ops,input); + System.out.println(res); + return res; + } + @Override + public String toString() { + return codec.toString(); + } + }; + } + public static MapCodec debugCodec(MapCodec codec){ + return new MapCodec<>() { + + @Override + public DataResult decode(DynamicOps ops, MapLike input) { + DataResult res=codec.decode(ops, input); + System.out.println(res); + return res; + } + + @Override + public RecordBuilder encode(A input, DynamicOps ops, RecordBuilder prefix) { + RecordBuilder res=codec.encode(input, ops, prefix); + System.out.println(res.build(ops.empty())); + return res; + } + + @Override + public Stream keys(DynamicOps ops) { + return codec.keys(ops); + } + @Override + public String toString() { + return codec.toString(); + } + }; + } public static RecordCodecBuilder>> either( MapCodec a,MapCodec b,MapCodec c, Function fa,Function fb,Function fc){ diff --git a/src/main/java/com/teammoeg/frostedheart/util/io/codec/CompressDifferCodec.java b/src/main/java/com/teammoeg/frostedheart/util/io/codec/CompressDifferCodec.java index 191c01949..c09a74135 100644 --- a/src/main/java/com/teammoeg/frostedheart/util/io/codec/CompressDifferCodec.java +++ b/src/main/java/com/teammoeg/frostedheart/util/io/codec/CompressDifferCodec.java @@ -27,7 +27,8 @@ public DataResult> decode(DynamicOps ops, T input) { if(ops.compressMaps()) { return compressed.decode(ops, input); } - return uncompressed.decode(ops, input); + DataResult> res= uncompressed.decode(ops, input); + return res; } @Override diff --git a/src/main/java/com/teammoeg/frostedheart/util/io/codec/KeyMapCodec.java b/src/main/java/com/teammoeg/frostedheart/util/io/codec/KeyMapCodec.java new file mode 100644 index 000000000..17b92bac2 --- /dev/null +++ b/src/main/java/com/teammoeg/frostedheart/util/io/codec/KeyMapCodec.java @@ -0,0 +1,47 @@ +package com.teammoeg.frostedheart.util.io.codec; + +import java.util.function.Function; + +import com.mojang.datafixers.util.Pair; +import com.mojang.serialization.Codec; +import com.mojang.serialization.DataResult; +import com.mojang.serialization.DynamicOps; +import com.mojang.serialization.MapCodec; + +public record KeyMapCodec(String typeKey,Codec keyCodec, Function forType, Function> forCodec) implements Codec { + + + public KeyMapCodec(Codec keyCodec,Function forType, Function> forCodec) { + this("type",keyCodec, forType, forCodec); + } + public DataResult> getCodec(K type){ + MapCodec codec = forCodec.apply(type); + if (codec == null) + return DataResult.error(() -> "Cannot find valid codec for type " + type); + return DataResult.success(codec); + } + public DataResult getType(A input){ + K type = forType.apply(input); + if (type == null) + return DataResult.error(() -> "Cannot find valid codec for " + input); + return DataResult.success(type); + } + + @Override + public DataResult encode(A input, DynamicOps ops, T prefix) { + K type = forType.apply(input); + if (type == null) + return DataResult.error(() -> "Cannot find valid codec for " + input); + + + MapCodec codec = forCodec.apply(type); + if (codec == null) + return DataResult.error(() -> "Cannot find valid codec for type " + type); + return codec.encode(input, ops,ops.mapBuilder().add(ops.createString(typeKey),keyCodec.encodeStart(ops, type))).build(prefix); + } + + @Override + public DataResult> decode(DynamicOps ops, T input) { + return ops.get(input, typeKey).flatMap(t->keyCodec.parse(ops, t)).flatMap(this::getCodec).flatMap(t->ops.getMap(input).flatMap(d->t.decode(ops, d).map(o->Pair.of(o, input)))); + } +} diff --git a/src/main/java/com/teammoeg/frostedheart/util/io/registry/TypedCodecRegistry.java b/src/main/java/com/teammoeg/frostedheart/util/io/registry/TypedCodecRegistry.java index 6bab35d62..8b6ff7fb5 100644 --- a/src/main/java/com/teammoeg/frostedheart/util/io/registry/TypedCodecRegistry.java +++ b/src/main/java/com/teammoeg/frostedheart/util/io/registry/TypedCodecRegistry.java @@ -4,23 +4,30 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.function.Supplier; import com.mojang.serialization.Codec; import com.mojang.serialization.DynamicOps; +import com.mojang.serialization.MapCodec; import com.teammoeg.frostedheart.util.io.CodecUtil; import com.teammoeg.frostedheart.util.io.codec.CompressDifferCodec; +import com.teammoeg.frostedheart.util.io.codec.KeyMapCodec; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.util.Mth; public class TypedCodecRegistry extends TypeRegistry { - Map> codecs=new HashMap<>(); - List> codecList=new ArrayList<>(); - Codec byName=Codec.STRING.dispatch(o->this.typeOf(o.getClass()),this.codecs::get); - Codec byInt=Codec.INT.dispatch(this::idOf,codecList::get); - public void register(Class cls, String type,Codec codec) { - codecs.put(type, codec); - codecList.add(codec); + Map> codecs=new HashMap<>(); + List> codecList=new ArrayList<>(); + List> codecCodecList=new ArrayList<>(); + Codec byName=new KeyMapCodec(Codec.STRING,o->this.typeOf(o.getClass()),this::getCodec); + Codec byInt=Codec.INT.dispatch(this::idOf,codecCodecList::get); + public void register(Class cls, String type,MapCodec codec) { + codecs.put(type, (MapCodec) codec); + codecList.add((MapCodec) codec); + codecCodecList.add((Codec)codec.codec()); super.register(cls, type); + } public Codec byNameCodec(){ return byName; @@ -34,6 +41,11 @@ public Codec byIntCodec(){ public void write(T obj,FriendlyByteBuf buffer) { CodecUtil.writeCodec(buffer, byInt, obj); } + public MapCodec getCodec(String name){ + MapCodec selected= codecs.get(name); + System.out.println(selected); + return selected; + } public T read(FriendlyByteBuf buffer) { return CodecUtil.readCodec(buffer, byInt); } diff --git a/src/main/java/com/teammoeg/frostedheart/util/lang/FHTextIcon.java b/src/main/java/com/teammoeg/frostedheart/util/lang/FHTextIcon.java new file mode 100644 index 000000000..b712b893d --- /dev/null +++ b/src/main/java/com/teammoeg/frostedheart/util/lang/FHTextIcon.java @@ -0,0 +1,58 @@ +package com.teammoeg.frostedheart.util.lang; + +import com.teammoeg.frostedheart.FHMain; + +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.resources.ResourceLocation; + +/** + * Text icon registry. + */ +public class FHTextIcon { + + /** The ResourceLocation for our own font. */ + private static final ResourceLocation iconFont=FHMain.rl("default"); + + /** + * TextIconType Registry Object. + * + * @param code the code point + */ + public static record TextIconType(String code){ + + /** + * Gets the sole icon component. + * Must not add siblings or append to it as the style would be append to all siblings + * @return the icon + */ + public MutableComponent getIcon() { + return Lang.str(code).withStyle(t->t.withFont(iconFont)); + } + + /** + * Returns new component with icon before the specific component . + * + * @param which the original component + * @return the new component + */ + public MutableComponent appendBefore(Component which) { + return Lang.str("").append(getIcon()).append(which); + + } + + /** + * Returns new component with icon after the specific component . + * + * @param which the original component + * @return the new component + */ + public MutableComponent appendAfter(Component which) { + return Lang.str("").append(which).append(getIcon()); + } + } + + /** thermometer icon . */ + public static final TextIconType thermometer=new TextIconType("\uF500"); + +} diff --git a/src/main/java/com/teammoeg/frostedheart/util/lang/Lang.java b/src/main/java/com/teammoeg/frostedheart/util/lang/Lang.java index 43342e48f..155837e5e 100644 --- a/src/main/java/com/teammoeg/frostedheart/util/lang/Lang.java +++ b/src/main/java/com/teammoeg/frostedheart/util/lang/Lang.java @@ -87,7 +87,6 @@ public static MutableComponent str(Map map) { return str(sb.toString()); } - @Deprecated public static MutableComponent translateKey(String string, Object... args) { return Component.translatable(string, args); }