SteamWar/SpigotCore
Archiviert
13
0

Merge branch 'master' into schematic-node

Dieser Commit ist enthalten in:
Chaoscaot 2021-03-02 11:32:41 +01:00
Commit 77f1e48c6e
4 geänderte Dateien mit 137 neuen und 20 gelöschten Zeilen

Datei anzeigen

@ -29,7 +29,7 @@ public class TPSWatcher {
private static final TPSWatcher tps_TenSecond = new TPSWatcher(10000); private static final TPSWatcher tps_TenSecond = new TPSWatcher(10000);
private long lastTime = System.currentTimeMillis(); private long lastTime = System.currentTimeMillis();
private double tps = 20.0; private double tps = TICK_DEFAULT;
private TPSWatcher(long timeInterval) { private TPSWatcher(long timeInterval) {
Bukkit.getScheduler().runTaskTimer(Core.getInstance(), () -> { Bukkit.getScheduler().runTaskTimer(Core.getInstance(), () -> {
@ -46,12 +46,20 @@ public class TPSWatcher {
return getTPS(TPSType.ONE_SECOND); return getTPS(TPSType.ONE_SECOND);
} }
public static double getTPS(double limit) {
return getTPS(TPSType.ONE_SECOND, limit);
}
public static double getTPSUnlimited() { public static double getTPSUnlimited() {
return getTPSUnlimited(TPSType.ONE_SECOND); return getTPSUnlimited(TPSType.ONE_SECOND);
} }
public static double getTPS(TPSType tpsType) { public static double getTPS(TPSType tpsType) {
return Math.min(getTPSUnlimited(tpsType), 20.0); return getTPS(tpsType, TICK_DEFAULT);
}
public static double getTPS(TPSType tpsType, double limit) {
return Math.min(getTPSUnlimited(tpsType), limit);
} }
public static double getTPSUnlimited(TPSType tpsType) { public static double getTPSUnlimited(TPSType tpsType) {

Datei anzeigen

@ -28,11 +28,9 @@ import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SWInventory implements Listener { public class SWInventory implements Listener {
@ -55,9 +53,13 @@ public class SWInventory implements Listener {
callbacks.put(-1, c); callbacks.put(-1, c);
} }
public void setItem(int pos, ItemStack itemStack, InvCallback c){
inventory.setItem(pos, itemStack);
callbacks.put(pos, c);
}
public void setItem(int pos, SWItem item){ public void setItem(int pos, SWItem item){
inventory.setItem(pos, item.getItemStack()); setItem(pos, item.getItemStack(), item.getCallback());
callbacks.put(pos, item.getCallback());
} }
public void setItem(int pos, Material m, String name, InvCallback c){ public void setItem(int pos, Material m, String name, InvCallback c){
@ -91,10 +93,11 @@ public class SWInventory implements Listener {
if(!player.equals(e.getWhoClicked())) if(!player.equals(e.getWhoClicked()))
return; return;
if(callbacks.containsKey(e.getRawSlot()) && callbacks.get(e.getRawSlot()) != null) {
e.setCancelled(true); e.setCancelled(true);
if(callbacks.containsKey(e.getRawSlot()) && callbacks.get(e.getRawSlot()) != null)
callbacks.get(e.getRawSlot()).clicked(e.getClick()); callbacks.get(e.getRawSlot()).clicked(e.getClick());
} }
}
@EventHandler @EventHandler
public void onInventoryClose(InventoryCloseEvent e){ public void onInventoryClose(InventoryCloseEvent e){

Datei anzeigen

@ -25,44 +25,88 @@ import org.bukkit.inventory.ItemStack;
import java.io.StringReader; import java.io.StringReader;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects; import java.util.Objects;
public class PersonalKit { public class PersonalKit {
private final int userID; private final int userID;
private String name;
private final String gamemode; private final String gamemode;
private String inventory; private String inventory;
private String armor; private String armor;
private boolean inUse;
private PersonalKit(ResultSet rs) throws SQLException { private PersonalKit(ResultSet rs) throws SQLException {
userID = rs.getInt("UserID"); userID = rs.getInt("UserID");
gamemode = rs.getString("GameMode"); gamemode = rs.getString("GameMode");
inventory = rs.getString("Inventory"); inventory = rs.getString("Inventory");
armor = rs.getString("Armor"); armor = rs.getString("Armor");
name = rs.getString("Name");
inUse = rs.getBoolean("InUse");
} }
public static PersonalKit get(int userID, String gamemode){ public static List<PersonalKit> get(int userID, String gamemode){
ResultSet rs = SQL.select("SELECT * FROM PersonalKit WHERE UserID = ? AND GameMode = ?", userID, gamemode); ResultSet rs = SQL.select("SELECT * FROM PersonalKit WHERE UserID = ? AND GameMode = ?", userID, gamemode);
try {
List<PersonalKit> list = new ArrayList<>();
while (rs.next())
list.add(new PersonalKit(rs));
return list;
} catch (SQLException e) {
throw new SecurityException("Failed loading personal kit", e);
}
}
public static PersonalKit get(int userID, String gamemode, String name) {
ResultSet rs = SQL.select("SELECT * FROM PersonalKit WHERE UserID = ? AND GameMode = ? AND Name = ?", userID, gamemode, name);
try { try {
if(!rs.next()) if(!rs.next())
return null; return null;
return new PersonalKit(rs); return new PersonalKit(rs);
} catch (SQLException e) { } catch (SQLException e) {
throw new SecurityException("Failed loading personal kit", e); throw new SecurityException("Failed loading personal kit", e);
} }
} }
public static PersonalKit save(int userID, String gamemode, ItemStack[] inventory, ItemStack[] armor){ public static PersonalKit create(int userID, String gamemode, String name, ItemStack[] inventory, ItemStack[] armor){
YamlConfiguration inventoryConfig = new YamlConfiguration(); if(armor == null) {
inventoryConfig.set("Inventory", inventory); armor = new ItemStack[]{null, null, null, null};
}
SQL.update("INSERT INTO PersonalKit (UserID, GameMode, Name, Inventory, Armor) VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE Inventory = VALUES(Inventory), Armor = VALUES(Armor), Name = VALUES(name)",
userID, gamemode, name, saveInvConfig("Inventory", inventory), saveInvConfig("Armor", armor));
return get(userID, gamemode, name);
}
YamlConfiguration armorConfig = new YamlConfiguration(); public static PersonalKit getKitInUse(int userID, String gamemode) {
armorConfig.set("Armor", armor); ResultSet rs = SQL.select("SELECT * FROM PersonalKit WHERE UserID = ? AND GameMode = ? AND InUse = ?", userID, gamemode, true);
try {
List<PersonalKit> list = new ArrayList<>();
while (rs.next())
list.add(new PersonalKit(rs));
if(list.size() > 1) {
list.forEach(kit -> {
if(list.indexOf(kit) >= 1) kit.setUse(false);
});
list.removeIf(kit -> !kit.isInUse());
}
if(list.isEmpty()) return null;
return list.get(0);
} catch (SQLException e) {
throw new SecurityException("Failed loading personal kit", e);
}
}
SQL.update("INSERT INTO PersonalKit (UserID, GameMode, Inventory, Armor) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE Inventory = VALUES(Inventory), Armor = VALUES(Armor)", public static boolean nameInUse(int userID, String gamemode, String name) {
userID, gamemode, inventoryConfig.saveToString(), armorConfig.saveToString()); ResultSet set = SQL.select("SELECT COUNT(*) AS Count FROM PersonalKit WHERE UserID = ? AND GameMode = ? AND Name = ?", userID, gamemode, name);
return get(userID, gamemode); try {
if(!set.next())
return true;
return set.getInt("Count") > 0;
} catch (SQLException e) {
throw new SecurityException("Failed loading personal kit", e);
}
} }
public ItemStack[] getInventory(){ public ItemStack[] getInventory(){
@ -74,4 +118,65 @@ public class PersonalKit {
YamlConfiguration config = YamlConfiguration.loadConfiguration(new StringReader(armor)); YamlConfiguration config = YamlConfiguration.loadConfiguration(new StringReader(armor));
return Objects.requireNonNull(config.getList("Armor")).toArray(new ItemStack[0]); return Objects.requireNonNull(config.getList("Armor")).toArray(new ItemStack[0]);
} }
public int getUserID() {
return userID;
}
public String getName() {
return name;
}
public boolean isInUse() {
return inUse;
}
public void setInUse() {
PersonalKit kit = getKitInUse(userID, gamemode);
if(kit != null)
kit.setUse(false);
setUse(true);
}
private void setUse(boolean inUse) {
this.inUse = inUse;
updateDB();
}
public void setName(String name) {
this.name = name;
updateDB();
}
public void setInventory(ItemStack[] inventory) {
this.inventory = saveInvConfig("Inventory", inventory);
updateDB();
}
public void setArmor(ItemStack[] armor) {
this.armor = saveInvConfig("Armor", armor);
updateDB();
}
public void setContainer(ItemStack[] inventory, ItemStack[] armor) {
this.armor = saveInvConfig("Armor", armor);
this.inventory = saveInvConfig("Inventory", inventory);
updateDB();
}
public void delete() {
SQL.update("DELETE FROM `PersonalKit` WHERE UserID = ? AND GameMode = ? AND Name = ?", userID, gamemode, name);
}
private static String saveInvConfig(String name, ItemStack[] inv) {
YamlConfiguration armorConfig = new YamlConfiguration();
armorConfig.set(name, inv);
return armorConfig.saveToString();
}
private void updateDB() {
SQL.update("INSERT INTO PersonalKit (UserID, GameMode, Name, Inventory, Armor, InUse) VALUES (?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE Inventory = VALUES(Inventory), Armor = VALUES(Armor), Name = VALUES(Name), InUse = VALUES(InUse)",
userID, gamemode, name, inventory, armor, inUse);
}
} }

Datei anzeigen

@ -67,6 +67,7 @@ public class SWException {
reasons.add("Chunk file at ["); reasons.add("Chunk file at [");
reasons.add("Ignoring unknown attribute"); reasons.add("Ignoring unknown attribute");
reasons.add("Skipping player strafe phase because no player was found"); reasons.add("Skipping player strafe phase because no player was found");
reasons.add("Couldn't save chunk; already in use by another instance of Minecraft?");
ignorereasons = Collections.unmodifiableList(reasons); ignorereasons = Collections.unmodifiableList(reasons);
} }