Update to 1.21.5
UUID format changed, new data files are not compatible with old versions
This commit is contained in:
		@@ -1,5 +1,5 @@
 | 
			
		||||
plugins {
 | 
			
		||||
    id 'fabric-loom' version '1.7-SNAPSHOT'
 | 
			
		||||
    id 'fabric-loom' version '1.10-SNAPSHOT'
 | 
			
		||||
    id 'maven-publish'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,20 +2,20 @@
 | 
			
		||||
org.gradle.jvmargs=-Xmx1G
 | 
			
		||||
# Fabric Properties
 | 
			
		||||
# check these on https://modmuss50.me/fabric.html
 | 
			
		||||
minecraft_version=1.21.4
 | 
			
		||||
yarn_mappings=1.21.4+build.1
 | 
			
		||||
loader_version=0.16.9
 | 
			
		||||
minecraft_version=1.21.5
 | 
			
		||||
yarn_mappings=1.21.5+build.1
 | 
			
		||||
loader_version=0.16.13
 | 
			
		||||
# Mod Properties
 | 
			
		||||
mod_version=1.5.3
 | 
			
		||||
mod_version=1.5.4
 | 
			
		||||
maven_group=systems.brn
 | 
			
		||||
archives_base_name=servershop
 | 
			
		||||
# Dependencies
 | 
			
		||||
# check this on https://modmuss50.me/fabric.html
 | 
			
		||||
fabric_version=0.110.5+1.21.4
 | 
			
		||||
fabric_version=0.120.0+1.21.5
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Dependencies
 | 
			
		||||
polymer_version=0.11.0+1.21.4-rc1
 | 
			
		||||
server_translations_api_version=2.4.0+1.21.2-rc1
 | 
			
		||||
servergui_version=1.8.1+1.21.4
 | 
			
		||||
placeholder_api=2.5.1+1.21.3
 | 
			
		||||
polymer_version=0.12.3+1.21.5
 | 
			
		||||
server_translations_api_version=2.5.0+1.21.5-rc1
 | 
			
		||||
servergui_version=1.9.0+1.21.5
 | 
			
		||||
placeholder_api=2.6.2+1.21.5
 | 
			
		||||
							
								
								
									
										2
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							@@ -1,6 +1,6 @@
 | 
			
		||||
distributionBase=GRADLE_USER_HOME
 | 
			
		||||
distributionPath=wrapper/dists
 | 
			
		||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
 | 
			
		||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
 | 
			
		||||
networkTimeout=10000
 | 
			
		||||
validateDistributionUrl=true
 | 
			
		||||
zipStoreBase=GRADLE_USER_HOME
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@ import net.minecraft.entity.player.PlayerInventory;
 | 
			
		||||
import net.minecraft.inventory.Inventory;
 | 
			
		||||
import net.minecraft.item.Item;
 | 
			
		||||
import net.minecraft.item.ItemStack;
 | 
			
		||||
import net.minecraft.nbt.NbtCompound;
 | 
			
		||||
import net.minecraft.server.MinecraftServer;
 | 
			
		||||
import net.minecraft.server.network.ServerPlayerEntity;
 | 
			
		||||
import net.minecraft.text.*;
 | 
			
		||||
@@ -19,6 +20,7 @@ import systems.brn.servershop.ServerShop;
 | 
			
		||||
import systems.brn.servershop.lib.records.AuctionRecord;
 | 
			
		||||
import systems.brn.servershop.lib.records.ItemPriceRecord;
 | 
			
		||||
 | 
			
		||||
import java.nio.ByteBuffer;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
 | 
			
		||||
public class Util {
 | 
			
		||||
@@ -48,8 +50,8 @@ public class Util {
 | 
			
		||||
        int maxInsert = 0;
 | 
			
		||||
 | 
			
		||||
        // Iterate through the slots in the player's inventory
 | 
			
		||||
        for (int i = 0; i < inventory.main.size(); i++) {
 | 
			
		||||
            ItemStack slotStack = inventory.main.get(i);
 | 
			
		||||
        for (int i = 0; i < inventory.getMainStacks().size(); i++) {
 | 
			
		||||
            ItemStack slotStack = inventory.getMainStacks().get(i);
 | 
			
		||||
            maxInsert = canInsertToStack(slotStack, itemStackIn, maxInsert);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -95,7 +97,7 @@ public class Util {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static ItemStack insertStackIntoInventory(PlayerInventory playerInventory, ItemStack stack) {
 | 
			
		||||
        DefaultedList<ItemStack> inventory = playerInventory.main;
 | 
			
		||||
        DefaultedList<ItemStack> inventory = playerInventory.getMainStacks();
 | 
			
		||||
        // First, try to merge with existing stacks
 | 
			
		||||
        for (ItemStack slotStack : inventory) {
 | 
			
		||||
            if (canCombine(slotStack, stack)) {
 | 
			
		||||
@@ -442,4 +444,36 @@ public class Util {
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public static void putUUID(NbtCompound nbtCompound, String name, UUID uuid) {
 | 
			
		||||
        Objects.requireNonNull(uuid, "UUID cannot be null");
 | 
			
		||||
        ByteBuffer buffer = ByteBuffer.allocate(16);
 | 
			
		||||
        buffer.putLong(uuid.getMostSignificantBits());
 | 
			
		||||
        buffer.putLong(uuid.getLeastSignificantBits());
 | 
			
		||||
        nbtCompound.putByteArray(name, buffer.array());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static Optional<UUID> getUUID(NbtCompound nbtCompound, String name) {
 | 
			
		||||
        Optional<byte[]> bytesOpt = nbtCompound.getByteArray(name);
 | 
			
		||||
        if (bytesOpt.isPresent()) {
 | 
			
		||||
            byte[] bytes = bytesOpt.get();
 | 
			
		||||
            if (bytes.length == 16) {
 | 
			
		||||
                ByteBuffer buffer = ByteBuffer.wrap(bytes);
 | 
			
		||||
                long mostSigBits = buffer.getLong();
 | 
			
		||||
                long leastSigBits = buffer.getLong();
 | 
			
		||||
                return Optional.of(new UUID(mostSigBits, leastSigBits));
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            Optional<int[]> intsOpt = nbtCompound.getIntArray(name);
 | 
			
		||||
            if (intsOpt.isPresent() && intsOpt.get().length == 4) {
 | 
			
		||||
                int[] ints = intsOpt.get();
 | 
			
		||||
                long mostSigBits = ((long) ints[0] << 32) | (ints[1] & 0xFFFFFFFFL);
 | 
			
		||||
                long leastSigBits = ((long) ints[2] << 32) | (ints[3] & 0xFFFFFFFFL);
 | 
			
		||||
                return Optional.of(new UUID(mostSigBits, leastSigBits));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return Optional.empty();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ import net.minecraft.server.MinecraftServer;
 | 
			
		||||
import java.util.Optional;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import static systems.brn.servershop.lib.Util.getGameProfile;
 | 
			
		||||
import static systems.brn.servershop.lib.Util.*;
 | 
			
		||||
 | 
			
		||||
public record AuctionRecord(double buyPrice, ItemStack stack, UUID sellerUUID) {
 | 
			
		||||
 | 
			
		||||
@@ -18,7 +18,7 @@ public record AuctionRecord(double buyPrice, ItemStack stack, UUID sellerUUID) {
 | 
			
		||||
    public NbtCompound toNbt(RegistryWrapper.WrapperLookup wrapperLookup) {
 | 
			
		||||
        NbtCompound nbt = new NbtCompound();
 | 
			
		||||
        nbt.putDouble("BuyPrice", this.buyPrice);
 | 
			
		||||
        nbt.putUuid("SellerUUID", sellerUUID);
 | 
			
		||||
        putUUID(nbt, "SellerUUID", sellerUUID);
 | 
			
		||||
 | 
			
		||||
        // Serialize the ItemStack to NBT and add it to the compound
 | 
			
		||||
        NbtElement stackNbt = stack.toNbt(wrapperLookup);
 | 
			
		||||
@@ -32,15 +32,15 @@ public record AuctionRecord(double buyPrice, ItemStack stack, UUID sellerUUID) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static AuctionRecord fromNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup wrapperLookup) {
 | 
			
		||||
        double buyPrice = nbt.getFloat("BuyPrice");
 | 
			
		||||
        UUID sellerUUID = nbt.getUuid("SellerUUID");
 | 
			
		||||
        double buyPrice = nbt.getFloat("BuyPrice", 0);
 | 
			
		||||
 | 
			
		||||
        Optional<UUID> sellerUUID = getUUID(nbt, "SellerUUID");
 | 
			
		||||
 | 
			
		||||
        // Deserialize the ItemStack from the NBT
 | 
			
		||||
        NbtElement stackElement = nbt.get("ItemStack");
 | 
			
		||||
 | 
			
		||||
        Optional<ItemStack> stack = ItemStack.fromNbt(wrapperLookup, stackElement);
 | 
			
		||||
        return stack.map(itemStack -> new AuctionRecord(buyPrice, itemStack, sellerUUID)).orElse(null);
 | 
			
		||||
 | 
			
		||||
        return sellerUUID.flatMap(uuid -> stack.map(itemStack -> new AuctionRecord(buyPrice, itemStack, uuid))).orElse(null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -26,8 +26,8 @@ public record ItemPriceRecord(double buyPrice, double sellPrice, ItemStack stack
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static ItemPriceRecord fromNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup wrapperLookup) {
 | 
			
		||||
        double buyPrice = nbt.getFloat("BuyPrice");
 | 
			
		||||
        double sellPrice = nbt.getFloat("SellPrice");
 | 
			
		||||
        double buyPrice = nbt.getFloat("BuyPrice", 0);
 | 
			
		||||
        double sellPrice = nbt.getFloat("SellPrice", 0);
 | 
			
		||||
 | 
			
		||||
        if (sellPrice > buyPrice && buyPrice != 0) {
 | 
			
		||||
            buyPrice = sellPrice;
 | 
			
		||||
 
 | 
			
		||||
@@ -119,7 +119,7 @@ public class AuctionStorage {
 | 
			
		||||
        try {
 | 
			
		||||
            NbtCompound nbtCompound = NbtIo.read(auctionStorageFIle.toPath());
 | 
			
		||||
            if (nbtCompound != null && nbtCompound.contains("Auctions") && auctionStorageFIle.exists()) {
 | 
			
		||||
                NbtList nbtList = nbtCompound.getList("Auctions", 10); // 10 is the type ID for NbtCompound
 | 
			
		||||
                NbtList nbtList = nbtCompound.getListOrEmpty("Auctions"); // 10 is the type ID for NbtCompound
 | 
			
		||||
                for (NbtElement element : nbtList) {
 | 
			
		||||
                    if (element instanceof NbtCompound nbt) {
 | 
			
		||||
                        AuctionRecord auctionRecord = AuctionRecord.fromNbt(nbt, wrapperLookup);
 | 
			
		||||
 
 | 
			
		||||
@@ -7,11 +7,15 @@ import net.minecraft.text.Text;
 | 
			
		||||
import net.minecraft.util.WorldSavePath;
 | 
			
		||||
 | 
			
		||||
import java.io.*;
 | 
			
		||||
import java.util.Optional;
 | 
			
		||||
import java.util.Scanner;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
import java.util.concurrent.ConcurrentHashMap;
 | 
			
		||||
import java.util.concurrent.locks.ReentrantLock;
 | 
			
		||||
 | 
			
		||||
import static systems.brn.servershop.lib.Util.getUUID;
 | 
			
		||||
import static systems.brn.servershop.lib.Util.putUUID;
 | 
			
		||||
 | 
			
		||||
public class BalanceStorage {
 | 
			
		||||
    public final ConcurrentHashMap<UUID, Double> balances = new ConcurrentHashMap<>();
 | 
			
		||||
    public final MinecraftServer server;
 | 
			
		||||
@@ -70,7 +74,7 @@ public class BalanceStorage {
 | 
			
		||||
            NbtList nbtList = new NbtList();
 | 
			
		||||
            for (UUID uuid : balances.keySet()) {
 | 
			
		||||
                NbtCompound nbtCompound = new NbtCompound();
 | 
			
		||||
                nbtCompound.putUuid("UUID", uuid);
 | 
			
		||||
                putUUID(nbtCompound, "UUID", uuid);
 | 
			
		||||
                nbtCompound.putDouble("Balance", balances.get(uuid));
 | 
			
		||||
                nbtList.add(nbtCompound);
 | 
			
		||||
            }
 | 
			
		||||
@@ -98,12 +102,14 @@ public class BalanceStorage {
 | 
			
		||||
            try {
 | 
			
		||||
                NbtCompound root = NbtIo.read(balanceStorageFile.toPath());
 | 
			
		||||
                if (root != null) {
 | 
			
		||||
                    NbtList nbtList = root.getList("Balances", 10);
 | 
			
		||||
                    NbtList nbtList = root.getListOrEmpty("Balances");
 | 
			
		||||
                    for (NbtElement element : nbtList) {
 | 
			
		||||
                        if (element instanceof NbtCompound nbt) {
 | 
			
		||||
                            UUID uuid = nbt.getUuid("UUID");
 | 
			
		||||
                            double balance = nbt.getDouble("Balance");
 | 
			
		||||
                            balances.put(uuid, balance);
 | 
			
		||||
                            Optional<UUID> uuid = getUUID(nbt, "UUID");
 | 
			
		||||
                            if (uuid.isPresent()) {
 | 
			
		||||
                            double balance = nbt.getDouble("Balance", 0);
 | 
			
		||||
                            balances.put(uuid.get(), balance);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    lock.unlock();
 | 
			
		||||
 
 | 
			
		||||
@@ -84,7 +84,7 @@ public class PriceStorage {
 | 
			
		||||
            lock.lock();
 | 
			
		||||
            NbtCompound nbtCompound = NbtIo.read(priceStorageFile.toPath());
 | 
			
		||||
            if (nbtCompound != null && nbtCompound.contains("Prices") && priceStorageFile.exists()) {
 | 
			
		||||
                NbtList nbtList = nbtCompound.getList("Prices", 10); // 10 is the type ID for NbtCompound
 | 
			
		||||
                NbtList nbtList = nbtCompound.getListOrEmpty("Prices");
 | 
			
		||||
                for (NbtElement element : nbtList) {
 | 
			
		||||
                    if (element instanceof NbtCompound nbt) {
 | 
			
		||||
                        ItemPriceRecord itemPriceRecord = ItemPriceRecord.fromNbt(nbt, wrapperLookup);
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@ public class AuctionCreateScreen extends AnvilInputGui {
 | 
			
		||||
        super(player, parentScreen != null && parentScreen.getLockPlayerInventory());
 | 
			
		||||
        this.parentScreen = parentScreen;
 | 
			
		||||
        setTitle(Text.translatable("gui.servershop.auction.create.title"));
 | 
			
		||||
        this.setDefaultInputValue("Price");
 | 
			
		||||
        this.setDefaultInputValue("0.0");
 | 
			
		||||
        if (parentScreen != null) {
 | 
			
		||||
            parentScreen.close();
 | 
			
		||||
        }
 | 
			
		||||
@@ -38,9 +38,11 @@ public class AuctionCreateScreen extends AnvilInputGui {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean insertItem(ItemStack stack, int startIndex, int endIndex, boolean fromLast) {
 | 
			
		||||
        int price = Integer.parseInt(this.getInput());
 | 
			
		||||
        ServerShop.auctionStorage.addAuction(player, price, stack.copy(), false);
 | 
			
		||||
        close();
 | 
			
		||||
        try {
 | 
			
		||||
            int price = Integer.parseInt(this.getInput());
 | 
			
		||||
            ServerShop.auctionStorage.addAuction(player, price, stack.copy(), false);
 | 
			
		||||
            close();
 | 
			
		||||
        } catch (NumberFormatException ignored) {}
 | 
			
		||||
        return super.insertItem(stack, startIndex, endIndex, fromLast);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -31,8 +31,8 @@
 | 
			
		||||
  "gui.servershop.shop.editor.item.sell_price_not_sellable": "Cannot be sold, edit with right click",
 | 
			
		||||
  "gui.servershop.shop.editor.filtering.buy.not_buyable.show": "Show unbuyable items",
 | 
			
		||||
  "gui.servershop.shop.editor.filtering.buy.not_buyable.hide": "Hide unbuyable items",
 | 
			
		||||
  "gui.servershop.shop.editor.filtering.buy.disabled.show": "Hide disabled items for buying",
 | 
			
		||||
  "gui.servershop.shop.editor.filtering.buy.disabled.hide": "Show disabled items for buying ",
 | 
			
		||||
  "gui.servershop.shop.editor.filtering.buy.disabled.show": "Show disabled items for buying",
 | 
			
		||||
  "gui.servershop.shop.editor.filtering.buy.disabled.hide": "Hide disabled items for buying ",
 | 
			
		||||
  "gui.servershop.shop.editor.filtering.buy.normal.show": "Show buyable items",
 | 
			
		||||
  "gui.servershop.shop.editor.filtering.buy.normal.hide": "Hide buyable items",
 | 
			
		||||
  "gui.servershop.shop.editor.filtering.sell.normal.show": "Show sellable items",
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user