diff --git a/Spigot-API-Patches/0219-Add-Operator-API.patch b/Spigot-API-Patches/0219-Add-Operator-API.patch new file mode 100644 index 000000000000..f60cd5d94a92 --- /dev/null +++ b/Spigot-API-Patches/0219-Add-Operator-API.patch @@ -0,0 +1,29 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: BuildTools +Date: Thu, 6 Aug 2020 23:56:05 +0800 +Subject: [PATCH] Add-Operator-API + + +diff --git a/src/main/java/org/bukkit/permissions/ServerOperator.java b/src/main/java/org/bukkit/permissions/ServerOperator.java +index 26ed24307b0c84e8946cf9f276012ea6d5219b9d..d177cb021c91909b429a2e037a244bfb0807f6f2 100644 +--- a/src/main/java/org/bukkit/permissions/ServerOperator.java ++++ b/src/main/java/org/bukkit/permissions/ServerOperator.java +@@ -21,4 +21,18 @@ public interface ServerOperator { + * @param value New operator value + */ + public void setOp(boolean value); ++ ++ /** ++ * Checks if this object is a server operator ++ * ++ * @return int OP Level of the Object ++ */ ++ public int getOPLevel(); ++ ++ /** ++ * Sets the OP Level of this object ++ * ++ * @param value OP Level to set Object to ++ */ ++ public void setOPLevel(int level); + } diff --git a/Spigot-API-Patches/0220-Fix-Operator-API-Bug.patch b/Spigot-API-Patches/0220-Fix-Operator-API-Bug.patch new file mode 100644 index 000000000000..29251623e122 --- /dev/null +++ b/Spigot-API-Patches/0220-Fix-Operator-API-Bug.patch @@ -0,0 +1,55 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: BuildTools +Date: Fri, 7 Aug 2020 00:36:08 +0800 +Subject: [PATCH] Fix-Operator-API-Bug + + +diff --git a/src/main/java/org/bukkit/command/MessageCommandSender.java b/src/main/java/org/bukkit/command/MessageCommandSender.java +index ca1893e9fb41baae0d103f1a925e33f3dfa273be..3f260270cb08afb5df277cf710574a4d93912078 100644 +--- a/src/main/java/org/bukkit/command/MessageCommandSender.java ++++ b/src/main/java/org/bukkit/command/MessageCommandSender.java +@@ -35,6 +35,16 @@ public interface MessageCommandSender extends CommandSender { + throw new NotImplementedException(); + } + ++ @Override ++ default int getOPLevel() { ++ throw new NotImplementedException(); ++ } ++ ++ @Override ++ default void setOPLevel(int level) { ++ throw new NotImplementedException(); ++ } ++ + @Override + default boolean isOp() { + throw new NotImplementedException(); +diff --git a/src/main/java/org/bukkit/permissions/PermissibleBase.java b/src/main/java/org/bukkit/permissions/PermissibleBase.java +index c94e4cdb5785d5dfcb704c4adabda0b19a20ec7d..deee817ae89c09b4c89503d08e0ecfcaa517eec7 100644 +--- a/src/main/java/org/bukkit/permissions/PermissibleBase.java ++++ b/src/main/java/org/bukkit/permissions/PermissibleBase.java +@@ -31,6 +31,7 @@ public class PermissibleBase implements Permissible { + recalculatePermissions(); + } + ++ + @Override + public boolean isOp() { + if (opable == null) { +@@ -270,4 +271,15 @@ public class PermissibleBase implements Permissible { + attachment.remove(); + } + } ++ ++ @Override ++ public int getOPLevel() { ++ if(opable == null) throw new UnsupportedOperationException("Cannot get OP Level as no ServerOperator is set"); ++ return opable.getOPLevel(); ++ } ++ ++ @Override ++ public void setOPLevel(int level) { ++ if(opable != null) opable.setOPLevel(level); ++ } + } diff --git a/Spigot-Server-Patches/0551-Updated-Paper-Config.patch b/Spigot-Server-Patches/0551-Updated-Paper-Config.patch new file mode 100644 index 000000000000..78c90ad6296c --- /dev/null +++ b/Spigot-Server-Patches/0551-Updated-Paper-Config.patch @@ -0,0 +1,41 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: BuildTools +Date: Thu, 6 Aug 2020 23:31:29 +0800 +Subject: [PATCH] Updated-Paper-Config + + +diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +index e471e764935e2a89560de56959a782b02e5e8fe1..19cfef1a1ea771f065ef373ae54d2a3501e34e7a 100644 +--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java ++++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +@@ -72,6 +72,15 @@ public class PaperWorldConfig { + return config.getString("world-settings." + worldName + "." + path, config.getString("world-settings.default." + path)); + } + ++ public boolean removeWitchConversion; ++ public boolean disableAttackCooldown; ++ private void advancedSurvivalSettings() { ++ removeWitchConversion = getBoolean("villagers-immune-to-lightning", true); ++ disableAttackCooldown = getBoolean("disable-attack-cooldown", true); ++ log("Villagers immune to Lightning: " + removeWitchConversion); ++ log("Attack Cooldown disabled: " + disableAttackCooldown); ++ } ++ + public int cactusMaxHeight; + public int reedMaxHeight; + private void blockGrowthHeight() { +@@ -578,14 +587,12 @@ public class PaperWorldConfig { + generateFlatBedrock = getBoolean("generator-settings.flat-bedrock", false); + } + +- public boolean disablePillagerPatrols = false; + public double patrolSpawnChance = 0.2; + public boolean patrolPerPlayerDelay = false; + public int patrolDelay = 12000; + public boolean patrolPerPlayerStart = false; + public int patrolStartDay = 5; + private void pillagerSettings() { +- disablePillagerPatrols = getBoolean("game-mechanics.disable-pillager-patrols", disablePillagerPatrols); + patrolSpawnChance = getDouble("game-mechanics.pillager-patrols.spawn-chance", patrolSpawnChance); + patrolPerPlayerDelay = getBoolean("game-mechanics.pillager-patrols.spawn-delay.per-player", patrolPerPlayerDelay); + patrolDelay = getInt("game-mechanics.pillager-patrols.spawn-delay.ticks", patrolDelay); diff --git a/Spigot-Server-Patches/0552-Removed-redundant-Patrol-Option-and-Fixed-Patrol-Spa.patch b/Spigot-Server-Patches/0552-Removed-redundant-Patrol-Option-and-Fixed-Patrol-Spa.patch new file mode 100644 index 000000000000..27cbd7bf5f72 --- /dev/null +++ b/Spigot-Server-Patches/0552-Removed-redundant-Patrol-Option-and-Fixed-Patrol-Spa.patch @@ -0,0 +1,23 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: BuildTools +Date: Thu, 6 Aug 2020 23:32:55 +0800 +Subject: [PATCH] Removed-redundant-Patrol-Option-and-Fixed-Patrol-Spawning + + +diff --git a/src/main/java/net/minecraft/server/MobSpawnerPatrol.java b/src/main/java/net/minecraft/server/MobSpawnerPatrol.java +index 776e54ff472a67f535dfb409e753325a1105bcce..c0c94b5bfffba092010bae66a99685943bedd47d 100644 +--- a/src/main/java/net/minecraft/server/MobSpawnerPatrol.java ++++ b/src/main/java/net/minecraft/server/MobSpawnerPatrol.java +@@ -10,10 +10,8 @@ public class MobSpawnerPatrol implements MobSpawner { + + @Override + public int a(WorldServer worldserver, boolean flag, boolean flag1) { +- if (worldserver.paperConfig.disablePillagerPatrols || worldserver.paperConfig.patrolSpawnChance == 0) return 0; // Paper +- if (!flag) { +- return 0; +- } else if (!worldserver.getGameRules().getBoolean(GameRules.DO_PATROL_SPAWNING)) { ++ if (worldserver.paperConfig.patrolSpawnChance == 0) return 0; // Paper ++ if (!worldserver.getGameRules().getBoolean(GameRules.DO_PATROL_SPAWNING)) { + return 0; + } else { + Random random = worldserver.random; diff --git a/Spigot-Server-Patches/0553-Trader-Spawning-now-depends-on-specific-gamerule.patch b/Spigot-Server-Patches/0553-Trader-Spawning-now-depends-on-specific-gamerule.patch new file mode 100644 index 000000000000..0980190430b8 --- /dev/null +++ b/Spigot-Server-Patches/0553-Trader-Spawning-now-depends-on-specific-gamerule.patch @@ -0,0 +1,30 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: BuildTools +Date: Thu, 6 Aug 2020 23:34:02 +0800 +Subject: [PATCH] Trader-Spawning-now-depends-on-specific-gamerule + + +diff --git a/src/main/java/net/minecraft/server/MobSpawnerTrader.java b/src/main/java/net/minecraft/server/MobSpawnerTrader.java +index 736b794f8268858e2e63a3aafef328b443386989..757b02f644e50c0e3467984eda274ca4c71b778c 100644 +--- a/src/main/java/net/minecraft/server/MobSpawnerTrader.java ++++ b/src/main/java/net/minecraft/server/MobSpawnerTrader.java +@@ -41,11 +41,7 @@ public class MobSpawnerTrader implements MobSpawner { + return 0; + } else { + this.d = 24000; +- if (!worldserver.getGameRules().getBoolean(GameRules.DO_MOB_SPAWNING)) { +- return 0; +- } else { + int i = this.e; +- + this.e = MathHelper.clamp(this.e + 25, 25, 75); + this.b.h(this.e); + if (this.a.nextInt(100) > i) { +@@ -56,7 +52,6 @@ public class MobSpawnerTrader implements MobSpawner { + } else { + return 0; + } +- } + } + } + } diff --git a/Spigot-Server-Patches/0554-Added-Option-to-disable-Villager-Witch-Conversion.patch b/Spigot-Server-Patches/0554-Added-Option-to-disable-Villager-Witch-Conversion.patch new file mode 100644 index 000000000000..6400bf594dc8 --- /dev/null +++ b/Spigot-Server-Patches/0554-Added-Option-to-disable-Villager-Witch-Conversion.patch @@ -0,0 +1,21 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: BuildTools +Date: Thu, 6 Aug 2020 23:35:46 +0800 +Subject: [PATCH] Added-Option-to-disable-Villager-Witch-Conversion + + +diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java +index bf019043a9338aca8d91da809f1d5520531386e7..683304a2381de1fdb22205023c0d41c83c617f8d 100644 +--- a/src/main/java/net/minecraft/server/EntityVillager.java ++++ b/src/main/java/net/minecraft/server/EntityVillager.java +@@ -722,6 +722,10 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation + + @Override + public void onLightningStrike(EntityLightning entitylightning) { ++ if(this.world.paperConfig.removeWitchConversion) { ++ super.onLightningStrike(entitylightning); ++ return; ++ } + if (this.world.getDifficulty() != EnumDifficulty.PEACEFUL) { + EntityVillager.LOGGER.info("Villager {} was struck by lightning {}.", this, entitylightning); + EntityWitch entitywitch = (EntityWitch) EntityTypes.WITCH.a(this.world); diff --git a/Spigot-Server-Patches/0555-Added-Option-to-disable-Attack-Cooldown.patch b/Spigot-Server-Patches/0555-Added-Option-to-disable-Attack-Cooldown.patch new file mode 100644 index 000000000000..3802df03bd75 --- /dev/null +++ b/Spigot-Server-Patches/0555-Added-Option-to-disable-Attack-Cooldown.patch @@ -0,0 +1,29 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: BuildTools +Date: Thu, 6 Aug 2020 23:39:25 +0800 +Subject: [PATCH] Added-Option-to-disable-Attack-Cooldown + + +diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java +index e5a81f831813209d224ffedbc03f6d8243721a25..4f43cea652d26173f00909ec6444aa46a14d9724 100644 +--- a/src/main/java/net/minecraft/server/EntityPlayer.java ++++ b/src/main/java/net/minecraft/server/EntityPlayer.java +@@ -122,6 +122,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { + double lastEntitySpawnRadiusSquared; // Paper - optimise isOutsideRange, this field is in blocks + + boolean needsChunkCenterUpdate; // Paper - no-tick view distance ++ private AttributeModifier disableCooldown = new AttributeModifier("DisableCooldown", 7200, AttributeModifier.Operation.ADDITION); + + public EntityPlayer(MinecraftServer minecraftserver, WorldServer worldserver, GameProfile gameprofile, PlayerInteractManager playerinteractmanager) { + super(worldserver, worldserver.getSpawn(), gameprofile); +@@ -548,6 +549,10 @@ public class EntityPlayer extends EntityHuman implements ICrafting { + this.a(IScoreboardCriteria.XP, MathHelper.f((float) this.lastExpTotalScored)); + } + ++ if(this.world.paperConfig.disableAttackCooldown && !this.getAttributeInstance(GenericAttributes.ATTACK_SPEED).getModifiers().contains(disableCooldown)) { ++ this.getAttributeInstance(GenericAttributes.ATTACK_SPEED).addModifier(disableCooldown); ++ } ++ + // CraftBukkit start - Force max health updates + if (this.maxHealthCache != this.getMaxHealth()) { + this.getBukkitEntity().updateScaledHealth(); diff --git a/Spigot-Server-Patches/0556-Operator-API-Impl.patch b/Spigot-Server-Patches/0556-Operator-API-Impl.patch new file mode 100644 index 000000000000..71705d78be3d --- /dev/null +++ b/Spigot-Server-Patches/0556-Operator-API-Impl.patch @@ -0,0 +1,183 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: BuildTools +Date: Thu, 6 Aug 2020 23:55:39 +0800 +Subject: [PATCH] Operator-API-Impl + + +diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java +index 9382e8f79e8edec8885c629a36e230fbec50e1fb..fda45f3e4588c46d40ccedf5ef1fd1dbc2b70ae3 100644 +--- a/src/main/java/net/minecraft/server/PlayerList.java ++++ b/src/main/java/net/minecraft/server/PlayerList.java +@@ -1011,6 +1011,19 @@ public abstract class PlayerList { + return this.l; + } + ++ public void setOPLevel(GameProfile profile, int level) { ++ if(level > 4) level = 4; ++ if(level <= 0) { ++ this.removeOp(profile); ++ return; ++ } ++ this.operators.add(new OpListEntry(profile, level, this.operators.b(profile))); ++ EntityPlayer entityplayer = this.getPlayer(profile.getId()); ++ if (entityplayer != null) { ++ this.d(entityplayer); ++ } ++ } ++ + public void addOp(GameProfile gameprofile) { + this.operators.add(new OpListEntry(gameprofile, this.server.g(), this.operators.b(gameprofile))); + EntityPlayer entityplayer = this.getPlayer(gameprofile.getId()); +diff --git a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java +index 5770d4183c1b9ab6119a25930283c0235250ed6e..631eb25ef344818e349b401133ecc7f8da61efd5 100644 +--- a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java ++++ b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java +@@ -525,4 +525,14 @@ public class CraftOfflinePlayer implements OfflinePlayer, ConfigurationSerializa + manager.save(); + } + } ++ ++ @Override ++ public int getOPLevel() { ++ return server.getServer().b(getProfile()); ++ } ++ ++ @Override ++ public void setOPLevel(int level) { ++ server.getHandle().setOPLevel(getProfile(), level); ++ } + } +diff --git a/src/main/java/org/bukkit/craftbukkit/command/CraftBlockCommandSender.java b/src/main/java/org/bukkit/craftbukkit/command/CraftBlockCommandSender.java +index 17aa866252a95a9d9a22f0b0b98f2f9d2c700bb5..2925415133af82434fbb82efbc80486cc815a93d 100644 +--- a/src/main/java/org/bukkit/craftbukkit/command/CraftBlockCommandSender.java ++++ b/src/main/java/org/bukkit/craftbukkit/command/CraftBlockCommandSender.java +@@ -59,4 +59,14 @@ public class CraftBlockCommandSender extends ServerCommandSender implements Bloc + public CommandListenerWrapper getWrapper() { + return block; + } ++ ++ @Override ++ public int getOPLevel() { ++ return 4; ++ } ++ ++ @Override ++ public void setOPLevel(int level) { ++ return; ++ } + } +diff --git a/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java b/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java +index e67da10f9bfbb8125d8fbf34695997ecfebcc484..3c989d0a4a4433f836a4030a2690522fb69c1f11 100644 +--- a/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java ++++ b/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java +@@ -86,4 +86,14 @@ public class CraftConsoleCommandSender extends ServerCommandSender implements Co + return com.destroystokyo.paper.PaperConfig.consoleHasAllPermissions || super.hasPermission(perm); + } + // Paper end ++ ++ @Override ++ public int getOPLevel() { ++ return 4; ++ } ++ ++ @Override ++ public void setOPLevel(int level) { ++ return; ++ } + } +diff --git a/src/main/java/org/bukkit/craftbukkit/command/CraftRemoteConsoleCommandSender.java b/src/main/java/org/bukkit/craftbukkit/command/CraftRemoteConsoleCommandSender.java +index 5562a7199f9b73d6af539360d4912d1dbde5d6cf..dc304487cc35a7fc08bc0a8df7cd5991eaa79516 100644 +--- a/src/main/java/org/bukkit/craftbukkit/command/CraftRemoteConsoleCommandSender.java ++++ b/src/main/java/org/bukkit/craftbukkit/command/CraftRemoteConsoleCommandSender.java +@@ -51,4 +51,14 @@ public class CraftRemoteConsoleCommandSender extends ServerCommandSender impleme + return com.destroystokyo.paper.PaperConfig.consoleHasAllPermissions || super.hasPermission(perm); + } + // Paper end ++ ++ @Override ++ public int getOPLevel() { ++ return 4; ++ } ++ ++ @Override ++ public void setOPLevel(int level) { ++ return; ++ } + } +diff --git a/src/main/java/org/bukkit/craftbukkit/command/ProxiedNativeCommandSender.java b/src/main/java/org/bukkit/craftbukkit/command/ProxiedNativeCommandSender.java +index ce2c5c38c3df124ca1569cbd7cec62a9cf11f3d5..8d43131b2fbe02ab13fc0e97c327f8eb4180d6d2 100644 +--- a/src/main/java/org/bukkit/craftbukkit/command/ProxiedNativeCommandSender.java ++++ b/src/main/java/org/bukkit/craftbukkit/command/ProxiedNativeCommandSender.java +@@ -129,4 +129,14 @@ public class ProxiedNativeCommandSender implements ProxiedCommandSender { + return getCaller().spigot(); + } + // Spigot end ++ ++ @Override ++ public int getOPLevel() { ++ return 4; ++ } ++ ++ @Override ++ public void setOPLevel(int level) { ++ return; ++ } + } +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +index d1df4e5799de4bf0a1fcc6940e2498374cd3db9d..8373daec010b43a3f897e618992f6b9d33817a5a 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +@@ -915,6 +915,14 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { + return getPermissibleBase().isOp(); + } + ++ @Override ++ public int getOPLevel() { ++ return 0; ++ } ++ ++ @Override ++ public void setOPLevel(int level) {}; ++ + @Override + public void setOp(boolean value) { + getPermissibleBase().setOp(value); +@@ -1045,6 +1053,16 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { + public void setOp(boolean value) { + + } ++ ++ @Override ++ public int getOPLevel() { ++ return 0; ++ } ++ ++ @Override ++ public void setOPLevel(int level) { ++ ++ } + }); + } + return perm; +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +index adf918fd757fe3147f897de3ade64a9adf1d3203..546cd65b8e235cc6e2e44faa5e7cd3fec0c732b1 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +@@ -161,6 +161,17 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + return getHandle().getProfile(); + } + ++ @Override ++ public int getOPLevel() { ++ return server.getServer().b(getProfile()); ++ } ++ ++ @Override ++ public void setOPLevel(int level) { ++ server.getHandle().setOPLevel(getProfile(), level); ++ perm.recalculatePermissions(); ++ } ++ + @Override + public boolean isOp() { + return server.getHandle().isOp(getProfile()); diff --git a/Spigot-Server-Patches/0557-Add-ability-to-use-Gamemode-ID-for-Command.patch b/Spigot-Server-Patches/0557-Add-ability-to-use-Gamemode-ID-for-Command.patch new file mode 100644 index 000000000000..f082d8587baa --- /dev/null +++ b/Spigot-Server-Patches/0557-Add-ability-to-use-Gamemode-ID-for-Command.patch @@ -0,0 +1,22 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: BuildTools +Date: Fri, 7 Aug 2020 00:11:54 +0800 +Subject: [PATCH] Add-ability-to-use-Gamemode-ID-for-Command + + +diff --git a/src/main/java/net/minecraft/server/CommandGamemode.java b/src/main/java/net/minecraft/server/CommandGamemode.java +index 8400fa356dd2c5a76ac7741d114bf066af8043c5..01f6433f2e889e352cb8ac73fa28f0672140a72f 100644 +--- a/src/main/java/net/minecraft/server/CommandGamemode.java ++++ b/src/main/java/net/minecraft/server/CommandGamemode.java +@@ -25,6 +25,11 @@ public class CommandGamemode { + })).then(CommandDispatcher.a("target", (ArgumentType) ArgumentEntity.d()).executes((commandcontext) -> { + return a(commandcontext, ArgumentEntity.f(commandcontext, "target"), enumgamemode); + }))); ++ literalargumentbuilder.then(((LiteralArgumentBuilder) CommandDispatcher.a(String.valueOf(enumgamemode.getId())).executes((commandcontext) -> { ++ return a(commandcontext, (Collection) Collections.singleton(((CommandListenerWrapper) commandcontext.getSource()).h()), enumgamemode); ++ })).then(CommandDispatcher.a("target", (ArgumentType) ArgumentEntity.d()).executes((commandcontext) -> { ++ return a(commandcontext, ArgumentEntity.f(commandcontext, "target"), enumgamemode); ++ }))); + } + } +