From 61c3e75a529398a100e8d271bb78375eddcccfc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90=E1=BA=A1t=20Nh=C3=A2n=20Tr=C6=B0=C6=A1ng?= Date: Sat, 6 Aug 2022 18:13:47 +0700 Subject: [PATCH 1/3] Fully mirgate main source to Java NIO (except some files in tools). --- .../java/constants/string/CharsetConstants.java | 5 +++-- src/main/java/provider/DataProviderFactory.java | 1 - src/main/java/provider/wz/WZFiles.java | 4 ++-- src/main/java/provider/wz/XMLDomMapleData.java | 1 - .../java/scripting/AbstractScriptManager.java | 15 +++++++++------ 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/main/java/constants/string/CharsetConstants.java b/src/main/java/constants/string/CharsetConstants.java index 0656d37375..c64c9a1972 100644 --- a/src/main/java/constants/string/CharsetConstants.java +++ b/src/main/java/constants/string/CharsetConstants.java @@ -19,10 +19,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.FileNotFoundException; -import java.io.FileReader; import java.io.IOException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.Arrays; import java.util.Optional; @@ -61,7 +62,7 @@ public class CharsetConstants { private static String loadCharsetFromConfig() { try { - YamlReader reader = new YamlReader(new FileReader(YamlConfig.CONFIG_FILE_NAME, StandardCharsets.US_ASCII)); + YamlReader reader = new YamlReader(Files.newBufferedReader(Paths.get(YamlConfig.CONFIG_FILE_NAME), StandardCharsets.US_ASCII)); reader.getConfig().readConfig.setIgnoreUnknownProperties(true); StrippedYamlConfig charsetConfig = reader.read(StrippedYamlConfig.class); reader.close(); diff --git a/src/main/java/provider/DataProviderFactory.java b/src/main/java/provider/DataProviderFactory.java index a90751a83d..42e957b48a 100644 --- a/src/main/java/provider/DataProviderFactory.java +++ b/src/main/java/provider/DataProviderFactory.java @@ -24,7 +24,6 @@ package provider; import provider.wz.WZFiles; import provider.wz.XMLWZFile; -import java.io.File; import java.nio.file.Path; public class DataProviderFactory { diff --git a/src/main/java/provider/wz/WZFiles.java b/src/main/java/provider/wz/WZFiles.java index 783785e85e..af90f8d27d 100644 --- a/src/main/java/provider/wz/WZFiles.java +++ b/src/main/java/provider/wz/WZFiles.java @@ -1,6 +1,6 @@ package provider.wz; -import java.io.File; +import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -38,7 +38,7 @@ public enum WZFiles { private static String getWzDirectory() { // Either provide a custom directory path through the "wz-path" property when launching the .jar, or don't provide one to use the default "wz" directory String propertyPath = System.getProperty("wz-path"); - if (propertyPath != null && new File(propertyPath).isDirectory()) { + if (propertyPath != null && Files.isDirectory(Paths.get(propertyPath))) { return propertyPath; } diff --git a/src/main/java/provider/wz/XMLDomMapleData.java b/src/main/java/provider/wz/XMLDomMapleData.java index da37b46880..942c98bc50 100644 --- a/src/main/java/provider/wz/XMLDomMapleData.java +++ b/src/main/java/provider/wz/XMLDomMapleData.java @@ -34,7 +34,6 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import java.awt.*; -import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.nio.file.Path; diff --git a/src/main/java/scripting/AbstractScriptManager.java b/src/main/java/scripting/AbstractScriptManager.java index 8b921bf4d7..796be2c27e 100644 --- a/src/main/java/scripting/AbstractScriptManager.java +++ b/src/main/java/scripting/AbstractScriptManager.java @@ -28,9 +28,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.script.*; -import java.io.File; -import java.io.FileReader; + +import java.io.BufferedReader; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; /** * @author Matze @@ -45,8 +48,8 @@ public abstract class AbstractScriptManager { protected ScriptEngine getInvocableScriptEngine(String path) { path = "scripts/" + path; - File scriptFile = new File(path); - if (!scriptFile.exists()) { + Path scriptFile = Paths.get(path); + if (!Files.exists(scriptFile)) { return null; } @@ -57,8 +60,8 @@ public abstract class AbstractScriptManager { enableScriptHostAccess(graalScriptEngine); - try (FileReader fr = new FileReader(scriptFile, CharsetConstants.CHARSET)) { - engine.eval(fr); + try (BufferedReader br = Files.newBufferedReader(scriptFile, CharsetConstants.CHARSET)) { + engine.eval(br); } catch (final ScriptException | IOException t) { log.warn("Exception during script eval for file: {}", path, t); return null; From bbdf236a10c31db8360d60ae0efcbcfb2919acfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90=E1=BA=A1t=20Nh=C3=A2n=20Tr=C6=B0=C6=A1ng?= Date: Sat, 6 Aug 2022 18:16:52 +0700 Subject: [PATCH 2/3] Clean code --- src/main/java/scripting/AbstractScriptManager.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/scripting/AbstractScriptManager.java b/src/main/java/scripting/AbstractScriptManager.java index 796be2c27e..3e3ed86ba2 100644 --- a/src/main/java/scripting/AbstractScriptManager.java +++ b/src/main/java/scripting/AbstractScriptManager.java @@ -47,8 +47,7 @@ public abstract class AbstractScriptManager { } protected ScriptEngine getInvocableScriptEngine(String path) { - path = "scripts/" + path; - Path scriptFile = Paths.get(path); + Path scriptFile = Paths.get("scripts").resolve(path); if (!Files.exists(scriptFile)) { return null; } From f983b4dccf1efd2b722236e80df9c08f70c91a95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90=E1=BA=A1t=20Nh=C3=A2n=20Tr=C6=B0=C6=A1ng?= Date: Sun, 7 Aug 2022 01:35:02 +0700 Subject: [PATCH 3/3] Clean up code & Upgrade syntax to new Java --- src/main/java/client/Ring.java | 4 ++-- .../client/command/commands/gm2/IdCommand.java | 16 +++++++++------- .../command/commands/gm2/WhereaMiCommand.java | 12 ++++-------- .../client/command/commands/gm3/PeCommand.java | 11 +++++------ src/main/java/config/YamlConfig.java | 5 +++-- .../channel/handlers/CashOperationHandler.java | 9 +++------ .../channel/handlers/CharInfoRequestHandler.java | 3 +-- .../net/server/channel/handlers/DoorHandler.java | 3 +-- .../channel/handlers/HiredMerchantRequest.java | 3 +-- .../server/channel/handlers/NPCTalkHandler.java | 3 +-- .../handlers/PlayerInteractionHandler.java | 6 ++---- src/main/java/net/server/guild/Guild.java | 7 +++---- .../java/net/server/guild/GuildCharacter.java | 7 +++---- .../java/server/ItemInformationProvider.java | 3 +-- src/main/java/server/maps/MapFactory.java | 3 +-- src/main/java/server/maps/MapleMap.java | 3 +-- src/main/java/tools/ArrayMap.java | 7 +++---- 17 files changed, 44 insertions(+), 61 deletions(-) diff --git a/src/main/java/client/Ring.java b/src/main/java/client/Ring.java index 2219f41db9..a753c6a40b 100644 --- a/src/main/java/client/Ring.java +++ b/src/main/java/client/Ring.java @@ -174,8 +174,8 @@ public class Ring implements Comparable { @Override public boolean equals(Object o) { - if (o instanceof Ring) { - return ((Ring) o).getRingId() == getRingId(); + if (o instanceof Ring ring) { + return ring.getRingId() == getRingId(); } return false; } diff --git a/src/main/java/client/command/commands/gm2/IdCommand.java b/src/main/java/client/command/commands/gm2/IdCommand.java index 6151675caa..7b56f6bd21 100644 --- a/src/main/java/client/command/commands/gm2/IdCommand.java +++ b/src/main/java/client/command/commands/gm2/IdCommand.java @@ -8,8 +8,9 @@ import server.ThreadManager; import tools.exceptions.IdTypeNotSupportedException; import java.io.BufferedReader; -import java.io.FileReader; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -75,12 +76,13 @@ public class IdCommand extends Command { throw new IdTypeNotSupportedException(); } itemMap.put(type, new HashMap<>()); - BufferedReader reader = new BufferedReader(new FileReader(handbookDirectory.get(type))); - String line; - while ((line = reader.readLine()) != null) { - String[] row = line.split(" - ", 2); - if (row.length == 2) { - itemMap.get(type).put(row[1].toLowerCase(), row[0]); + try (BufferedReader reader = Files.newBufferedReader(Paths.get(handbookDirectory.get(type)))) { + String line; + while ((line = reader.readLine()) != null) { + String[] row = line.split(" - ", 2); + if (row.length == 2) { + itemMap.get(type).put(row[1].toLowerCase(), row[0]); + } } } } diff --git a/src/main/java/client/command/commands/gm2/WhereaMiCommand.java b/src/main/java/client/command/commands/gm2/WhereaMiCommand.java index d1c69ea7ac..b4ddc29d9f 100644 --- a/src/main/java/client/command/commands/gm2/WhereaMiCommand.java +++ b/src/main/java/client/command/commands/gm2/WhereaMiCommand.java @@ -48,19 +48,15 @@ public class WhereaMiCommand extends Command { HashSet mobs = new HashSet<>(); for (MapObject mmo : player.getMap().getMapObjects()) { - if (mmo instanceof NPC) { - NPC npc = (NPC) mmo; + if (mmo instanceof NPC npc) { npcs.add(npc); - } else if (mmo instanceof Character) { - Character mc = (Character) mmo; + } else if (mmo instanceof Character mc) { chars.add(mc); - } else if (mmo instanceof Monster) { - Monster mob = (Monster) mmo; + } else if (mmo instanceof Monster mob) { if (mob.isAlive()) { mobs.add(mob); } - } else if (mmo instanceof PlayerNPC) { - PlayerNPC npc = (PlayerNPC) mmo; + } else if (mmo instanceof PlayerNPC npc) { playernpcs.add(npc); } } diff --git a/src/main/java/client/command/commands/gm3/PeCommand.java b/src/main/java/client/command/commands/gm3/PeCommand.java index da2af746c3..ed2a4efa4a 100644 --- a/src/main/java/client/command/commands/gm3/PeCommand.java +++ b/src/main/java/client/command/commands/gm3/PeCommand.java @@ -35,9 +35,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import tools.HexTool; -import java.io.FileReader; +import java.io.BufferedReader; import java.io.IOException; -import java.io.InputStreamReader; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.Properties; public class PeCommand extends Command { @@ -51,11 +52,9 @@ public class PeCommand extends Command { public void execute(Client c, String[] params) { Character player = c.getPlayer(); String packet = ""; - try { - InputStreamReader is = new FileReader("pe.txt"); + try (BufferedReader br = Files.newBufferedReader(Paths.get("pe.txt"))) { Properties packetProps = new Properties(); - packetProps.load(is); - is.close(); + packetProps.load(br); packet = packetProps.getProperty("pe"); } catch (IOException ex) { ex.printStackTrace(); diff --git a/src/main/java/config/YamlConfig.java b/src/main/java/config/YamlConfig.java index 68d383bc82..51401c3c3b 100644 --- a/src/main/java/config/YamlConfig.java +++ b/src/main/java/config/YamlConfig.java @@ -4,8 +4,9 @@ import com.esotericsoftware.yamlbeans.YamlReader; import constants.string.CharsetConstants; import java.io.FileNotFoundException; -import java.io.FileReader; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.List; @@ -18,7 +19,7 @@ public class YamlConfig { private static YamlConfig loadConfig() { try { - YamlReader reader = new YamlReader(new FileReader(CONFIG_FILE_NAME, CharsetConstants.CHARSET)); + YamlReader reader = new YamlReader(Files.newBufferedReader(Paths.get(CONFIG_FILE_NAME), CharsetConstants.CHARSET)); YamlConfig config = reader.read(YamlConfig.class); reader.close(); return config; diff --git a/src/main/java/net/server/channel/handlers/CashOperationHandler.java b/src/main/java/net/server/channel/handlers/CashOperationHandler.java index 0f2eeb4e08..7589c8af8f 100644 --- a/src/main/java/net/server/channel/handlers/CashOperationHandler.java +++ b/src/main/java/net/server/channel/handlers/CashOperationHandler.java @@ -269,8 +269,7 @@ public final class CashOperationHandler extends AbstractPacketHandler { cs.removeFromInventory(item); c.sendPacket(PacketCreator.takeFromCashInventory(item)); - if (item instanceof Equip) { - Equip equip = (Equip) item; + if (item instanceof Equip equip) { if (equip.getRingId() >= 0) { Ring ring = Ring.loadFromDb(equip.getRingId()); chr.addPlayerRing(ring); @@ -323,8 +322,7 @@ public final class CashOperationHandler extends AbstractPacketHandler { return; }*/ //Gotta let them faggots marry too, hence why this is commented out <3 - if (itemRing.toItem() instanceof Equip) { - Equip eqp = (Equip) itemRing.toItem(); + if (itemRing.toItem() instanceof Equip eqp) { Pair rings = Ring.createRing(itemRing.getItemId(), chr, partner); eqp.setRingId(rings.getLeft()); cs.addToInventory(eqp); @@ -387,8 +385,7 @@ public final class CashOperationHandler extends AbstractPacketHandler { c.sendPacket(PacketCreator.showCashShopMessage((byte) 0xBE)); } else { // Need to check to make sure its actually an equip and the right SN... - if (itemRing.toItem() instanceof Equip) { - Equip eqp = (Equip) itemRing.toItem(); + if (itemRing.toItem() instanceof Equip eqp) { Pair rings = Ring.createRing(itemRing.getItemId(), chr, partner); eqp.setRingId(rings.getLeft()); cs.addToInventory(eqp); diff --git a/src/main/java/net/server/channel/handlers/CharInfoRequestHandler.java b/src/main/java/net/server/channel/handlers/CharInfoRequestHandler.java index ddc6be1ce9..4667ef8b9d 100644 --- a/src/main/java/net/server/channel/handlers/CharInfoRequestHandler.java +++ b/src/main/java/net/server/channel/handlers/CharInfoRequestHandler.java @@ -36,8 +36,7 @@ public final class CharInfoRequestHandler extends AbstractPacketHandler { int cid = p.readInt(); MapObject target = c.getPlayer().getMap().getMapObject(cid); if (target != null) { - if (target instanceof Character) { - Character player = (Character) target; + if (target instanceof Character player) { if (c.getPlayer().getId() != player.getId()) { player.exportExcludedItems(c); diff --git a/src/main/java/net/server/channel/handlers/DoorHandler.java b/src/main/java/net/server/channel/handlers/DoorHandler.java index e312d26f2e..5166413c44 100644 --- a/src/main/java/net/server/channel/handlers/DoorHandler.java +++ b/src/main/java/net/server/channel/handlers/DoorHandler.java @@ -45,8 +45,7 @@ public final class DoorHandler extends AbstractPacketHandler { } for (MapObject obj : chr.getMap().getMapObjects()) { - if (obj instanceof DoorObject) { - DoorObject door = (DoorObject) obj; + if (obj instanceof DoorObject door) { if (door.getOwnerId() == ownerid) { door.warp(chr); return; diff --git a/src/main/java/net/server/channel/handlers/HiredMerchantRequest.java b/src/main/java/net/server/channel/handlers/HiredMerchantRequest.java index 04c5f4345f..8c77d1f9b9 100644 --- a/src/main/java/net/server/channel/handlers/HiredMerchantRequest.java +++ b/src/main/java/net/server/channel/handlers/HiredMerchantRequest.java @@ -47,8 +47,7 @@ public final class HiredMerchantRequest extends AbstractPacketHandler { try { for (MapObject mmo : chr.getMap().getMapObjectsInRange(chr.getPosition(), 23000, Arrays.asList(MapObjectType.HIRED_MERCHANT, MapObjectType.PLAYER))) { - if (mmo instanceof Character) { - Character mc = (Character) mmo; + if (mmo instanceof Character mc) { PlayerShop shop = mc.getPlayerShop(); if (shop != null && shop.isOwner(mc)) { diff --git a/src/main/java/net/server/channel/handlers/NPCTalkHandler.java b/src/main/java/net/server/channel/handlers/NPCTalkHandler.java index 0815174dbe..413b925642 100644 --- a/src/main/java/net/server/channel/handlers/NPCTalkHandler.java +++ b/src/main/java/net/server/channel/handlers/NPCTalkHandler.java @@ -87,8 +87,7 @@ public final class NPCTalkHandler extends AbstractPacketHandler { } } } - } else if (obj instanceof PlayerNPC) { - PlayerNPC pnpc = (PlayerNPC) obj; + } else if (obj instanceof PlayerNPC pnpc) { NPCScriptManager nsm = NPCScriptManager.getInstance(); if (pnpc.getScriptId() < NpcId.CUSTOM_DEV && !nsm.isNpcScriptAvailable(c, "" + pnpc.getScriptId())) { diff --git a/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java b/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java index edd39143b2..a671b51690 100644 --- a/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java +++ b/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java @@ -291,11 +291,10 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler { MapObject ob = chr.getMap().getMapObject(oid); if (ob instanceof PlayerShop shop) { shop.visitShop(chr); - } else if (ob instanceof MiniGame) { + } else if (ob instanceof MiniGame game) { p.skip(1); String pw = p.available() > 1 ? p.readString() : ""; - MiniGame game = (MiniGame) ob; if (game.checkPassword(pw)) { if (game.hasFreeSlot() && !game.isVisitor(chr)) { game.addVisitor(chr); @@ -849,8 +848,7 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler { private static boolean canPlaceStore(Character chr) { try { for (MapObject mmo : chr.getMap().getMapObjectsInRange(chr.getPosition(), 23000, Arrays.asList(MapObjectType.HIRED_MERCHANT, MapObjectType.PLAYER))) { - if (mmo instanceof Character) { - Character mc = (Character) mmo; + if (mmo instanceof Character mc) { if (mc.getId() == chr.getId()) { continue; } diff --git a/src/main/java/net/server/guild/Guild.java b/src/main/java/net/server/guild/Guild.java index 8a05cd97cc..ac86a95c73 100644 --- a/src/main/java/net/server/guild/Guild.java +++ b/src/main/java/net/server/guild/Guild.java @@ -604,11 +604,10 @@ public class Guild { @Override public boolean equals(Object other) { - if (!(other instanceof GuildCharacter)) { - return false; + if (other instanceof GuildCharacter o) { + return (o.getId() == id && o.getName().equals(name)); } - GuildCharacter o = (GuildCharacter) other; - return (o.getId() == id && o.getName().equals(name)); + return false; } @Override diff --git a/src/main/java/net/server/guild/GuildCharacter.java b/src/main/java/net/server/guild/GuildCharacter.java index dff14a3558..e502edd49c 100644 --- a/src/main/java/net/server/guild/GuildCharacter.java +++ b/src/main/java/net/server/guild/GuildCharacter.java @@ -150,11 +150,10 @@ public class GuildCharacter { @Override public boolean equals(Object other) { - if (!(other instanceof GuildCharacter)) { - return false; + if (other instanceof GuildCharacter o) { + return (o.getId() == id && o.getName().equals(name)); } - GuildCharacter o = (GuildCharacter) other; - return (o.getId() == id && o.getName().equals(name)); + return false; } @Override diff --git a/src/main/java/server/ItemInformationProvider.java b/src/main/java/server/ItemInformationProvider.java index 8154543dd8..c2a04457f5 100644 --- a/src/main/java/server/ItemInformationProvider.java +++ b/src/main/java/server/ItemInformationProvider.java @@ -1033,8 +1033,7 @@ public class ItemInformationProvider { public Item scrollEquipWithId(Item equip, int scrollId, boolean usingWhiteScroll, int vegaItemId, boolean isGM) { boolean assertGM = (isGM && YamlConfig.config.server.USE_PERFECT_GM_SCROLL); - if (equip instanceof Equip) { - Equip nEquip = (Equip) equip; + if (equip instanceof Equip nEquip) { Map stats = this.getEquipStats(scrollId); if (((nEquip.getUpgradeSlots() > 0 || ItemConstants.isCleanSlate(scrollId))) || assertGM) { diff --git a/src/main/java/server/maps/MapFactory.java b/src/main/java/server/maps/MapFactory.java index f9f7c09506..1c7a85cd0c 100644 --- a/src/main/java/server/maps/MapFactory.java +++ b/src/main/java/server/maps/MapFactory.java @@ -112,8 +112,7 @@ public class MapFactory { private static void loadLifeRaw(MapleMap map, int id, String type, int cy, int f, int fh, int rx0, int rx1, int x, int y, int hide, int mobTime, int team) { AbstractLoadedLife myLife = loadLife(id, type, cy, f, fh, rx0, rx1, x, y, hide); - if (myLife instanceof Monster) { - Monster monster = (Monster) myLife; + if (myLife instanceof Monster monster) { if (mobTime == -1) { //does not respawn, force spawn once map.spawnMonster(monster); diff --git a/src/main/java/server/maps/MapleMap.java b/src/main/java/server/maps/MapleMap.java index 50b46fa9c0..0b7064fd47 100644 --- a/src/main/java/server/maps/MapleMap.java +++ b/src/main/java/server/maps/MapleMap.java @@ -1650,8 +1650,7 @@ public class MapleMap { objectRLock.lock(); try { for (Object ob : list) { - if (ob instanceof MapObject) { - MapObject mmo = (MapObject) ob; + if (ob instanceof MapObject mmo) { if (mapobjects.containsValue(mmo) && mmo.getType() == MapObjectType.REACTOR) { listObjects.add(mmo); diff --git a/src/main/java/tools/ArrayMap.java b/src/main/java/tools/ArrayMap.java index a2f20468c1..a224b3059d 100644 --- a/src/main/java/tools/ArrayMap.java +++ b/src/main/java/tools/ArrayMap.java @@ -53,11 +53,10 @@ public class ArrayMap extends AbstractMap { @Override public boolean equals(Object o) { - if (!(o instanceof Map.Entry)) { - return false; + if (o instanceof Map.Entry e) { + return (key == null ? e.getKey() == null : key.equals(e.getKey())) && (value == null ? e.getValue() == null : value.equals(e.getValue())); } - Map.Entry e = (Map.Entry) o; - return (key == null ? e.getKey() == null : key.equals(e.getKey())) && (value == null ? e.getValue() == null : value.equals(e.getValue())); + return false; } @Override