mirror of
https://github.com/WiIIiam278/HuskSync.git
synced 2025-12-19 14:59:21 +00:00
feat: support 1.21
Fixes attribute modifier syncing, adjust apache dep
This commit is contained in:
@@ -26,6 +26,7 @@ import de.tr7zw.changeme.nbtapi.NBTCompound;
|
|||||||
import de.tr7zw.changeme.nbtapi.NBTPersistentDataContainer;
|
import de.tr7zw.changeme.nbtapi.NBTPersistentDataContainer;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import net.william278.desertwell.util.ThrowingConsumer;
|
import net.william278.desertwell.util.ThrowingConsumer;
|
||||||
|
import net.william278.desertwell.util.Version;
|
||||||
import net.william278.husksync.BukkitHuskSync;
|
import net.william278.husksync.BukkitHuskSync;
|
||||||
import net.william278.husksync.HuskSync;
|
import net.william278.husksync.HuskSync;
|
||||||
import net.william278.husksync.adapter.Adaptable;
|
import net.william278.husksync.adapter.Adaptable;
|
||||||
@@ -572,7 +573,7 @@ public abstract class BukkitData implements Data {
|
|||||||
// We don't sync unmodified or disabled attributes
|
// We don't sync unmodified or disabled attributes
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
attributes.add(adapt(instance));
|
attributes.add(adapt(instance, plugin.getMinecraftVersion()));
|
||||||
});
|
});
|
||||||
return new BukkitData.Attributes(attributes);
|
return new BukkitData.Attributes(attributes);
|
||||||
}
|
}
|
||||||
@@ -591,18 +592,18 @@ public abstract class BukkitData implements Data {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static Attribute adapt(@NotNull AttributeInstance instance) {
|
private static Attribute adapt(@NotNull AttributeInstance instance, @NotNull Version version) {
|
||||||
return new Attribute(
|
return new Attribute(
|
||||||
instance.getAttribute().getKey().toString(),
|
instance.getAttribute().getKey().toString(),
|
||||||
instance.getBaseValue(),
|
instance.getBaseValue(),
|
||||||
instance.getModifiers().stream().map(BukkitData.Attributes::adapt).collect(Collectors.toSet())
|
instance.getModifiers().stream().map(m -> adapt(m, version)).collect(Collectors.toSet())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static Modifier adapt(@NotNull AttributeModifier modifier) {
|
private static Modifier adapt(@NotNull AttributeModifier modifier, @NotNull Version version) {
|
||||||
return new Modifier(
|
return new Modifier(
|
||||||
modifier.getUniqueId(),
|
version.compareTo(Version.fromString("1.21")) >= 0 ? null : modifier.getUniqueId(),
|
||||||
modifier.getName(),
|
modifier.getName(),
|
||||||
modifier.getAmount(),
|
modifier.getAmount(),
|
||||||
modifier.getOperation().ordinal(),
|
modifier.getOperation().ordinal(),
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ plugins {
|
|||||||
dependencies {
|
dependencies {
|
||||||
api 'commons-io:commons-io:2.16.1'
|
api 'commons-io:commons-io:2.16.1'
|
||||||
api 'org.apache.commons:commons-text:1.12.0'
|
api 'org.apache.commons:commons-text:1.12.0'
|
||||||
api 'org.apache.commons:commons-pool2:2.12.0'
|
|
||||||
api 'net.william278:minedown:1.8.2'
|
api 'net.william278:minedown:1.8.2'
|
||||||
api 'org.json:json:20240303'
|
api 'org.json:json:20240303'
|
||||||
api 'com.google.code.gson:gson:2.11.0'
|
api 'com.google.code.gson:gson:2.11.0'
|
||||||
|
|||||||
@@ -21,6 +21,11 @@ package net.william278.husksync.data;
|
|||||||
|
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import com.google.gson.annotations.SerializedName;
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
import net.kyori.adventure.key.Key;
|
import net.kyori.adventure.key.Key;
|
||||||
import net.william278.husksync.HuskSync;
|
import net.william278.husksync.HuskSync;
|
||||||
import net.william278.husksync.user.OnlineUser;
|
import net.william278.husksync.user.OnlineUser;
|
||||||
@@ -156,8 +161,8 @@ public interface Data {
|
|||||||
@NotNull
|
@NotNull
|
||||||
default List<Advancement> getCompletedExcludingRecipes() {
|
default List<Advancement> getCompletedExcludingRecipes() {
|
||||||
return getCompleted().stream()
|
return getCompleted().stream()
|
||||||
.filter(advancement -> !advancement.getKey().startsWith("minecraft:recipe"))
|
.filter(advancement -> !advancement.getKey().startsWith("minecraft:recipe"))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
void setCompleted(@NotNull List<Advancement> completed);
|
void setCompleted(@NotNull List<Advancement> completed);
|
||||||
@@ -186,13 +191,13 @@ public interface Data {
|
|||||||
@NotNull
|
@NotNull
|
||||||
private static Map<String, Long> adaptDateMap(@NotNull Map<String, Date> dateMap) {
|
private static Map<String, Long> adaptDateMap(@NotNull Map<String, Date> dateMap) {
|
||||||
return dateMap.entrySet().stream()
|
return dateMap.entrySet().stream()
|
||||||
.collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().getTime()));
|
.collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().getTime()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static Map<String, Date> adaptLongMap(@NotNull Map<String, Long> dateMap) {
|
private static Map<String, Date> adaptLongMap(@NotNull Map<String, Long> dateMap) {
|
||||||
return dateMap.entrySet().stream()
|
return dateMap.entrySet().stream()
|
||||||
.collect(Collectors.toMap(Map.Entry::getKey, e -> new Date(e.getValue())));
|
.collect(Collectors.toMap(Map.Entry::getKey, e -> new Date(e.getValue())));
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -245,9 +250,9 @@ public interface Data {
|
|||||||
void setWorld(@NotNull World world);
|
void setWorld(@NotNull World world);
|
||||||
|
|
||||||
record World(
|
record World(
|
||||||
@SerializedName("name") @NotNull String name,
|
@SerializedName("name") @NotNull String name,
|
||||||
@SerializedName("uuid") @NotNull UUID uuid,
|
@SerializedName("uuid") @NotNull UUID uuid,
|
||||||
@SerializedName("environment") @NotNull String environment
|
@SerializedName("environment") @NotNull String environment
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -319,9 +324,9 @@ public interface Data {
|
|||||||
List<Attribute> getAttributes();
|
List<Attribute> getAttributes();
|
||||||
|
|
||||||
record Attribute(
|
record Attribute(
|
||||||
@NotNull String name,
|
@NotNull String name,
|
||||||
double baseValue,
|
double baseValue,
|
||||||
@NotNull Set<Modifier> modifiers
|
@NotNull Set<Modifier> modifiers
|
||||||
) {
|
) {
|
||||||
|
|
||||||
public double getValue() {
|
public double getValue() {
|
||||||
@@ -334,17 +339,34 @@ public interface Data {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
record Modifier(
|
@Getter
|
||||||
@NotNull UUID uuid,
|
@Accessors(fluent = true)
|
||||||
@NotNull String name,
|
@AllArgsConstructor
|
||||||
double amount,
|
@NoArgsConstructor
|
||||||
@SerializedName("operation") int operationType,
|
final class Modifier {
|
||||||
@SerializedName("equipment_slot") int equipmentSlot
|
@Getter(AccessLevel.NONE)
|
||||||
) {
|
@Nullable
|
||||||
|
@SerializedName("uuid")
|
||||||
|
private UUID uuid;
|
||||||
|
@SerializedName("name")
|
||||||
|
private String name;
|
||||||
|
@SerializedName("amount")
|
||||||
|
private double amount;
|
||||||
|
@SerializedName("operation")
|
||||||
|
private int operationType;
|
||||||
|
@SerializedName("equipment_slot")
|
||||||
|
private int equipmentSlot;
|
||||||
|
|
||||||
|
public Modifier(@NotNull String name, double amount, int operationType, int equipmentSlot) {
|
||||||
|
this.name = name;
|
||||||
|
this.amount = amount;
|
||||||
|
this.operationType = operationType;
|
||||||
|
this.equipmentSlot = equipmentSlot;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object obj) {
|
public boolean equals(Object obj) {
|
||||||
return obj instanceof Modifier modifier && modifier.uuid.equals(uuid);
|
return obj instanceof Modifier modifier && modifier.uuid().equals(uuid());
|
||||||
}
|
}
|
||||||
|
|
||||||
public double modify(double value) {
|
public double modify(double value) {
|
||||||
@@ -355,12 +377,18 @@ public interface Data {
|
|||||||
default -> value;
|
default -> value;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public UUID uuid() {
|
||||||
|
return uuid != null ? uuid : UUID.nameUUIDFromBytes(name.getBytes());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default Optional<Attribute> getAttribute(@NotNull Key key) {
|
default Optional<Attribute> getAttribute(@NotNull Key key) {
|
||||||
return getAttributes().stream()
|
return getAttributes().stream()
|
||||||
.filter(attribute -> attribute.name().equals(key.asString()))
|
.filter(attribute -> attribute.name().equals(key.asString()))
|
||||||
.findFirst();
|
.findFirst();
|
||||||
}
|
}
|
||||||
|
|
||||||
default void removeAttribute(@NotNull Key key) {
|
default void removeAttribute(@NotNull Key key) {
|
||||||
@@ -369,8 +397,8 @@ public interface Data {
|
|||||||
|
|
||||||
default double getMaxHealth() {
|
default double getMaxHealth() {
|
||||||
return getAttribute(MAX_HEALTH_KEY)
|
return getAttribute(MAX_HEALTH_KEY)
|
||||||
.map(Attribute::getValue)
|
.map(Attribute::getValue)
|
||||||
.orElse(20.0);
|
.orElse(20.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
default void setMaxHealth(double maxHealth) {
|
default void setMaxHealth(double maxHealth) {
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ dependencies {
|
|||||||
modCompileOnly "net.fabricmc.fabric-api:fabric-api:${fabric_api_version}"
|
modCompileOnly "net.fabricmc.fabric-api:fabric-api:${fabric_api_version}"
|
||||||
|
|
||||||
// Runtime dependencies on Bukkit; "include" them on Fabric. (todo: minify JAR?)
|
// Runtime dependencies on Bukkit; "include" them on Fabric. (todo: minify JAR?)
|
||||||
|
implementation include('org.apache.commons:commons-pool2:2.12.0')
|
||||||
implementation include("redis.clients:jedis:$jedis_version")
|
implementation include("redis.clients:jedis:$jedis_version")
|
||||||
implementation include("com.mysql:mysql-connector-j:$mysql_driver_version")
|
implementation include("com.mysql:mysql-connector-j:$mysql_driver_version")
|
||||||
implementation include("org.mariadb.jdbc:mariadb-java-client:$mariadb_driver_version")
|
implementation include("org.mariadb.jdbc:mariadb-java-client:$mariadb_driver_version")
|
||||||
|
|||||||
@@ -12,15 +12,15 @@ from tqdm import tqdm
|
|||||||
# Parameters for starting a network of Minecraft servers
|
# Parameters for starting a network of Minecraft servers
|
||||||
class Parameters:
|
class Parameters:
|
||||||
root_dir = './servers/'
|
root_dir = './servers/'
|
||||||
proxy_version = "1.20"
|
proxy_version = "1.21"
|
||||||
minecraft_version = '1.20.6'
|
minecraft_version = '1.21'
|
||||||
eula_agreement = 'true'
|
eula_agreement = 'true'
|
||||||
|
|
||||||
backend_names = ['alpha', 'beta']
|
backend_names = ['alpha', 'beta']
|
||||||
backend_ports = [25567, 25568]
|
backend_ports = [25567, 25568]
|
||||||
backend_type = 'paper'
|
backend_type = 'paper'
|
||||||
backend_ram = 2048
|
backend_ram = 2048
|
||||||
backend_plugins = ['../target/HuskSync-Paper-*.jar', './ProtocolLib/ProtocolLib.jar']
|
backend_plugins = ['../target/HuskSync-Paper-*.jar']
|
||||||
backend_plugin_folders = ['./HuskSync']
|
backend_plugin_folders = ['./HuskSync']
|
||||||
operator_names = ['William278']
|
operator_names = ['William278']
|
||||||
operator_uuids = ['5dfb0558-e306-44f4-bb9a-f9218d4eb787']
|
operator_uuids = ['5dfb0558-e306-44f4-bb9a-f9218d4eb787']
|
||||||
@@ -33,7 +33,7 @@ class Parameters:
|
|||||||
proxy_plugins = []
|
proxy_plugins = []
|
||||||
proxy_plugin_folders = []
|
proxy_plugin_folders = []
|
||||||
|
|
||||||
just_update_plugins = False
|
just_update_plugins = True
|
||||||
|
|
||||||
|
|
||||||
def main(update=False):
|
def main(update=False):
|
||||||
|
|||||||
Reference in New Issue
Block a user