aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de
diff options
context:
space:
mode:
authorAaron <51387595+AzureAaron@users.noreply.github.com>2024-03-02 15:16:27 -0500
committerAaron <51387595+AzureAaron@users.noreply.github.com>2024-04-26 16:23:20 -0400
commit4e2924407645b04c30d4a2823a1d9d0983c2c790 (patch)
treeee6d4ba29f50d3cdd76216fee0193dad07752627 /src/main/java/de
parentcc00542e78fd87e0b554ab2a74d1cb193feabbb2 (diff)
downloadSkyblocker-4e2924407645b04c30d4a2823a1d9d0983c2c790.tar.gz
Skyblocker-4e2924407645b04c30d4a2823a1d9d0983c2c790.tar.bz2
Skyblocker-4e2924407645b04c30d4a2823a1d9d0983c2c790.zip
24w09a
Diffstat (limited to 'src/main/java/de')
-rw-r--r--src/main/java/de/hysky/skyblocker/debug/Debug.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/ArmorTrimMixin.java34
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/ComponentHolderMixin.java39
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/DyedColorComponentMixin.java (renamed from src/main/java/de/hysky/skyblocker/mixin/DyeableItemMixin.java)17
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/accessor/ItemStackAccessor.java14
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusHelper.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusProfit.java7
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java25
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/OptionDropdownWidget.java1
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyEntry.java20
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyFinderScreen.java12
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java5
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java7
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java22
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHud.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java28
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorDyeColors.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorTrims.java6
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/BackpackPreview.java69
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java14
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemStackBuilder.java83
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/itemlist/SearchResultsWidget.java10
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNav.java7
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/special/SpecialEffects.java58
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/ItemUtils.java64
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/datafixer/ItemStackComponentizationFixer.java26
27 files changed, 316 insertions, 270 deletions
diff --git a/src/main/java/de/hysky/skyblocker/debug/Debug.java b/src/main/java/de/hysky/skyblocker/debug/Debug.java
index 5a9d221b..31823ab0 100644
--- a/src/main/java/de/hysky/skyblocker/debug/Debug.java
+++ b/src/main/java/de/hysky/skyblocker/debug/Debug.java
@@ -23,7 +23,7 @@ public class Debug {
SnapshotDebug.init();
ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(literal(SkyblockerMod.NAMESPACE).then(literal("debug")
.then(dumpPlayersCommand())
- .then(ItemUtils.dumpHeldItemNbtCommand())
+ .then(ItemUtils.dumpHeldItemCommand())
)));
}
}
diff --git a/src/main/java/de/hysky/skyblocker/mixin/ArmorTrimMixin.java b/src/main/java/de/hysky/skyblocker/mixin/ArmorTrimMixin.java
deleted file mode 100644
index e13c41ee..00000000
--- a/src/main/java/de/hysky/skyblocker/mixin/ArmorTrimMixin.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package de.hysky.skyblocker.mixin;
-
-import com.llamalad7.mixinextras.injector.ModifyReturnValue;
-import com.llamalad7.mixinextras.sugar.Local;
-import de.hysky.skyblocker.config.SkyblockerConfigManager;
-import de.hysky.skyblocker.skyblock.item.CustomArmorTrims;
-import de.hysky.skyblocker.utils.ItemUtils;
-import de.hysky.skyblocker.utils.Utils;
-import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
-import net.minecraft.item.ItemStack;
-import net.minecraft.item.trim.ArmorTrim;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.injection.At;
-
-import java.util.Optional;
-
-@Mixin(ArmorTrim.class)
-public class ArmorTrimMixin {
-
- @ModifyReturnValue(method = "getTrim", at = @At("RETURN"))
- private static Optional<ArmorTrim> skyblocker$customArmorTrims(@SuppressWarnings("OptionalUsedAsFieldOrParameterType") Optional<ArmorTrim> original, @Local(argsOnly = true) ItemStack stack) {
- if (Utils.isOnSkyblock()) {
- Object2ObjectOpenHashMap<String, CustomArmorTrims.ArmorTrimId> customTrims = SkyblockerConfigManager.get().general.customArmorTrims;
- String itemUuid = ItemUtils.getItemUuid(stack);
-
- if (customTrims.containsKey(itemUuid)) {
- CustomArmorTrims.ArmorTrimId trimKey = customTrims.get(itemUuid);
- return CustomArmorTrims.TRIMS_CACHE.getOrDefault(trimKey, original);
- }
- }
-
- return original;
- }
-}
diff --git a/src/main/java/de/hysky/skyblocker/mixin/ComponentHolderMixin.java b/src/main/java/de/hysky/skyblocker/mixin/ComponentHolderMixin.java
new file mode 100644
index 00000000..c8c57d6d
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/mixin/ComponentHolderMixin.java
@@ -0,0 +1,39 @@
+package de.hysky.skyblocker.mixin;
+
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+
+import com.llamalad7.mixinextras.injector.ModifyReturnValue;
+
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.skyblock.item.CustomArmorTrims;
+import de.hysky.skyblocker.utils.ItemUtils;
+import de.hysky.skyblocker.utils.Utils;
+import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
+import net.minecraft.component.ComponentHolder;
+import net.minecraft.component.DataComponentType;
+import net.minecraft.component.DataComponentTypes;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.trim.ArmorTrim;
+
+@Mixin(ComponentHolder.class)
+public interface ComponentHolderMixin {
+
+ @SuppressWarnings("unchecked")
+ @ModifyReturnValue(method = "get", at = @At("RETURN"))
+ private <T> T skyblocker$customArmorTrims(T original, DataComponentType<? extends T> dataComponentType) {
+ if (Utils.isOnSkyblock() && ((Object) this) instanceof ItemStack stack) {
+ if (dataComponentType == DataComponentTypes.TRIM) {
+ Object2ObjectOpenHashMap<String, CustomArmorTrims.ArmorTrimId> customTrims = SkyblockerConfigManager.get().general.customArmorTrims;
+ String itemUuid = ItemUtils.getItemUuid(stack);
+
+ if (customTrims.containsKey(itemUuid)) {
+ CustomArmorTrims.ArmorTrimId trimKey = customTrims.get(itemUuid);
+ return (T) CustomArmorTrims.TRIMS_CACHE.getOrDefault(trimKey, (ArmorTrim) original);
+ }
+ }
+ }
+
+ return original;
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/mixin/DyeableItemMixin.java b/src/main/java/de/hysky/skyblocker/mixin/DyedColorComponentMixin.java
index b20b58b5..2682fc6d 100644
--- a/src/main/java/de/hysky/skyblocker/mixin/DyeableItemMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixin/DyedColorComponentMixin.java
@@ -1,27 +1,32 @@
package de.hysky.skyblocker.mixin;
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
+import com.llamalad7.mixinextras.sugar.Local;
+
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.skyblock.item.CustomArmorAnimatedDyes;
import de.hysky.skyblocker.utils.ItemUtils;
import de.hysky.skyblocker.utils.Utils;
-import net.minecraft.item.DyeableItem;
+import net.minecraft.component.type.DyedColorComponent;
import net.minecraft.item.ItemStack;
+import net.minecraft.util.math.ColorHelper;
+
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
-@Mixin(DyeableItem.class)
-public interface DyeableItemMixin {
+@Mixin(DyedColorComponent.class)
+public record DyedColorComponentMixin() {
+
@ModifyReturnValue(method = "getColor", at = @At("RETURN"))
- private static int skyblocker$customDyeColor(int originalColor, ItemStack stack) {
+ private static int skyblocker$customDyeColor(int originalColor, @Local(argsOnly = true) ItemStack stack) {
if (Utils.isOnSkyblock()) {
String itemUuid = ItemUtils.getItemUuid(stack);
if (SkyblockerConfigManager.get().general.customAnimatedDyes.containsKey(itemUuid)) {
- return CustomArmorAnimatedDyes.animateColorTransition(SkyblockerConfigManager.get().general.customAnimatedDyes.get(itemUuid));
+ return ColorHelper.Argb.fullAlpha(CustomArmorAnimatedDyes.animateColorTransition(SkyblockerConfigManager.get().general.customAnimatedDyes.get(itemUuid)));
}
- return SkyblockerConfigManager.get().general.customDyeColors.getOrDefault(itemUuid, originalColor);
+ return ColorHelper.Argb.fullAlpha(SkyblockerConfigManager.get().general.customDyeColors.getOrDefault(itemUuid, originalColor));
}
return originalColor;
diff --git a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java
index 7d2f849e..73a0bfdb 100644
--- a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java
@@ -205,7 +205,7 @@ public abstract class HandledScreenMixin<T extends ScreenHandler> extends Screen
// Prevent selling to NPC shops
ItemStack sellStack = this.handler.slots.get(49).getStack();
- if (sellStack.getName().getString().equals("Sell Item") || ItemUtils.getNbtTooltip(sellStack, text -> text.contains("buyback")) != null) {
+ if (sellStack.getName().getString().equals("Sell Item") || ItemUtils.getLoreLineIf(sellStack, text -> text.contains("buyback")) != null) {
if (slotId != 49 && ItemProtection.isItemProtected(stack)) {
ci.cancel();
return;
diff --git a/src/main/java/de/hysky/skyblocker/mixin/accessor/ItemStackAccessor.java b/src/main/java/de/hysky/skyblocker/mixin/accessor/ItemStackAccessor.java
deleted file mode 100644
index e3bd69aa..00000000
--- a/src/main/java/de/hysky/skyblocker/mixin/accessor/ItemStackAccessor.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package de.hysky.skyblocker.mixin.accessor;
-
-import net.minecraft.item.ItemStack;
-import net.minecraft.text.Style;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.gen.Accessor;
-
-@Mixin(ItemStack.class)
-public interface ItemStackAccessor {
- @Accessor
- static Style getLORE_STYLE() {
- throw new UnsupportedOperationException();
- }
-}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusHelper.java
index 01422770..5bd44707 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusHelper.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusHelper.java
@@ -1,8 +1,10 @@
package de.hysky.skyblocker.skyblock.dungeon;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.utils.ItemUtils;
import de.hysky.skyblocker.utils.render.gui.ColorHighlight;
import de.hysky.skyblocker.utils.render.gui.ContainerSolver;
+import net.minecraft.component.DataComponentTypes;
import net.minecraft.item.ItemStack;
import java.util.ArrayList;
@@ -25,10 +27,10 @@ public class CroesusHelper extends ContainerSolver {
List<ColorHighlight> highlights = new ArrayList<>();
for (Map.Entry<Integer, ItemStack> entry : slots.entrySet()) {
ItemStack stack = entry.getValue();
- if (stack != null && stack.getNbt() != null) {
- if (stack.getNbt().toString().contains("Opened Chest:")) {
+ if (stack != null && stack.contains(DataComponentTypes.LORE)) {
+ if (ItemUtils.getLoreLineIf(stack, s -> s.contains("Opened Chest:")) != null) {
highlights.add(ColorHighlight.gray(entry.getKey()));
- } else if (stack.getNbt().toString().contains("No more Chests to open!")) {
+ } else if (ItemUtils.getLoreLineIf(stack, s -> s.contains("No more Chests to open!")) != null) {
highlights.add(ColorHighlight.red(entry.getKey()));
}
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusProfit.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusProfit.java
index ca166915..8933a447 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusProfit.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusProfit.java
@@ -6,6 +6,7 @@ import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType;
import de.hysky.skyblocker.utils.ItemUtils;
import de.hysky.skyblocker.utils.render.gui.ColorHighlight;
import de.hysky.skyblocker.utils.render.gui.ContainerSolver;
+import net.minecraft.component.DataComponentTypes;
import net.minecraft.item.ItemStack;
import net.minecraft.text.Text;
import org.jetbrains.annotations.NotNull;
@@ -37,7 +38,7 @@ public class CroesusProfit extends ContainerSolver {
for (Map.Entry<Integer, ItemStack> entry : slots.entrySet()) {
ItemStack stack = entry.getValue();
- if (stack != null && stack.getNbt() != null && stack.getName().toString().contains("Chest")) {
+ if (stack != null && stack.contains(DataComponentTypes.LORE) && ItemUtils.getLoreLineIf(stack, s -> s.contains("Chest")) != null) {
long value = valueChest(stack);
if (value > bestValue) {
secondBestChest = bestChest;
@@ -53,7 +54,7 @@ public class CroesusProfit extends ContainerSolver {
for (Map.Entry<Integer, ItemStack> entry : slots.entrySet()) {
ItemStack stack = entry.getValue();
- if (stack != null && stack.getNbt() != null) {
+ if (stack != null && stack.contains(DataComponentTypes.LORE)) {
if (stack.equals(bestChest)) {
highlights.add(ColorHighlight.green(entry.getKey()));
} else if (stack.equals(secondBestChest) && secondBestValue > dungeonKeyPriceData) {
@@ -71,7 +72,7 @@ public class CroesusProfit extends ContainerSolver {
List<String> chestItems = new ArrayList<>();
boolean processingContents = false;
- for (Text line : ItemUtils.getNbtTooltips(chest)) {
+ for (Text line : ItemUtils.getLore(chest)) {
String lineString = line.getString();
if (lineString.contains("Contents")) {
processingContents = true;
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java
index 878b7a35..7a6cdcd0 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java
@@ -14,14 +14,16 @@ import net.minecraft.client.render.LightmapTextureManager;
import net.minecraft.client.render.MapRenderer;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.util.math.MatrixStack;
+import net.minecraft.component.DataComponentTypes;
+import net.minecraft.component.type.MapIdComponent;
import net.minecraft.item.FilledMapItem;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.item.map.MapState;
public class DungeonMap {
- private static final int DEFAULT_MAP_ID = 1024;
- private static Integer cachedMapId = null;
+ private static final MapIdComponent DEFAULT_MAP_ID_COMPONENT = new MapIdComponent(1024);
+ private static MapIdComponent cachedMapIdComponent = null;
public static void init() {
HudRenderEvents.AFTER_MAIN_HUD.register((context, tickDelta) -> render(context));
@@ -35,11 +37,11 @@ public class DungeonMap {
ClientPlayConnectionEvents.JOIN.register((handler, sender, client) -> reset());
}
- private static void render(MatrixStack matrices) {
+ public static void render(MatrixStack matrices) {
MinecraftClient client = MinecraftClient.getInstance();
if (client.player == null || client.world == null) return;
- int mapId = getMapId(client.player.getInventory().main.get(8));
+ MapIdComponent mapId = getMapIdComponent(client.player.getInventory().main.get(8));
MapState state = FilledMapItem.getMapState(mapId, client.world);
if (state == null) return;
@@ -58,13 +60,12 @@ public class DungeonMap {
matrices.pop();
}
- public static int getMapId(ItemStack stack) {
- if (stack.isOf(Items.FILLED_MAP)) {
- @SuppressWarnings("DataFlowIssue")
- int mapId = FilledMapItem.getMapId(stack);
- cachedMapId = mapId;
- return mapId;
- } else return cachedMapId != null ? cachedMapId : DEFAULT_MAP_ID;
+ public static MapIdComponent getMapIdComponent(ItemStack stack) {
+ if (stack.isOf(Items.FILLED_MAP) && stack.contains(DataComponentTypes.MAP_ID)) {
+ MapIdComponent mapIdComponent = stack.get(DataComponentTypes.MAP_ID);
+ cachedMapIdComponent = mapIdComponent;
+ return mapIdComponent;
+ } else return cachedMapIdComponent != null ? cachedMapIdComponent : DEFAULT_MAP_ID_COMPONENT;
}
private static void render(DrawContext context) {
@@ -74,6 +75,6 @@ public class DungeonMap {
}
private static void reset() {
- cachedMapId = null;
+ cachedMapIdComponent = null;
}
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/OptionDropdownWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/OptionDropdownWidget.java
index 64e45283..19241d58 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/OptionDropdownWidget.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/OptionDropdownWidget.java
@@ -29,7 +29,6 @@ public class OptionDropdownWidget extends ElementListWidget<OptionDropdownWidget
this.screen = screen;
this.slotId = slotId;
setX(x);
- setRenderBackground(false);
setRenderHeader(true, 25);
this.name = name;
this.selectedOption = selectedOption;
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyEntry.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyEntry.java
index b53047d8..ab77d122 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyEntry.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyEntry.java
@@ -1,6 +1,6 @@
package de.hysky.skyblocker.skyblock.dungeon.partyfinder;
-import com.mojang.brigadier.exceptions.CommandSyntaxException;
+import com.mojang.authlib.properties.PropertyMap;
import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.mixin.accessor.SkullBlockEntityAccessor;
import net.minecraft.client.MinecraftClient;
@@ -12,10 +12,10 @@ import net.minecraft.client.gui.Selectable;
import net.minecraft.client.gui.widget.ElementListWidget;
import net.minecraft.client.util.DefaultSkinHelper;
import net.minecraft.client.util.math.MatrixStack;
+import net.minecraft.component.DataComponentTypes;
+import net.minecraft.component.type.ProfileComponent;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
-import net.minecraft.nbt.NbtCompound;
-import net.minecraft.nbt.StringNbtReader;
import net.minecraft.text.Style;
import net.minecraft.text.Text;
import net.minecraft.text.TextColor;
@@ -25,6 +25,8 @@ import net.minecraft.util.Identifier;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
+import java.util.Optional;
+import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -38,7 +40,7 @@ public class PartyEntry extends ElementListWidget.Entry<PartyEntry> {
String floor = "???";
String dungeon = "???";
String note = "";
- NbtCompound floorSkullNBT = new NbtCompound();
+ PropertyMap floorSkullProperties = new PropertyMap();
Identifier partyLeaderSkin = DefaultSkinHelper.getTexture();
Player[] partyMembers = new Player[4];
@@ -87,14 +89,14 @@ public class PartyEntry extends ElementListWidget.Entry<PartyEntry> {
if (PartyFinderScreen.floorIconsMaster == null || PartyFinderScreen.floorIconsNormal == null) continue;
if (dungeon.contains("Master Mode")) {
try {
- floorSkullNBT = StringNbtReader.parse(PartyEntryListWidget.BASE_SKULL_NBT.replace("%TEXTURE%", PartyFinderScreen.floorIconsMaster.getOrDefault(floor.toLowerCase(), "")));
- } catch (CommandSyntaxException e) {
+ floorSkullProperties = PartyFinderScreen.floorIconsMaster.getOrDefault(floor.toLowerCase(), new PropertyMap());
+ } catch (Exception e) {
throw new RuntimeException(e);
}
} else {
try {
- floorSkullNBT = StringNbtReader.parse(PartyEntryListWidget.BASE_SKULL_NBT.replace("%TEXTURE%", PartyFinderScreen.floorIconsNormal.getOrDefault(floor.toLowerCase(), "")));
- } catch (CommandSyntaxException e) {
+ floorSkullProperties = PartyFinderScreen.floorIconsNormal.getOrDefault(floor.toLowerCase(), new PropertyMap());
+ } catch (Exception e) {
throw new RuntimeException(e);
}
}
@@ -226,7 +228,7 @@ public class PartyEntry extends ElementListWidget.Entry<PartyEntry> {
}
}
ItemStack stack = new ItemStack(Items.PLAYER_HEAD);
- stack.setNbt(floorSkullNBT);
+ stack.set(DataComponentTypes.PROFILE, new ProfileComponent("SkyblockerCustomPF", Optional.of(UUID.randomUUID()), floorSkullProperties));
context.drawItem(stack, 317, 3);
int textWidth = textRenderer.getWidth(floor);
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyFinderScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyFinderScreen.java
index 16be2b67..98ab88c0 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyFinderScreen.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyFinderScreen.java
@@ -1,7 +1,10 @@
package de.hysky.skyblocker.skyblock.dungeon.partyfinder;
import com.google.gson.JsonObject;
+import com.mojang.authlib.properties.PropertyMap;
+
import de.hysky.skyblocker.SkyblockerMod;
+import de.hysky.skyblocker.utils.ItemUtils;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
import net.minecraft.block.entity.SignBlockEntity;
import net.minecraft.client.MinecraftClient;
@@ -99,8 +102,8 @@ public class PartyFinderScreen extends Screen {
private boolean waitingForServer = false;
- public static Map<String, String> floorIconsNormal = null;
- public static Map<String, String> floorIconsMaster = null;
+ public static Map<String, PropertyMap> floorIconsNormal = null;
+ public static Map<String, PropertyMap> floorIconsMaster = null;
public static void initClass() {
ClientLifecycleEvents.CLIENT_STARTED.register(client -> {
@@ -110,8 +113,8 @@ public class PartyFinderScreen extends Screen {
floorIconsMaster = new HashMap<>();
try (BufferedReader skullTextureReader = client.getResourceManager().openAsReader(new Identifier(SkyblockerMod.NAMESPACE, "dungeons/catacombs/floorskulls.json"))) {
JsonObject json = SkyblockerMod.GSON.fromJson(skullTextureReader, JsonObject.class);
- json.getAsJsonObject("normal").asMap().forEach((s, jsonElement) -> floorIconsNormal.put(s, jsonElement.getAsString()));
- json.getAsJsonObject("master").asMap().forEach((s, jsonElement) -> floorIconsMaster.put(s, jsonElement.getAsString()));
+ json.getAsJsonObject("normal").asMap().forEach((s, tex) -> floorIconsNormal.put(s, ItemUtils.propertyMapWithTexture(tex.getAsString())));
+ json.getAsJsonObject("master").asMap().forEach((s, tex) -> floorIconsMaster.put(s, ItemUtils.propertyMapWithTexture(tex.getAsString())));
LOGGER.debug("[Skyblocker] Dungeons floor skull textures json loaded");
} catch (Exception e) {
LOGGER.error("[Skyblocker] Failed to load dungeons floor skull textures json", e);
@@ -136,7 +139,6 @@ public class PartyFinderScreen extends Screen {
int widget_height = (int) (this.height * 0.8);
int entryListTopY = Math.max(43, (int) (height * 0.1));
this.partyEntryListWidget = new PartyEntryListWidget(client, width, widget_height, entryListTopY, 68);
- partyEntryListWidget.setRenderBackground(false);
// Search field
this.searchField = new TextFieldWidget(textRenderer, partyEntryListWidget.getRowLeft() + 12, entryListTopY - 12, partyEntryListWidget.getRowWidth() - 12 * 3 - 6, 12, Text.literal("Search..."));
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java
index c90f1134..8bb22e7e 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java
@@ -40,6 +40,7 @@ import net.minecraft.command.CommandSource;
import net.minecraft.command.argument.BlockPosArgumentType;
import net.minecraft.command.argument.PosArgument;
import net.minecraft.command.argument.TextArgumentType;
+import net.minecraft.component.DataComponentTypes;
import net.minecraft.entity.Entity;
import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.LivingEntity;
@@ -462,7 +463,7 @@ public class DungeonManager {
context.getSource().sendError(Constants.PREFIX.get().append("§cFailed to get dungeon map."));
return Command.SINGLE_SUCCESS;
}
- MapState map = FilledMapItem.getMapState(FilledMapItem.getMapId(stack), client.world);
+ MapState map = FilledMapItem.getMapState(stack.get(DataComponentTypes.MAP_ID), client.world);
if (map == null) {
context.getSource().sendError(Constants.PREFIX.get().append("§cFailed to get dungeon map state."));
return Command.SINGLE_SUCCESS;
@@ -539,7 +540,7 @@ public class DungeonManager {
physicalEntrancePos = DungeonMapUtils.getPhysicalRoomPos(playerPos);
currentRoom = newRoom(Room.Type.ENTRANCE, physicalEntrancePos);
}
- MapState map = FilledMapItem.getMapState(DungeonMap.getMapId(client.player.getInventory().main.get(8)), client.world);
+ MapState map = FilledMapItem.getMapState(DungeonMap.getMapIdComponent(client.player.getInventory().main.get(8)), client.world);
if (map == null) {
return;
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java
index 30de9a48..10dc2b5c 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java
@@ -4,6 +4,8 @@ import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.skyblock.tabhud.widget.Widget;
import de.hysky.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent;
import de.hysky.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent;
+import net.minecraft.component.DataComponentTypes;
+import net.minecraft.component.type.ProfileComponent;
import net.minecraft.enchantment.Enchantments;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
@@ -12,6 +14,9 @@ import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import java.text.NumberFormat;
+import java.util.Optional;
+
+import com.mojang.authlib.properties.PropertyMap;
public class EndHudWidget extends Widget {
private static final MutableText TITLE = Text.literal("The End").formatted(Formatting.LIGHT_PURPLE, Formatting.BOLD);
@@ -29,7 +34,7 @@ public class EndHudWidget extends Widget {
private static final ItemStack POPPY = new ItemStack(Items.POPPY);
static {
- ENDERMAN_HEAD.getOrCreateNbt().putString("SkullOwner", "MHF_Enderman");
+ ENDERMAN_HEAD.set(DataComponentTypes.PROFILE, new ProfileComponent("MHF_Enderman", Optional.empty(), new PropertyMap()));
POPPY.addEnchantment(Enchantments.INFINITY, 1);
INSTANCE.setX(SkyblockerConfigManager.get().locations.end.x);
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java
index 12ae468f..9650e39b 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java
@@ -6,14 +6,15 @@ import de.hysky.skyblocker.skyblock.dungeon.LividColor;
import de.hysky.skyblocker.utils.SlayerUtils;
import de.hysky.skyblocker.utils.Utils;
import de.hysky.skyblocker.utils.render.culling.OcclusionCulling;
+import net.minecraft.component.DataComponentTypes;
+import net.minecraft.component.type.ProfileComponent;
import net.minecraft.entity.Entity;
import net.minecraft.entity.decoration.ArmorStandEntity;
import net.minecraft.entity.mob.EndermanEntity;
import net.minecraft.entity.passive.BatEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
-import net.minecraft.nbt.NbtCompound;
-import net.minecraft.nbt.NbtElement;
+import net.minecraft.item.Items;
import net.minecraft.predicate.entity.EntityPredicates;
import net.minecraft.util.Formatting;
import net.minecraft.util.math.Box;
@@ -21,6 +22,8 @@ import net.minecraft.world.World;
import java.util.List;
+import com.mojang.authlib.properties.Property;
+
public class MobGlow {
public static boolean shouldMobGlow(Entity entity) {
@@ -114,19 +117,18 @@ public class MobGlow {
for (ItemStack armorItem : entity.getArmorItems()) {
// hacky way to check if an item is a player head w/o
// some shenanigans
- if (!armorItem.toString().startsWith("1 player_head"))
+ if (!armorItem.isOf(Items.PLAYER_HEAD))
continue;
// eb07594e2df273921a77c101d0bfdfa1115abed5b9b2029eb496ceba9bdbb4b3 is texture id for the nukekubi head,
// compare against it to exclusively find armorstands that are nukekubi heads
- NbtCompound skullOwner = armorItem.getSubNbt("SkullOwner");
- if (skullOwner != null) {
+ ProfileComponent profile = armorItem.get(DataComponentTypes.PROFILE);
+ if (profile != null) {
// get the texture of the nukekubi head item itself and compare it
- String texture = skullOwner
- .getCompound("Properties")
- .getList("textures", NbtElement.COMPOUND_TYPE)
- .getCompound(0)
- .getString("Value");
+ String texture = profile.properties().get("textures").stream()
+ .map(Property::value)
+ .findFirst()
+ .orElse("None");
retu