From 68fae4125125606ccd039f138125f0a105d6b4be Mon Sep 17 00:00:00 2001 From: kolakcc Date: Wed, 17 Jul 2019 01:25:18 +0200 Subject: [PATCH] Fix Java 8 support (#489) --- configuration.ini | 1 - src/constants/ServerConstants.java | 28 +++++++++++++++---- src/scripting/AbstractPlayerInteraction.java | 18 ++++++------ src/scripting/event/EventManager.java | 18 ++++++------ src/scripting/npc/NPCConversationManager.java | 4 +-- .../reactor/ReactorActionManager.java | 2 +- 6 files changed, 43 insertions(+), 28 deletions(-) diff --git a/configuration.ini b/configuration.ini index 01a874e45d..9a80eeb0b9 100644 --- a/configuration.ini +++ b/configuration.ini @@ -2,5 +2,4 @@ HOST=127.0.0.1 URL=jdbc:mysql://localhost:3306/heavenms DB_USER=root DB_PASS= -JAVA8=FALSE SHUTDOWNHOOK=true \ No newline at end of file diff --git a/src/constants/ServerConstants.java b/src/constants/ServerConstants.java index 4959f1e1d2..46339c645b 100644 --- a/src/constants/ServerConstants.java +++ b/src/constants/ServerConstants.java @@ -51,10 +51,8 @@ public class ServerConstants { public static boolean LOCALSERVER; //Other Configuration - public static boolean JAVA_8; + public static final boolean JAVA_8 = getJavaVersion() >= 8; public static boolean SHUTDOWNHOOK; - // JAVA_8: every static function in AbstractPlayerInteraction are to be made non-static, and code comment sections uncommented after enabling this functionality. - //Server Flags public static final boolean USE_CUSTOM_KEYSET = true; //Enables auto-setup of the HeavenMS's custom keybindings when creating characters. @@ -320,8 +318,7 @@ public class ServerConstants { ServerConstants.DB_USER = p.getProperty("DB_USER"); ServerConstants.DB_PASS = p.getProperty("DB_PASS"); - //java8 And Shutdownhook - ServerConstants.JAVA_8 = p.getProperty("JAVA8").equalsIgnoreCase("TRUE"); + // shutdownhook ServerConstants.SHUTDOWNHOOK = p.getProperty("SHUTDOWNHOOK").equalsIgnoreCase("true"); } catch (Exception e) { @@ -330,4 +327,25 @@ public class ServerConstants { System.exit(0); } } + // https://github.com/openstreetmap/josm/blob/a3a6e8a6b657cf4c5b4c64ea14d6e87be6280d65/src/org/openstreetmap/josm/tools/Utils.java#L1566-L1585 + /** + * Returns the Java version as an int value. + * @return the Java version as an int value (8, 9, etc.) + * @since 12130 + */ + public static int getJavaVersion() { + String version = System.getProperty("java.version"); + if (version.startsWith("1.")) { + version = version.substring(2); + } + // Allow these formats: + // 1.8.0_72-ea + // 9-ea + // 9 + // 9.0.1 + int dotPos = version.indexOf('.'); + int dashPos = version.indexOf('-'); + return Integer.parseInt(version.substring(0, + dotPos > -1 ? dotPos : dashPos > -1 ? dashPos : 1)); + } } diff --git a/src/scripting/AbstractPlayerInteraction.java b/src/scripting/AbstractPlayerInteraction.java index 29facd7c56..63177dc9e1 100644 --- a/src/scripting/AbstractPlayerInteraction.java +++ b/src/scripting/AbstractPlayerInteraction.java @@ -96,7 +96,7 @@ public class AbstractPlayerInteraction { return c.getPlayer().getMap(); } - public static int getHourOfDay() { + public int getHourOfDay() { return Calendar.getInstance().get(Calendar.HOUR_OF_DAY); } @@ -104,7 +104,7 @@ public class AbstractPlayerInteraction { return getMarketPortalId(getWarpMap(mapId)); } - private static int getMarketPortalId(MapleMap map) { + private int getMarketPortalId(MapleMap map) { return (map.findMarketPortal() != null) ? map.findMarketPortal().getId() : map.getRandomPlayerSpawnpoint().getId(); } @@ -236,7 +236,7 @@ public class AbstractPlayerInteraction { return canHoldAllAfterRemoving(Collections.singletonList(itemid), Collections.singletonList(quantity), Collections.singletonList(removeItemid), Collections.singletonList(removeQuantity)); } - private static List convertToIntegerArray(List list) { + private List convertToIntegerArray(List list) { List intList = new LinkedList<>(); for(Double d: list) { intList.add(d.intValue()); @@ -270,7 +270,7 @@ public class AbstractPlayerInteraction { return MapleInventory.checkSpots(c.getPlayer(), addedItems, false); } - private static List> prepareProofInventoryItems(List> items) { + private List> prepareProofInventoryItems(List> items) { List> addedItems = new LinkedList<>(); for(Pair p : items) { Item it = new Item(p.getLeft(), (short) 0, p.getRight().shortValue()); @@ -280,7 +280,7 @@ public class AbstractPlayerInteraction { return addedItems; } - private static List>> prepareInventoryItemList(List itemids, List quantity) { + private List>> prepareInventoryItemList(List itemids, List quantity) { int size = Math.min(itemids.size(), quantity.size()); List>> invList = new ArrayList<>(6); @@ -948,7 +948,7 @@ public class AbstractPlayerInteraction { c.announce(MaplePacketCreator.modifyInventory(false, Collections.singletonList(new ModifyInventory(0, newItem)))); } - public static void spawnNpc(int npcId, Point pos, MapleMap map) { + public void spawnNpc(int npcId, Point pos, MapleMap map) { MapleNPC npc = MapleLifeFactory.getNPC(npcId); if (npc != null) { npc.setPosition(pos); @@ -967,11 +967,11 @@ public class AbstractPlayerInteraction { getPlayer().getMap().spawnMonster(monster); } - public static MapleMonster getMonsterLifeFactory(int mid) { + public MapleMonster getMonsterLifeFactory(int mid) { return MapleLifeFactory.getMonster(mid); } - public static MobSkill getMobSkill(int skill, int level) { + public MobSkill getMobSkill(int skill, int level) { return MobSkillFactory.getMobSkill(skill, level); } @@ -1165,7 +1165,7 @@ public class AbstractPlayerInteraction { } } - public static String getFirstJobStatRequirement(int jobType) { + public String getFirstJobStatRequirement(int jobType) { switch(jobType) { case 1: return "STR " + 35; diff --git a/src/scripting/event/EventManager.java b/src/scripting/event/EventManager.java index ba91944e1f..42f5911630 100644 --- a/src/scripting/event/EventManager.java +++ b/src/scripting/event/EventManager.java @@ -21,6 +21,8 @@ */ package scripting.event; +import jdk.nashorn.api.scripting.ScriptObjectMirror; +import jdk.nashorn.api.scripting.ScriptUtils; import tools.exceptions.EventInstanceInProgressException; import java.util.Collection; import java.util.HashMap; @@ -165,14 +167,14 @@ public class EventManager { startLock = startLock.dispose(); } - private static List convertToIntegerArray(List list) { + private List convertToIntegerArray(List list) { List intList = new ArrayList<>(); for(Double d: list) intList.add(d.intValue()); return intList; } - public static long getLobbyDelay() { + public long getLobbyDelay() { return ServerConstants.EVENT_LOBBY_DELAY; } @@ -181,7 +183,6 @@ public class EventManager { if (!ServerConstants.JAVA_8) { return convertToIntegerArray((List)iv.invokeFunction("setLobbyRange", (Object) null)); } else { // java 8 support here thanks to MedicOP - /* ScriptObjectMirror object = (ScriptObjectMirror) iv.invokeFunction("setLobbyRange", (Object) null); int[] to = object.to(int[].class); List list = new ArrayList<>(); @@ -189,9 +190,7 @@ public class EventManager { list.add(i); } return list; - */ - - throw new NoSuchMethodException(); + } } catch (ScriptException | NoSuchMethodException ex) { // they didn't define a lobby range List defaultRange = new ArrayList<>(); @@ -750,13 +749,12 @@ public class EventManager { if(p != null) { List lmpc; - /*if(ServerConstants.JAVA_8) { + if(ServerConstants.JAVA_8) { lmpc = new ArrayList<>(((Map)(ScriptUtils.convert(p, Map.class))).values()); } else { lmpc = new ArrayList<>((List) p); - }*/ - - lmpc = new ArrayList<>((List) p); + } + party.setEligibleMembers(lmpc); return lmpc; } diff --git a/src/scripting/npc/NPCConversationManager.java b/src/scripting/npc/NPCConversationManager.java index d4cd0e8f3c..f1a38d836e 100644 --- a/src/scripting/npc/NPCConversationManager.java +++ b/src/scripting/npc/NPCConversationManager.java @@ -97,9 +97,9 @@ public class NPCConversationManager extends AbstractPlayerInteraction { private boolean itemScript; private List otherParty; - private static Map npcDefaultTalks = new HashMap<>(); + private Map npcDefaultTalks = new HashMap<>(); - private static String getDefaultTalk(int npcid) { + private String getDefaultTalk(int npcid) { String talk = npcDefaultTalks.get(npcid); if (talk == null) { talk = MapleLifeFactory.getNPCDefaultTalk(npcid); diff --git a/src/scripting/reactor/ReactorActionManager.java b/src/scripting/reactor/ReactorActionManager.java index 44237c5630..ffbd022278 100644 --- a/src/scripting/reactor/ReactorActionManager.java +++ b/src/scripting/reactor/ReactorActionManager.java @@ -186,7 +186,7 @@ public class ReactorActionManager extends AbstractPlayerInteraction { return ReactorScriptManager.getInstance().getDrops(reactor.getId()); } - private static List generateDropList(List drops, int dropRate, boolean meso, int mesoChance, int minItems) { + private List generateDropList(List drops, int dropRate, boolean meso, int mesoChance, int minItems) { MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); List items = new ArrayList<>();