···4646You can download the latest build through [GitHub actions](https://github.com/Moresteck/Project-Poseidon-Uberbukkit/actions/workflows/build-and-test.yaml) (You need to be logged in on GitHub) <br>
4747or get it from [betacraft.uk](https://betacraft.uk/utilities) along with **pre-made configuration files**.
48484949+Please note, download the artifact (JAR) without `original` in the name, eg. `uberbukkit-2.0.2.jar`.
5050+4951## Licensing
5052CraftBukkit and Bukkit are licensed under GNU General Public License v3.0<br>
5153Any future commits to this repository will remain under the same GNU General Public License v3.0<br>
···134134 generateConfigOption("world.settings.block-tree-growth.info", "This setting allows for server owners to easily block trees growing from automatically destroying certain blocks. The list must be a string with numerical item ids separated by commas.");
135135 generateConfigOption("world.settings.block-pistons-pushing-furnaces.info", "This workaround prevents pistons from pushing furnaces which prevents a malicious server crash.");
136136 generateConfigOption("world.settings.block-pistons-pushing-furnaces.enabled", true);
137137+ generateConfigOption("world.settings.pistons.transmutation-fix.enabled", true);
138138+ generateConfigOption("world.settings.pistons.transmutation-fix.info", "This setting fixes block transmutation exploits.");
139139+ generateConfigOption("world.settings.pistons.sand-gravel-duping-fix.enabled", true);
140140+ generateConfigOption("world.settings.pistons.sand-gravel-duping-fix.info", "This setting fixes sand/gravel duplication exploits.");
141141+ generateConfigOption("world.settings.pistons.other-fixes.enabled", true);
142142+ generateConfigOption("world.settings.pistons.other-fixes.info", "This setting fixes various other piston exploits like creating illegal pistons, breaking bedrock and duplicating redstone torches.");
137143 generateConfigOption("world.settings.skeleton-shooting-sound-fix.info", "This setting fixes the sound of skeletons and players shooting not playing on clients.");
138144 generateConfigOption("world.settings.skeleton-shooting-sound-fix.enabled", true);
139145 generateConfigOption("world.settings.speed-hack-check.enable", true);
···172178 generateConfigOption("emergency.debug.regenerate-corrupt-chunks.enable", false);
173179 generateConfigOption("emergency.debug.regenerate-corrupt-chunks.info", "This setting allows you to automatically regenerate corrupt chunks. This is useful after a ungraceful shutdown while a file is being written to or out of memory exception.");
174180181181+ generateConfigOption("settings.update-checker.enabled", true);
182182+ generateConfigOption("settings.update-checker.info", "This setting allows you to disable the update checker. This is useful if you have a custom build of Poseidon or don't want to be notified of updates.");
183183+ generateConfigOption("settings.update-checker.notify-staff.enabled", true);
184184+ generateConfigOption("settings.update-checker.notify-staff.info", "This setting notifies operators and players with the permission poseidon.update when a new version of Poseidon is available on join.");
185185+175186 //Messages
176187 generateConfigOption("message.kick.banned", "You are banned from this server!");
177188 generateConfigOption("message.kick.ip-banned", "Your IP address is banned from this server!");
···181192 generateConfigOption("message.kick.already-online", "\u00A7cA player with your username or uuid is already online, try reconnecting in a minute.");
182193 generateConfigOption("message.player.join", "\u00A7e%player% joined the game.");
183194 generateConfigOption("message.player.leave", "\u00A7e%player% left the game.");
195195+ generateConfigOption("message.update.available", "\u00A7dA newer version of Poseidon is available: %newversion%");
184196185197 //Optional Poseidon Commands
186198 generateConfigOption("command.info", "This section allows you to enable or disable optional Poseidon commands. This is useful if you have a plugin that conflicts with a Poseidon command.");
···1616 public void remove(World world, int i, int j, int k) {
1717 super.remove(world, i, j, k);
1818 int l = world.getData(i, j, k);
1919- if (l > 5 || l < 0) return; // CraftBukkit - fixed a piston AIOOBE issue.
1919+ if (l < 0 || l == 6 || l == 7 || l > 13) return; // CraftBukkit - fixed a piston AIOOBE issue.
2020 int i1 = PistonBlockTextures.a[b(l)];
21212222 i += PistonBlockTextures.b[i1];
···11package net.minecraft.server;
2233+import com.legacyminecraft.poseidon.Poseidon;
34import com.legacyminecraft.poseidon.PoseidonConfig;
4556import uk.betacraft.uberbukkit.packet.Packet62Sound;
···120121 }
121122122123 // CraftBukkit start
123123- PlayerJoinEvent playerJoinEvent = new PlayerJoinEvent(this.cserver.getPlayer(entityplayer), msgPlayerJoin.replace("%player%", entityplayer.name));
124124+ Player player = this.cserver.getPlayer(entityplayer);
125125+ PlayerJoinEvent playerJoinEvent = new PlayerJoinEvent(player, msgPlayerJoin.replace("%player%", entityplayer.name));
124126 this.cserver.getPluginManager().callEvent(playerJoinEvent);
125127126128 String joinMessage = playerJoinEvent.getJoinMessage();
···129131 this.server.serverConfigurationManager.sendAll(new Packet3Chat(joinMessage));
130132 }
131133 // CraftBukkit end
134134+135135+ // Poseidon Start
136136+ // Notify staff of Poseidon update if they are op or have poseidon.update permission
137137+ if(PoseidonConfig.getInstance().getConfigBoolean("settings.update-checker.notify-staff.enabled", true) && Poseidon.getServer().isUpdateAvailable()) {
138138+ if (player.isOp() || player.hasPermission("poseidon.update")) {
139139+ String updateMessage = PoseidonConfig.getInstance().getConfigString("message.update.available");
140140+ updateMessage = updateMessage.replace("%newversion%", Poseidon.getServer().getNewestVersion());
141141+ updateMessage = updateMessage.replace("%currentversion%", Poseidon.getServer().getReleaseVersion());
142142+ player.sendMessage(updateMessage);
143143+ }
144144+ }
145145+ // Poseidon End
132146133147 worldserver.addEntity(entityplayer);
134148 this.getPlayerManager(entityplayer.dimension).addPlayer(entityplayer);
-21
src/main/java/org/bukkit/Server.java
···471471 */
472472 public Set<OfflinePlayer> getBannedPlayers();
473473474474- /**
475475- * Returns the current hide state of the command from param (Hide from console)
476476- *
477477- * @param cmdName Command name
478478- * @return True if the command from param is hidden and false otherwise
479479- */
480480- public boolean isCommandHidden(String cmdName);
481481-482482- /**
483483- * Hides the command from param from being logged to server console
484484- *
485485- * @param cmd Command name
486486- */
487487- public void addHiddenCommand(String cmd);
488488-489489- /**
490490- * Hides the commands from param from being logged to server console
491491- *
492492- * @param commands List of command names
493493- */
494494- public void addHiddenCommands(List<String> commands);
495474}
···140140 /**
141141 * Provides a lookup for all core events
142142 *
143143- * @see org.bukkit.event.
143143+ * @see org.bukkit.event
144144 */
145145 public enum Type {
146146···156156157157 PACKET_SENT(Category.PACKET),
158158159159+ CHEST_OPENED(Category.BLOCK),
159160160161 /**
161162 * Called when a player first starts their connection. Called before UUID is known.