Merge branch 'main' into SpigotCore/SWPlayer

This commit is contained in:
2025-11-25 16:59:28 +01:00
186 changed files with 4862 additions and 5269 deletions
@@ -32,10 +32,14 @@ public class FlatteningWrapper21 extends FlatteningWrapper14 implements Flatteni
public ItemStack setSkullOwner(String player) {
ItemStack head = new ItemStack(Material.PLAYER_HEAD, 1);
head.editMeta(SkullMeta.class, skullMeta -> {
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(player.startsWith(".") ? player.substring(1) : player);
PlayerProfile playerProfile = offlinePlayer.getPlayerProfile();
if (!playerProfile.isComplete()) playerProfile.complete();
skullMeta.setPlayerProfile(playerProfile);
try {
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(player.startsWith(".") ? player.substring(1) : player);
PlayerProfile playerProfile = offlinePlayer.getPlayerProfile();
playerProfile.complete();
skullMeta.setPlayerProfile(playerProfile);
} catch (Exception e) {
// Ignore
}
});
return head;
}
@@ -67,7 +67,7 @@ public class TypeUtils {
Player player = (Player) commandSender;
return BauweltMember.getMembers(player.getUniqueId())
.stream()
.filter(member -> SteamwarUser.get(member.getMemberID()).getUserName().equalsIgnoreCase(s))
.filter(member -> SteamwarUser.byId(member.getMemberID()).getUserName().equalsIgnoreCase(s))
.findAny()
.orElse(null);
}
@@ -80,7 +80,7 @@ public class TypeUtils {
Player player = (Player) sender;
return BauweltMember.getMembers(player.getUniqueId())
.stream()
.map(m -> SteamwarUser.get(m.getMemberID()).getUserName())
.map(m -> SteamwarUser.byId(m.getMemberID()).getUserName())
.collect(Collectors.toList());
}
});
@@ -63,7 +63,9 @@ public class CLine extends CEntity {
if (Objects.equals(from, this.from) && Objects.equals(to, this.to)) return this;
this.from = from;
this.to = to;
hide(true);
tick();
hide(false);
return this;
}
@@ -82,7 +82,7 @@ public class CWireframe extends CEntity {
private void updateAndSpawnLines() {
List<CLine> lines = getEntitiesByType(CLine.class);
if (pos1 == null || pos2 == null) {
lines.forEach(line -> line.setFrom(null).setTo(null));
lines.forEach(line -> line.setFromAndTo(null, null));
return;
}
@@ -84,7 +84,7 @@ public class SchematicSelector {
public void open() {
injectable.onSelectorCreate(this);
if(publicMode == PublicMode.PUBLIC_ONLY) {
this.user = SteamwarUser.get(0);
this.user = SteamwarUser.byId(0);
}
openList(null);
injectable.onSelectorOpen(this, SchematicSelectorInjectable.OpenFrom.FRESH);
@@ -122,7 +122,7 @@ public class SchematicSelector {
list.add(renderItem(node));
}
SWListInv<SchematicNode> inv = new SWListInv<>(player, MessageFormat.format(injectable.createTitle(player), target.target.getName(player), (filter == null || filter.getName() == null)?(parent == null?"/":parent.generateBreadcrumbs()):filter.getName()), false, list, (clickType, node) -> handleClick(node, parent));
SWListInv<SchematicNode> inv = new SWListInv<>(player, MessageFormat.format(injectable.createTitle(player), target.target.getName(player), (filter == null || filter.getName() == null)?(parent == null?"/":parent.generateBreadcrumbs(user)):filter.getName()), false, list, (clickType, node) -> handleClick(node, parent));
if(publicMode == PublicMode.ALL) {
if(user.getId() == 0) {
inv.setItem(48, new SWItem(Material.BUCKET, Core.MESSAGE.parse("SCHEM_SELECTOR_OWN", player), clickType -> {
@@ -131,7 +131,7 @@ public class SchematicSelector {
}).setCustomModelData(CMDs.Schematic.OWN_SCHEMS));
} else {
inv.setItem(48, new SWItem(Material.GLASS, Core.MESSAGE.parse("SCHEM_SELECTOR_PUB", player), clickType -> {
this.user = SteamwarUser.get(0);
this.user = SteamwarUser.byId(0);
openList(null);
}).setCustomModelData(CMDs.Schematic.PUBLIC_SCHEMS));
}
@@ -178,7 +178,7 @@ public class SchematicSelector {
Optional<SchematicNode> currentParent = Optional.of(parent);
do {
sdoTrigger = false;
currentParent = currentParent.flatMap(SchematicSelector::getParent);
currentParent = currentParent.flatMap(this::getParent);
if(!currentParent.isPresent()) {
break;
}
@@ -326,7 +326,7 @@ public class SchematicSelector {
if(filter.getOwner() == null) {
inv.setItem(1, SWItem.getMaterial("SKULL_ITEM"), (byte) 3, Core.MESSAGE.parse("SCHEM_SELECTOR_FILTER_OWNER", player), ownerCallback);
} else {
SteamwarUser tUser = SteamwarUser.get(filter.getOwner());
SteamwarUser tUser = SteamwarUser.byId(filter.getOwner());
SWItem item = SWItem.getPlayerSkull(tUser.getUserName());
item.setName(Core.MESSAGE.parse("SCHEM_SELECTOR_FILTER_OWNER", player));
item.setEnchanted(true);
@@ -484,8 +484,8 @@ public class SchematicSelector {
return nodes;
}
private static Optional<SchematicNode> getParent(SchematicNode node) {
return node.getOptionalParent().map(integer -> SchematicNode.byIdAndUser(SteamwarUser.get(node.getEffectiveOwner()), integer));
private Optional<SchematicNode> getParent(SchematicNode node) {
return node.getOptionalParent().map(integer -> SchematicNode.byIdAndUser(user, integer));
}
public static SelectorTarget selectSchematic() {
@@ -585,7 +585,7 @@ public class SchematicSelector {
lore.add(Core.MESSAGE.parse("SCHEM_SELECTOR_FILTER_NAME_SEARCH", player, name));
}
if(owner != null) {
lore.add(Core.MESSAGE.parse("SCHEM_SELECTOR_FILTER_OWNER_SEARCH", player, SteamwarUser.get(owner).getUserName()));
lore.add(Core.MESSAGE.parse("SCHEM_SELECTOR_FILTER_OWNER_SEARCH", player, SteamwarUser.byId(owner).getUserName()));
}
if(type != null) {
lore.add(Core.MESSAGE.parse("SCHEM_SELECTOR_FILTER_TYPE_SEARCH", player, type.name()));
@@ -606,7 +606,7 @@ public class SchematicSelector {
if (name != null) {
return new SWItem(Material.NAME_TAG, itemName, lore, false, click -> {});
} else if (owner != null) {
SWItem playerSkull = SWItem.getPlayerSkull(SteamwarUser.get(owner).getUserName());
SWItem playerSkull = SWItem.getPlayerSkull(SteamwarUser.byId(owner).getUserName());
playerSkull.setName(itemName);
playerSkull.setLore(lore);
return playerSkull;
@@ -40,7 +40,7 @@ public class UtilGui {
public static void openMaterialSelector(Player player, String title, Consumer<Material> callback) {
List<SWListInv.SWListEntry<Material>> materials = new LinkedList<>();
for(Material material : Material.values()){
if(material.name().startsWith(Material.LEGACY_PREFIX))
if(material.name().startsWith(Material.LEGACY_PREFIX) || !material.isItem())
continue;
SWItem item = new SWItem(material, "§7" + material.name());
if(item.getItemMeta() != null && material.isItem()) {
@@ -48,7 +48,7 @@ public class CoreNetworkHandler extends PacketHandler {
@Handler
public void handleCloseInventoryPacket(CloseInventoryPacket packet) {
Player player = Bukkit.getPlayer(SteamwarUser.get(packet.getPlayerId()).getUUID());
Player player = Bukkit.getPlayer(SteamwarUser.byId(packet.getPlayerId()).getUUID());
if (player != null) {
player.closeInventory();
}
@@ -66,7 +66,7 @@ public class CoreNetworkHandler extends PacketHandler {
@Handler
public void handlePingPacket(PingPacket packet) {
UUID uuid = SteamwarUser.get(packet.getId()).getUUID();
UUID uuid = SteamwarUser.byId(packet.getId()).getUUID();
if(Bukkit.getPlayer(uuid) != null) {
Player player = Bukkit.getPlayer(uuid);
BountifulWrapper.impl.playPling(player);
@@ -24,7 +24,6 @@ import de.steamwar.inventory.SWAnvilInv;
import de.steamwar.inventory.SWInventory;
import de.steamwar.inventory.SWItem;
import de.steamwar.network.NetworkSender;
import de.steamwar.network.packets.NetworkPacket;
import de.steamwar.network.packets.PacketHandler;
import de.steamwar.network.packets.client.AnvilAnswerPacket;
import de.steamwar.network.packets.client.InventoryCallbackPacket;
@@ -42,7 +41,7 @@ public class InventoryHandler extends PacketHandler {
@Handler
public static void handleInventoryPacket(InventoryPacket packet) {
Player player = Bukkit.getPlayer(SteamwarUser.get(packet.getPlayer()).getUUID());
Player player = Bukkit.getPlayer(SteamwarUser.byId(packet.getPlayer()).getUUID());
Map<Integer, SWItem> items = new HashMap<>();
packet.getItems().forEach((i, item) -> {
@SuppressWarnings("deprecation") SWItem it = SWItem.getItemFromJson(new JsonParser().parse(item).getAsJsonObject());
@@ -60,7 +59,7 @@ public class InventoryHandler extends PacketHandler {
@Handler
public static void handleAnvilInventoryPacket(AnvilInventoryPacket packet) {
Player player = Bukkit.getPlayer(SteamwarUser.get(packet.getPlayerId()).getUUID());
Player player = Bukkit.getPlayer(SteamwarUser.byId(packet.getPlayerId()).getUUID());
SWAnvilInv inv = new SWAnvilInv(player, packet.getTitle(), packet.getDefaultText());
if (packet.getMaterial() != null && !packet.getMaterial().isEmpty()) {
@@ -41,6 +41,6 @@ public class BauServerInfo {
public static SteamwarUser getOwnerUser() {
if (bauOwner == null) return null;
return SteamwarUser.get(bauOwner);
return SteamwarUser.byId(bauOwner);
}
}
@@ -19,119 +19,87 @@
package de.steamwar.sql;
import de.steamwar.sql.internal.Field;
import de.steamwar.sql.internal.SelectStatement;
import de.steamwar.sql.internal.Statement;
import de.steamwar.sql.internal.Table;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.inventory.ItemStack;
import java.io.StringReader;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@AllArgsConstructor
public class PersonalKit {
private final InternalKit kit;
private static final Table<PersonalKit> table = new Table<>(PersonalKit.class);
private static final SelectStatement<PersonalKit> getKits = table.selectFields("UserID", "GameMode");
private static final SelectStatement<PersonalKit> getKit = table.select(Table.PRIMARY);
private static final SelectStatement<PersonalKit> getKitInUse = table.selectFields("UserID", "GameMode", "InUse");
private static final Statement update = table.insertAll();
private static final Statement delete = table.delete(Table.PRIMARY);
public String getName() {
return kit.getName();
}
@Getter
@Field(keys = {Table.PRIMARY})
private final int userID;
@Getter
@Field(keys = {Table.PRIMARY})
private final String gamemode;
@Getter
@Field(keys = {Table.PRIMARY})
private final String name;
@Field
private String inventory;
@Field
private String armor;
@Getter
@Field(def = "1")
private boolean inUse;
public boolean isInUse() {
return kit.getInUse();
}
public String getRawInventory() {
return inventory;
return kit.getRawInventory();
}
public String getRawArmor() {
return armor;
return kit.getRawArmor();
}
public ItemStack[] getInventory(){
YamlConfiguration config = YamlConfiguration.loadConfiguration(new StringReader(inventory));
YamlConfiguration config = YamlConfiguration.loadConfiguration(new StringReader(getRawInventory()));
return Objects.requireNonNull(config.getList("Inventory")).toArray(new ItemStack[0]);
}
public ItemStack[] getArmor(){
YamlConfiguration config = YamlConfiguration.loadConfiguration(new StringReader(armor));
YamlConfiguration config = YamlConfiguration.loadConfiguration(new StringReader(getRawArmor()));
return Objects.requireNonNull(config.getList("Armor")).toArray(new ItemStack[0]);
}
public void setInUse() {
PersonalKit kit = getKitInUse(userID, gamemode);
if(kit != null)
kit.setUse(false);
setUse(true);
}
private void setUse(boolean inUse) {
this.inUse = inUse;
update();
kit.setDefault();
}
public void setInventory(ItemStack[] inventory) {
this.inventory = saveInvConfig("Inventory", inventory);
update();
kit.setInventory(saveInvConfig("Inventory", inventory));
}
public void setArmor(ItemStack[] armor) {
this.armor = saveInvConfig("Armor", armor);
update();
kit.setArmor(saveInvConfig("Armor", armor));
}
public void setContainer(ItemStack[] inventory, ItemStack[] armor) {
this.armor = saveInvConfig("Armor", armor);
this.inventory = saveInvConfig("Inventory", inventory);
update();
setInventory(inventory);
setArmor(armor);
}
public void delete() {
delete.update(userID, gamemode, name);
}
private void update() {
update.update(userID, gamemode, name, inventory, armor, inUse);
kit.delete();
}
public static List<PersonalKit> get(int userID, String gamemode){
return getKits.listSelect(userID, gamemode);
return InternalKit.get(userID, gamemode).stream().map(PersonalKit::new).collect(Collectors.toList());
}
public static PersonalKit get(int userID, String gamemode, String name) {
return getKit.select(userID, gamemode, name);
InternalKit kit = InternalKit.get(userID, gamemode, name);
if(kit == null)
return null;
return new PersonalKit(kit);
}
public static PersonalKit create(int userID, String gamemode, String name, ItemStack[] inventory, ItemStack[] armor){
if(armor == null) {
armor = new ItemStack[]{null, null, null, null};
}
PersonalKit kit = new PersonalKit(userID, gamemode, name, saveInvConfig("Inventory", inventory), saveInvConfig("Armor", armor), true);
kit.update();
return kit;
InternalKit kit = InternalKit.create(userID, gamemode, name, saveInvConfig("Inventory", inventory), saveInvConfig("Armor", armor));
return new PersonalKit(kit);
}
public static PersonalKit getKitInUse(int userID, String gamemode) {
return getKitInUse.select(userID, gamemode, true);
InternalKit kit = InternalKit.getKitInUse(userID, gamemode);
if(kit == null)
return null;
return new PersonalKit(kit);
}
private static String saveInvConfig(String name, ItemStack[] inv) {
@@ -27,6 +27,9 @@ import org.bukkit.World;
import org.bukkit.entity.Player;
import java.io.File;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class SQLWrapperImpl implements SQLWrapper<Material> {
@@ -40,6 +43,15 @@ public class SQLWrapperImpl implements SQLWrapper<Material> {
return new GameModeConfig<>(file, GameModeConfigUtils.ToMaterial, GameModeConfig.ToString, GameModeConfig.ToStaticWarGear, true);
}
@Override
public List<Material> getMaterialWithGreaterBlastResistance(double maxBlastResistance) {
return Arrays.stream(Material.values())
.filter(material -> !material.isLegacy())
.filter(Material::isBlock)
.filter(material -> material.getBlastResistance() > maxBlastResistance)
.collect(Collectors.toList());
}
private static final String SERVER_VERSION = Bukkit.getServer().getVersion();
@Override
@@ -20,19 +20,12 @@
package de.steamwar.sql;
import com.sk89q.worldedit.extent.clipboard.Clipboard;
import de.steamwar.core.Core;
import de.steamwar.core.WorldEditWrapper;
import de.steamwar.sql.internal.SqlTypeMapper;
import de.steamwar.sql.internal.Statement;
import org.bukkit.entity.Player;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PipedInputStream;
import java.sql.Blob;
import java.sql.PreparedStatement;
import java.util.zip.GZIPInputStream;
public class SchematicData {
@@ -3,6 +3,10 @@ version: "2.0"
author: Lixfel
api-version: "1.13"
load: STARTUP
depend:
- KotlinCore
softdepend:
- WorldEdit