mirror of
https://github.com/YatopiaMC/Yatopia.git
synced 2024-12-02 23:53:50 +01:00
22be9f2d6f
* Updated Upstream and Sidestream(s) (Paper/Purpur/Origami) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: 2299159bb Add option to fix items merging through blocks (#5334) d8c20ddc7 Fix PlayerBucketEmptyEvent result itemstack (#5698) ceb3762fb Add PufferFishStateChangeEvent (#5606) cd4defec0 [CI-SKIP] Update version checker to use V2 downloads API (#5728) b9f2a673d Limit item frame cursors on maps (#5730) 81a537c1f Add PlayerKickEvent causes (#5648) b7976b956 Add More Lidded Block API (#5707) Purpur Changes: b88aef3a Fix Paper#4748 - Shulkerbox allow oversized stacks 9fec1bae Updated Upstream (Paper) 2aacc766 Update Toothpick to 1.1.0-SNAPSHOT a08d7470 Configurable anvil cumulative cost (#352) Origami Changes: 3b8adab Fix importing of classes not working if their directory doesn't exist * Updated Upstream and Sidestream(s) (Paper/Tuinity/Purpur/Empirecraft/Origami) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: 525d0e3d3 fix beacon activate/deactivate events (#5646) e403d6aaf [Auto] Updated Upstream (CraftBukkit) 6bcd8b57c Updated Upstream (CraftBukkit) (#5742) 501cc9448 Reset villager inventory on cancelled pickup event (#5738) 3f72a549b Exit with non-zero exit code when killed by watchdog (#5732) a8d7ad099 Updated Upstream (Bukkit/CraftBukkit) (#5735) Tuinity Changes: e9c8348 Revert entity ticking chunk map for tracker Purpur Changes: 687936be Updated Upstream (Paper) 4c2d7e56 Fix advancement triggers on entity death 49a0fb90 Fix oversized shulker box dupe e92d259e Fix raid captains not giving voluntary exile advancement a97fdc48 Config to broadcast the death message to the affected player (#363) 9bf8e165 Add burn in daylight API for LivingEntity (#331) 96460068 Fix dupe bug caused by SPIGOT-6452 2618c24f Revert "allow disabling offline mode message on an ONLINE MODE proxy" aa79fa5c allow disabling offline mode message on an ONLINE MODE proxy 830141ca Bee can work when raining or at night (#365) ae6ca468 Updated Upstream (Paper) d99cc6e8 [ci-skip] Add better issue templates (#360) Empirecraft Changes: 12009c31 Updated Paper 5305540d Updated Paper 1043bd94 Revert "Call EntityPickupItemEvent for villagers" CB commit 820b9bdf Updated Paper Origami Changes: 64fba4f Fix importing of classes not working if their directory doesn't exist 3b8adab Fix importing of classes not working if their directory doesn't exist * rebuild Patches
325 lines
15 KiB
Diff
325 lines
15 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: tr7zw <tr7zw@live.de>
|
|
Date: Wed, 5 Aug 2020 08:05:10 -0500
|
|
Subject: [PATCH] Yatopia configuration
|
|
|
|
also some basic settings that dont deserve a patch
|
|
|
|
diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java
|
|
index 4b171a2a60e24947e884f8988920f335bd99a471..5431ec9e8794397b3082a1eb49f82767f083a217 100644
|
|
--- a/src/main/java/co/aikar/timings/TimingsExport.java
|
|
+++ b/src/main/java/co/aikar/timings/TimingsExport.java
|
|
@@ -234,6 +234,7 @@ public class TimingsExport extends Thread {
|
|
pair("paper", mapAsJSON(Bukkit.spigot().getPaperConfig(), null)),
|
|
pair("tuinity", mapAsJSON(Bukkit.spigot().getTuinityConfig(), null)), // Tuinity - add config to timings report
|
|
pair("purpur", mapAsJSON(Bukkit.spigot().getPurpurConfig(), null))
|
|
+ , pair("yatopia", mapAsJSON(Bukkit.spigot().getYatopiaConfig(), null)) // Yatopia - add config to timings report
|
|
// Purpur end
|
|
));
|
|
|
|
@@ -324,7 +325,7 @@ public class TimingsExport extends Thread {
|
|
String response = null;
|
|
String timingsURL = null;
|
|
try {
|
|
- HttpURLConnection con = (HttpURLConnection) new URL(net.pl3x.purpur.PurpurConfig.timingsUrl + "/post").openConnection(); // Purpur
|
|
+ HttpURLConnection con = (HttpURLConnection) new URL("http://timings.aikar.co/post").openConnection(); // Purpur // Yatopia
|
|
con.setDoOutput(true);
|
|
String hostName = "BrokenHost";
|
|
try {
|
|
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
|
index a257a4ab22eeec2da0a53dccf89e8511be3f5d30..0b7e85f83d1e2494fc58a5563862db18ec8c1081 100644
|
|
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
|
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
|
@@ -228,6 +228,15 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
|
|
gg.airplane.AirplaneConfig.load(); // Airplane - config
|
|
gg.airplane.commands.AirplaneCommands.init(); // Airplane - command
|
|
|
|
+ // Yatopia start
|
|
+ try {
|
|
+ org.yatopiamc.yatopia.server.YatopiaConfig.init((java.io.File) options.valueOf("yatopia-settings"));
|
|
+ } catch (Exception e) {
|
|
+ DedicatedServer.LOGGER.error("Unable to load server configuration", e);
|
|
+ return false;
|
|
+ }
|
|
+ // Yatopia end
|
|
+
|
|
this.setPVP(dedicatedserverproperties.pvp);
|
|
this.setAllowFlight(dedicatedserverproperties.allowFlight);
|
|
this.setResourcePack(dedicatedserverproperties.resourcePack, this.ba());
|
|
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
index 1f6a84566e8bd2df866fd4c166a0e1874bb1e4bb..36d53df60dfad980119eefa4499f4cb7280f55b1 100644
|
|
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
@@ -272,7 +272,7 @@ public abstract class PlayerList {
|
|
// Spigot - view distance
|
|
playerconnection.sendPacket(new PacketPlayOutLogin(entityplayer.getId(), entityplayer.playerInteractManager.getGameMode(), entityplayer.playerInteractManager.c(), BiomeManager.a(worldserver1.getSeed()), worlddata.isHardcore(), this.server.F(), this.s, worldserver1.getDimensionManager(), worldserver1.getDimensionKey(), this.getMaxPlayers(), worldserver1.getChunkProvider().playerChunkMap.playerChunkManager.getLoadDistance(), flag1, !flag, worldserver1.isDebugWorld(), worldserver1.isFlatWorld())); // Paper - no-tick view distance // Tuinity - replace old player chunk management
|
|
entityplayer.getBukkitEntity().sendSupportedChannels(); // CraftBukkit
|
|
- playerconnection.sendPacket(new PacketPlayOutCustomPayload(PacketPlayOutCustomPayload.a, (new PacketDataSerializer(Unpooled.buffer())).a(this.getServer().getServerModName())));
|
|
+ playerconnection.sendPacket(new PacketPlayOutCustomPayload(PacketPlayOutCustomPayload.a, (new PacketDataSerializer(Unpooled.buffer())).a(org.yatopiamc.yatopia.server.YatopiaConfig.brandName))); // Yatopia
|
|
playerconnection.sendPacket(new PacketPlayOutServerDifficulty(worlddata.getDifficulty(), worlddata.isDifficultyLocked()));
|
|
playerconnection.sendPacket(new PacketPlayOutAbilities(entityplayer.abilities));
|
|
playerconnection.sendPacket(new PacketPlayOutHeldItemSlot(entityplayer.inventory.itemInHandIndex));
|
|
diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java
|
|
index 330ff6ff03c6be4d35d4f594e3202209ff584341..426936975c876d2aecfc30f9d086ececcc73a3a4 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/EntityLiving.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java
|
|
@@ -370,6 +370,7 @@ public abstract class EntityLiving extends Entity {
|
|
this.world.getMethodProfiler().enter("livingEntityBaseTick");
|
|
boolean flag = this instanceof EntityHuman;
|
|
|
|
+ if (!org.yatopiamc.yatopia.server.YatopiaConfig.disableEntityStuckChecks) { // Yatopia
|
|
if (this.isAlive()) {
|
|
if (this.inBlock()) {
|
|
this.damageEntity(DamageSource.STUCK, 1.0F);
|
|
@@ -386,6 +387,7 @@ public abstract class EntityLiving extends Entity {
|
|
}
|
|
}
|
|
}
|
|
+ } // Yatopia
|
|
|
|
if (this.isFireProof() || this.world.isClientSide) {
|
|
this.extinguish();
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
index 1f7a592aa8e76d0ff4cb6391f1c0b8a8e85c427d..f4a5ed86dfbd9c11f070d05016fc6a3cc67d4ea1 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
@@ -877,6 +877,7 @@ public final class CraftServer implements Server {
|
|
playerList.getProfileBans().load();
|
|
} catch (IOException ex) {
|
|
logger.log(Level.WARNING, "Failed to load banned-players.json, " + ex.getMessage());
|
|
+ org.yatopiamc.yatopia.server.YatopiaConfig.init((File) console.options.valueOf("yatopia-settings")); // Yatopia
|
|
}
|
|
|
|
org.spigotmc.SpigotConfig.init((File) console.options.valueOf("spigot-settings")); // Spigot
|
|
@@ -2408,6 +2409,13 @@ public final class CraftServer implements Server {
|
|
org.spigotmc.RestartCommand.restart();
|
|
}
|
|
|
|
+ // Yatopia start
|
|
+ @Override
|
|
+ public YamlConfiguration getYatopiaConfig() {
|
|
+ return org.yatopiamc.yatopia.server.YatopiaConfig.config;
|
|
+ }
|
|
+ // Yatopia end
|
|
+
|
|
@Override
|
|
public void broadcast(BaseComponent component) {
|
|
for (Player player : getOnlinePlayers()) {
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
|
|
index 05f6fe3db3fd6637e21066b174baef462557804a..8a08cd35c4645ef83aa26cbfde1c583b123e2c6a 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
|
|
@@ -170,6 +170,14 @@ public class Main {
|
|
.describedAs("Yml file");
|
|
// Origami end - Server Config
|
|
|
|
+ // Yatopia start
|
|
+ acceptsAll(asList("yatopia", "yatopia-settings"), "File for yatopia settings")
|
|
+ .withRequiredArg()
|
|
+ .ofType(File.class)
|
|
+ .defaultsTo(new File("yatopia.yml"))
|
|
+ .describedAs("Yml file");
|
|
+ // Yatopia end
|
|
+
|
|
// Paper start
|
|
acceptsAll(asList("server-name"), "Name of the server")
|
|
.withRequiredArg()
|
|
diff --git a/src/main/java/org/yatopiamc/yatopia/server/YatopiaConfig.java b/src/main/java/org/yatopiamc/yatopia/server/YatopiaConfig.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..f5a43e607f9c13e07a0f5e7e139eed93f159185b
|
|
--- /dev/null
|
|
+++ b/src/main/java/org/yatopiamc/yatopia/server/YatopiaConfig.java
|
|
@@ -0,0 +1,192 @@
|
|
+package org.yatopiamc.yatopia.server;
|
|
+
|
|
+import com.google.common.base.Throwables;
|
|
+import java.io.File;
|
|
+import java.io.IOException;
|
|
+import java.lang.reflect.InvocationTargetException;
|
|
+import java.lang.reflect.Method;
|
|
+import java.lang.reflect.Modifier;
|
|
+import java.util.List;
|
|
+import java.util.concurrent.TimeUnit;
|
|
+import java.util.logging.Level;
|
|
+import java.util.regex.Pattern;
|
|
+import org.bukkit.Bukkit;
|
|
+import org.bukkit.configuration.InvalidConfigurationException;
|
|
+import org.bukkit.configuration.file.YamlConfiguration;
|
|
+
|
|
+public class YatopiaConfig {
|
|
+
|
|
+ public static File CONFIG_FILE;
|
|
+ private static final String HEADER = "This is the main configuration file for Yatopia.\n"
|
|
+ + "Yatopia contains many breaking changes and settings, so know what you are doing!\n"
|
|
+ + "You have been warned!\n";
|
|
+ /*========================================================================*/
|
|
+ public static YamlConfiguration config;
|
|
+ public static int version; // since we're remapping sidestreams' configs we need this public
|
|
+ public static boolean verbose; // since we're remapping sidestreams' configs we need this public
|
|
+ /*========================================================================*/
|
|
+
|
|
+ public static void init(File configFile) {
|
|
+ CONFIG_FILE = configFile;
|
|
+ config = new YamlConfiguration();
|
|
+ try {
|
|
+ config.load(CONFIG_FILE);
|
|
+ } catch (IOException ex) {
|
|
+ } catch (InvalidConfigurationException ex) {
|
|
+ Bukkit.getLogger().log(Level.SEVERE, "Could not load yatopia.yml, please correct your syntax errors", ex);
|
|
+ throw Throwables.propagate(ex);
|
|
+ }
|
|
+ config.options().header(HEADER);
|
|
+ config.options().copyDefaults(true);
|
|
+ verbose = getBoolean("verbose", false);
|
|
+
|
|
+ version = getInt("config-version", 1);
|
|
+ set("config-version", 1);
|
|
+ removeLeftovers();
|
|
+ readConfig(YatopiaConfig.class, null);
|
|
+ }
|
|
+
|
|
+ private static void removeLeftovers() {
|
|
+ // this method is only to remove non-used values in the config
|
|
+
|
|
+ // leftover from rainforest
|
|
+ if (config.get("world-settings") != null) {
|
|
+ set("world-settings", null);
|
|
+ }
|
|
+ if (config.get("allow-player-item-duplication") != null) {
|
|
+ set("allow-player-item-duplication", null);
|
|
+ }
|
|
+ if (config.get("allow-ridable-chestable-duping") != null) {
|
|
+ set("allow-ridable-chestable-duping", null);
|
|
+ }
|
|
+ if (config.get("allow-sand-duping") != null) {
|
|
+ set("allow-sand-duping", null);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ protected static void logError(String s) {
|
|
+ Bukkit.getLogger().severe(s);
|
|
+ }
|
|
+
|
|
+ protected static void log(String s) {
|
|
+ if (verbose) {
|
|
+ Bukkit.getLogger().info(s);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ static void readConfig(Class<?> clazz, Object instance) {
|
|
+ for (Method method : clazz.getDeclaredMethods()) {
|
|
+ if (Modifier.isPrivate(method.getModifiers())) {
|
|
+ if (method.getParameterTypes().length == 0 && method.getReturnType() == Void.TYPE) {
|
|
+ try {
|
|
+ method.setAccessible(true);
|
|
+ method.invoke(instance);
|
|
+ } catch (InvocationTargetException ex) {
|
|
+ throw Throwables.propagate(ex.getCause());
|
|
+ } catch (Exception ex) {
|
|
+ Bukkit.getLogger().log(Level.SEVERE, "Error invoking " + method, ex);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ try {
|
|
+ config.save(CONFIG_FILE);
|
|
+ } catch (IOException ex) {
|
|
+ Bukkit.getLogger().log(Level.SEVERE, "Could not save " + CONFIG_FILE, ex);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ private static final Pattern SPACE = Pattern.compile(" ");
|
|
+ private static final Pattern NOT_NUMERIC = Pattern.compile("[^-\\d.]");
|
|
+
|
|
+ public static int getSeconds(String str) {
|
|
+ str = SPACE.matcher(str).replaceAll("");
|
|
+ final char unit = str.charAt(str.length() - 1);
|
|
+ str = NOT_NUMERIC.matcher(str).replaceAll("");
|
|
+ double num;
|
|
+ try {
|
|
+ num = Double.parseDouble(str);
|
|
+ } catch (Exception e) {
|
|
+ num = 0D;
|
|
+ }
|
|
+ switch (unit) {
|
|
+ case 'd':
|
|
+ num *= (double) 60 * 60 * 24;
|
|
+ break;
|
|
+ case 'h':
|
|
+ num *= (double) 60 * 60;
|
|
+ break;
|
|
+ case 'm':
|
|
+ num *= 60;
|
|
+ break;
|
|
+ default:
|
|
+ case 's':
|
|
+ break;
|
|
+ }
|
|
+ return (int) num;
|
|
+ }
|
|
+
|
|
+ protected static String timeSummary(int seconds) {
|
|
+ String time = "";
|
|
+
|
|
+ if (seconds > 60 * 60 * 24) {
|
|
+ time += TimeUnit.SECONDS.toDays(seconds) + "d";
|
|
+ seconds %= 60 * 60 * 24;
|
|
+ }
|
|
+
|
|
+ if (seconds > 60 * 60) {
|
|
+ time += TimeUnit.SECONDS.toHours(seconds) + "h";
|
|
+ seconds %= 60 * 60;
|
|
+ }
|
|
+
|
|
+ if (seconds > 0) {
|
|
+ time += TimeUnit.SECONDS.toMinutes(seconds) + "m";
|
|
+ }
|
|
+ return time;
|
|
+ }
|
|
+
|
|
+ private static void set(String path, Object val) {
|
|
+ config.set(path, val);
|
|
+ }
|
|
+
|
|
+ private static boolean getBoolean(String path, boolean def) {
|
|
+ config.addDefault(path, def);
|
|
+ return config.getBoolean(path, config.getBoolean(path));
|
|
+ }
|
|
+
|
|
+ private static double getDouble(String path, double def) {
|
|
+ config.addDefault(path, def);
|
|
+ return config.getDouble(path, config.getDouble(path));
|
|
+ }
|
|
+
|
|
+ private static float getFloat(String path, float def) {
|
|
+ // TODO: Figure out why getFloat() always returns the default value.
|
|
+ return (float) getDouble(path, (double) def);
|
|
+ }
|
|
+
|
|
+ private static int getInt(String path, int def) {
|
|
+ config.addDefault(path, def);
|
|
+ return config.getInt(path, config.getInt(path));
|
|
+ }
|
|
+
|
|
+ private static <T> List<T> getList(String path, List<T> def) {
|
|
+ config.addDefault(path, def);
|
|
+ return (List<T>) config.getList(path, config.getList(path));
|
|
+ }
|
|
+
|
|
+ private static String getString(String path, String def) {
|
|
+ config.addDefault(path, def);
|
|
+ return config.getString(path, config.getString(path));
|
|
+ }
|
|
+
|
|
+ public static boolean disableEntityStuckChecks = false;
|
|
+ private static void disableEntityStuckChecks() {
|
|
+ disableEntityStuckChecks = getBoolean("settings.disableEntityStuckChecks", false);
|
|
+ }
|
|
+
|
|
+ public static String brandName = "Yatopia";
|
|
+ private static void brandName() {
|
|
+ brandName = getString("brand-name", brandName);
|
|
+ }
|
|
+}
|