1
0
mirror of https://github.com/Rogiel/l2jserver2 synced 2025-12-08 08:23:11 +00:00

Several changes

Signed-off-by: Rogiel <rogiel@rogiel.com>
This commit is contained in:
2011-05-18 02:18:37 -03:00
parent cd41122035
commit 4c27add4ef
162 changed files with 492 additions and 579 deletions

View File

@@ -64,11 +64,11 @@ public class CharacterSelectPacket extends AbstractClientPacket {
public void process(final Lineage2Connection conn) {
final List<L2Character> chars = characterDao.selectByAccount(conn
.getSession().getAccountID());
// FIXME better handling! this will throw an exception sooner or later
final L2Character character = chars.get(slot);
conn.setCharacterID(character.getID());
conn.write(new CharacterSelectedPacket(chars.get(slot)));
}
}

View File

@@ -140,14 +140,14 @@ public class UserInformationPacket extends AbstractServerPacket {
writePaperdollItemID(buffer, character, LEFT_FINGER);
writePaperdollItemID(buffer, character, HEAD);
buffer.writeInt(246);
//writePaperdollItemID(buffer, character, RIGHT_HAND);
// writePaperdollItemID(buffer, character, RIGHT_HAND);
writePaperdollItemID(buffer, character, LEFT_HAND);
writePaperdollItemID(buffer, character, GLOVES);
writePaperdollItemID(buffer, character, CHEST);
writePaperdollItemID(buffer, character, LEGS);
writePaperdollItemID(buffer, character, FEET);
writePaperdollItemID(buffer, character, CLOAK);
///writePaperdollItemID(buffer, character, RIGHT_HAND);
// /writePaperdollItemID(buffer, character, RIGHT_HAND);
buffer.writeInt(246);
writePaperdollItemID(buffer, character, HAIR1);
writePaperdollItemID(buffer, character, HAIR2);

View File

@@ -35,11 +35,11 @@ public class AbstractModel<T extends ID<?>> implements Model<T> {
@Override
public void setID(T ID) {
if(this.id != null)
if (this.id != null)
throw new IllegalStateException("ID is already set");
this.id = ID;
}
@Override
public int hashCode() {
final int prime = 31;

View File

@@ -36,7 +36,7 @@ public class Shortcut {
* {@link ShortcutType#SKILL})
*/
private SkillTemplateID skillID;
/**
* The shortcut item id (only if <tt>type</tt> is {@link ShortcutType#ITEM})
*/
@@ -116,8 +116,7 @@ public class Shortcut {
* @param characterType
* the character type
*/
public Shortcut(CharacterID characterID, ItemID itemID,
int characterType) {
public Shortcut(CharacterID characterID, ItemID itemID, int characterType) {
this.type = ShortcutType.ITEM;
this.characterID = characterID;
this.itemID = itemID;
@@ -159,8 +158,8 @@ public class Shortcut {
* @param characterType
* the character type
*/
public Shortcut(CharacterID characterID, ShortcutType type,
int slot, int page, int characterType) {
public Shortcut(CharacterID characterID, ShortcutType type, int slot,
int page, int characterType) {
this.characterID = characterID;
this.slot = slot;
this.page = page;

View File

@@ -23,8 +23,7 @@ import com.l2jserver.model.template.ActorTemplate;
import com.l2jserver.service.game.template.TemplateService;
/**
* An {@link TemplateID} instance representing an {@link ActorTemplate}
* object
* An {@link TemplateID} instance representing an {@link ActorTemplate} object
*
* @author <a href="http://www.rogiel.com">Rogiel</a>
*/
@@ -35,8 +34,7 @@ public class ActorTemplateID<T extends ActorTemplate<?>> extends TemplateID<T> {
private final TemplateService templateService;
@Inject
protected ActorTemplateID(@Assisted int id,
TemplateService templateService) {
protected ActorTemplateID(@Assisted int id, TemplateService templateService) {
super(id);
this.templateService = templateService;
}

View File

@@ -23,15 +23,13 @@ import com.l2jserver.model.template.NPCTemplate;
import com.l2jserver.service.game.template.TemplateService;
/**
* An {@link TemplateID} instance representing an {@link NPCTemplate}
* object
* An {@link TemplateID} instance representing an {@link NPCTemplate} object
*
* @author <a href="http://www.rogiel.com">Rogiel</a>
*/
public class NPCTemplateID extends ActorTemplateID<NPCTemplate> {
@Inject
protected NPCTemplateID(@Assisted int id,
TemplateService templateService) {
protected NPCTemplateID(@Assisted int id, TemplateService templateService) {
super(id, templateService);
}
}

View File

@@ -26,9 +26,16 @@ import com.l2jserver.model.world.Item;
* @author <a href="http://www.rogiel.com">Rogiel</a>
*/
public abstract class RecipeTemplate extends ItemTemplate {
private ItemTemplateID item;
protected ItemTemplateID item;
public RecipeTemplate(ItemTemplateID id) {
super(id);
}
/**
* @return the item
*/
public ItemTemplateID getItem() {
return item;
}
}

View File

@@ -16,24 +16,15 @@
*/
package com.l2jserver.model.world.actor.event;
import com.l2jserver.service.game.world.event.WorldEvent;
import com.l2jserver.service.game.world.event.WorldListener;
import com.l2jserver.service.game.world.event.FilteredWorldListener;
/**
* This listener will filter to only dispatch {@link ActorEvent} events.
*
* @author <a href="http://www.rogiel.com">Rogiel</a>
*/
public abstract class ActorListener implements WorldListener {
@Override
public boolean dispatch(WorldEvent e) {
if (!(e instanceof ActorEvent))
return false;
return dispatch((ActorEvent) e);
public abstract class ActorListener extends FilteredWorldListener<ActorEvent> {
public ActorListener() {
super(ActorEvent.class);
}
/**
* @see WorldListener#dispatch(WorldEvent)
*/
protected abstract boolean dispatch(ActorEvent e);
}

View File

@@ -34,8 +34,8 @@ public enum CharacterClass {
0x09, ROGUE),
// 3rd classes
DUELIST(0x58, GLADIATOR), DREADNOUGHT(0x59, WARLORD), PHOENIX_KNIGHT(0x5a,
PALADIN), HELL_KNIGHT(0x5b, DARK_AVENGER), SAGITTARIUS(0x5c, HAWKEYE), ADVENTURER(
0x5d, TREASURE_HUNTER),
PALADIN), HELL_KNIGHT(0x5b, DARK_AVENGER), SAGITTARIUS(0x5c,
HAWKEYE), ADVENTURER(0x5d, TREASURE_HUNTER),
/**
* Human mystic

View File

@@ -16,24 +16,16 @@
*/
package com.l2jserver.model.world.character.event;
import com.l2jserver.service.game.world.event.WorldEvent;
import com.l2jserver.service.game.world.event.WorldListener;
import com.l2jserver.service.game.world.event.FilteredWorldListener;
/**
* This listener will filter to only dispatch {@link CharacterEvent} events.
*
* @author <a href="http://www.rogiel.com">Rogiel</a>
*/
public abstract class CharacterListener implements WorldListener {
@Override
public boolean dispatch(WorldEvent e) {
if (!(e instanceof CharacterEvent))
return false;
return dispatch((CharacterEvent) e);
public abstract class CharacterListener extends
FilteredWorldListener<CharacterEvent> {
public CharacterListener() {
super(CharacterEvent.class);
}
/**
* @see WorldListener#dispatch(WorldEvent)
*/
protected abstract boolean dispatch(CharacterEvent e);
}
}

View File

@@ -16,24 +16,15 @@
*/
package com.l2jserver.model.world.clan;
import com.l2jserver.service.game.world.event.WorldEvent;
import com.l2jserver.service.game.world.event.WorldListener;
import com.l2jserver.service.game.world.event.FilteredWorldListener;
/**
* This listener will filter to only dispatch {@link ClanEvent} events.
*
* @author <a href="http://www.rogiel.com">Rogiel</a>
*/
public abstract class ClanListener implements WorldListener {
@Override
public boolean dispatch(WorldEvent e) {
if (!(e instanceof ClanEvent))
return false;
return dispatch((ClanEvent) e);
public abstract class ClanListener extends FilteredWorldListener<ClanEvent> {
public ClanListener() {
super(ClanEvent.class);
}
/**
* @see WorldListener#dispatch(WorldEvent)
*/
protected abstract boolean dispatch(ClanEvent e);
}

View File

@@ -29,5 +29,8 @@ public interface SpawnEvent extends WorldEvent {
@Override
Spawnable getObject();
/**
* @return the spawning coordinate
*/
Coordinate getCoordinate();
}

View File

@@ -16,24 +16,15 @@
*/
package com.l2jserver.model.world.item;
import com.l2jserver.service.game.world.event.WorldEvent;
import com.l2jserver.service.game.world.event.WorldListener;
import com.l2jserver.service.game.world.event.FilteredWorldListener;
/**
* This listener will filter to only dispatch {@link ItemEvent} events.
*
* @author <a href="http://www.rogiel.com">Rogiel</a>
*/
public abstract class ItemListener implements WorldListener {
@Override
public boolean dispatch(WorldEvent e) {
if (!(e instanceof ItemEvent))
return false;
return dispatch((ItemEvent) e);
public abstract class ItemListener extends FilteredWorldListener<ItemEvent> {
public ItemListener() {
super(ItemEvent.class);
}
/**
* @see WorldListener#dispatch(WorldEvent)
*/
protected abstract boolean dispatch(ItemEvent e);
}

View File

@@ -16,24 +16,15 @@
*/
package com.l2jserver.model.world.player.event;
import com.l2jserver.service.game.world.event.WorldEvent;
import com.l2jserver.service.game.world.event.WorldListener;
import com.l2jserver.service.game.world.event.FilteredWorldListener;
/**
* Listener for {@link PlayerEvent}
* This listener will filter to only dispatch {@link PlayerEvent} events.
*
* @author <a href="http://www.rogiel.com">Rogiel</a>
*/
public abstract class PlayerListener implements WorldListener {
@Override
public boolean dispatch(WorldEvent e) {
if (!(e instanceof PlayerEvent))
return false;
return dispatch((PlayerEvent) e);
public abstract class PlayerListener extends FilteredWorldListener<PlayerEvent> {
public PlayerListener() {
super(PlayerEvent.class);
}
/**
* @see WorldListener#dispatch(WorldEvent)
*/
protected abstract boolean dispatch(PlayerEvent e);
}
}

View File

@@ -24,5 +24,5 @@ import com.l2jserver.service.Service;
* @author <a href="http://www.rogiel.com">Rogiel</a>
*/
public interface GMService extends Service {
}

View File

@@ -20,7 +20,6 @@ import org.apache.commons.math.random.RandomData;
import org.apache.commons.math.random.RandomDataImpl;
import com.l2jserver.service.AbstractService;
import com.l2jserver.service.Service;
import com.l2jserver.service.ServiceStartException;
import com.l2jserver.service.ServiceStopException;

View File

@@ -83,14 +83,11 @@ public class EhCacheService extends AbstractService implements CacheService {
@Override
public Cache createCache(String name, int size) {
Cache cache = new Cache(
new CacheConfiguration(name, size)
.memoryStoreEvictionPolicy(
MemoryStoreEvictionPolicy.LRU)
.overflowToDisk(true).eternal(false)
.timeToLiveSeconds(60).timeToIdleSeconds(30)
.diskPersistent(false)
.diskExpiryThreadIntervalSeconds(0));
Cache cache = new Cache(new CacheConfiguration(name, size)
.memoryStoreEvictionPolicy(MemoryStoreEvictionPolicy.LRU)
.overflowToDisk(true).eternal(false).timeToLiveSeconds(60)
.timeToIdleSeconds(30).diskPersistent(false)
.diskExpiryThreadIntervalSeconds(0));
register(cache);
return cache;
}

View File

@@ -42,12 +42,12 @@ public class DB4ODatabaseService extends AbstractService implements
@Override
public void updateCache(Object key, Object value) {
// TODO Auto-generated method stub
}
@Override
public void removeCache(Object key) {
// TODO Auto-generated method stub
}
}

View File

@@ -27,7 +27,7 @@ public class GameTimeServiceImpl extends AbstractService implements
GameTimeService {
@Override
public int getGameTime() {
//TODO implement this!
// TODO implement this!
return (int) (System.currentTimeMillis() / 1000);
}
}

View File

@@ -18,7 +18,7 @@ package com.l2jserver.service.game.region;
/**
* @author <a href="http://www.rogiel.com">Rogiel</a>
*
*
*/
public interface Region {

View File

@@ -13,7 +13,7 @@
*
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
*/
package com.l2jserver.service.game.scripting;
import java.io.File;

View File

@@ -14,76 +14,76 @@
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.service.game.scripting;
import java.io.File;
/**
* This interface reperesents common functionality list that should be available
* for any commpiler that is going to be used with scripting engine. For
* instance, groovy can be used, hoever it produces by far not the best bytecode
* so by default javac from sun is used.
*
* @author <a href="http://www.rogiel.com">Rogiel</a>
*/
public interface ScriptCompiler {
/**
* Sets parent class loader for this compiler.<br>
* <br>
* <font color="red">Warning, for now only</font>
*
* @param classLoader
* ScriptClassLoader that will be used as parent
*/
void setParentClassLoader(ScriptClassLoader classLoader);
/**
* List of jar files that are required for compilation
*
* @param files
* list of jar files
*/
void setLibraires(Iterable<File> files);
/**
* Compiles single class that is represented as string
*
* @param className
* class name
* @param sourceCode
* class sourse code
* @return {@link CompilationResult}
*/
CompilationResult compile(String className, String sourceCode);
/**
* Compiles classes that are represented as strings
*
* @param className
* class names
* @param sourceCode
* class sources
* @return {@link CompilationResult}
* @throws IllegalArgumentException
* if number of class names != number of sources
*/
CompilationResult compile(String[] className, String[] sourceCode)
throws IllegalArgumentException;
/**
* Compiles list of files
*
* @param compilationUnits
* list of files
* @return {@link CompilationResult}
*/
CompilationResult compile(Iterable<File> compilationUnits);
/**
* Returns array of supported file types. This files will be threated as
* source files.
*
* @return array of supported file types.
*/
String[] getSupportedFileTypes();
}
package com.l2jserver.service.game.scripting;
import java.io.File;
/**
* This interface reperesents common functionality list that should be available
* for any commpiler that is going to be used with scripting engine. For
* instance, groovy can be used, hoever it produces by far not the best bytecode
* so by default javac from sun is used.
*
* @author <a href="http://www.rogiel.com">Rogiel</a>
*/
public interface ScriptCompiler {
/**
* Sets parent class loader for this compiler.<br>
* <br>
* <font color="red">Warning, for now only</font>
*
* @param classLoader
* ScriptClassLoader that will be used as parent
*/
void setParentClassLoader(ScriptClassLoader classLoader);
/**
* List of jar files that are required for compilation
*
* @param files
* list of jar files
*/
void setLibraires(Iterable<File> files);
/**
* Compiles single class that is represented as string
*
* @param className
* class name
* @param sourceCode
* class sourse code
* @return {@link CompilationResult}
*/
CompilationResult compile(String className, String sourceCode);
/**
* Compiles classes that are represented as strings
*
* @param className
* class names
* @param sourceCode
* class sources
* @return {@link CompilationResult}
* @throws IllegalArgumentException
* if number of class names != number of sources
*/
CompilationResult compile(String[] className, String[] sourceCode)
throws IllegalArgumentException;
/**
* Compiles list of files
*
* @param compilationUnits
* list of files
* @return {@link CompilationResult}
*/
CompilationResult compile(Iterable<File> compilationUnits);
/**
* Returns array of supported file types. This files will be threated as
* source files.
*
* @return array of supported file types.
*/
String[] getSupportedFileTypes();
}

View File

@@ -13,7 +13,7 @@
*
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
*/
package com.l2jserver.service.game.scripting;
import java.io.File;

View File

@@ -14,32 +14,32 @@
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.service.game.scripting.classlistener;
/**
* This interface implements listener that is called post class load/before
* class unload.<br>
* Default implementation is: {@link DefaultClassListener}
*
* @author <a href="http://www.rogiel.com">Rogiel</a>
*/
public interface ClassListener {
/**
* This method is invoked after classes were loaded. As areguments are
* passes all loaded classes
*
* @param classes
* classes that were loaded
*/
public void postLoad(Class<?>... classes);
/**
* This method is invoked before class unloading. As argument are passes all
* loaded classes
*
* @param classes
* classes that were loaded
*/
public void preUnload(Class<?>... classes);
}
package com.l2jserver.service.game.scripting.classlistener;
/**
* This interface implements listener that is called post class load/before
* class unload.<br>
* Default implementation is: {@link DefaultClassListener}
*
* @author <a href="http://www.rogiel.com">Rogiel</a>
*/
public interface ClassListener {
/**
* This method is invoked after classes were loaded. As areguments are
* passes all loaded classes
*
* @param classes
* classes that were loaded
*/
public void postLoad(Class<?>... classes);
/**
* This method is invoked before class unloading. As argument are passes all
* loaded classes
*
* @param classes
* classes that were loaded
*/
public void preUnload(Class<?>... classes);
}

View File

@@ -13,7 +13,7 @@
*
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
*/
package com.l2jserver.service.game.scripting.classlistener;
import java.lang.reflect.Modifier;

View File

@@ -13,7 +13,7 @@
*
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
*/
package com.l2jserver.service.game.scripting.impl;
import java.io.File;

View File

@@ -13,7 +13,7 @@
*
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
*/
package com.l2jserver.service.game.scripting.impl.javacc;
import java.io.ByteArrayInputStream;

View File

@@ -13,7 +13,7 @@
*
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
*/
package com.l2jserver.service.game.scripting.impl.javacc;
import java.io.File;

View File

@@ -13,7 +13,7 @@
*
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
*/
package com.l2jserver.service.game.scripting.impl.javacc;
import java.util.Locale;

View File

@@ -13,7 +13,7 @@
*
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
*/
package com.l2jserver.service.game.scripting.impl.javacc;
import java.io.File;

View File

@@ -13,7 +13,7 @@
*
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
*/
package com.l2jserver.service.game.scripting.impl.javacc;
import java.net.URI;

View File

@@ -13,7 +13,7 @@
*
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
*/
package com.l2jserver.service.game.scripting.impl.javacc;
import java.io.File;

View File

@@ -13,7 +13,7 @@
*
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
*/
package com.l2jserver.service.game.scripting.impl.javacc;
import java.io.File;

View File

@@ -13,7 +13,7 @@
*
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
*/
package com.l2jserver.service.game.scripting.impl.javacc;
import java.io.ByteArrayInputStream;

View File

@@ -13,7 +13,7 @@
*
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
*/
package com.l2jserver.service.game.scripting.impl.javacc;
import java.io.IOException;

View File

@@ -13,7 +13,7 @@
*
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
*/
package com.l2jserver.service.game.scripting.scriptmanager;
import java.io.File;

View File

@@ -13,7 +13,7 @@
*
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
*/
package com.l2jserver.service.game.scripting.scriptmanager;
import java.util.Set;

View File

@@ -0,0 +1,43 @@
/*
* This file is part of l2jserver <l2jserver.com>.
*
* l2jserver is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* l2jserver is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.service.game.world.event;
/**
* This listener will filter to only dispatch an certain type events.
*
* @author <a href="http://www.rogiel.com">Rogiel</a>
*/
public abstract class FilteredWorldListener<T> implements WorldListener {
private final Class<T> type;
public FilteredWorldListener(Class<T> type) {
this.type = type;
}
@Override
@SuppressWarnings("unchecked")
public boolean dispatch(WorldEvent e) {
if (!type.isInstance(e))
return false;
return dispatch((T) e);
}
/**
* @see WorldListener#dispatch(WorldEvent)
*/
protected abstract boolean dispatch(T e);
}

View File

@@ -0,0 +1,27 @@
/*
* This file is part of l2jserver <l2jserver.com>.
*
* l2jserver is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* l2jserver is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.service.threading;
/**
* This service is responsible for scheduling tasks and executing them in
* parallel.
*
* @author <a href="http://www.rogiel.com">Rogiel</a>
*/
public interface ThreadService {
}

View File

@@ -13,7 +13,7 @@
*
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
*/
package com.l2jserver.util;
/**

View File

@@ -7,22 +7,22 @@
// supporting documentation. CERN makes no representations about the
// suitability of this software for any purpose. It is provided "as is"
// without expressed or implied warranty.
/*
* This file is part of l2jserver <l2jserver.com>.
*
* l2jserver is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* l2jserver is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* This file is part of l2jserver <l2jserver.com>.
*
* l2jserver is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* l2jserver is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.util;
import java.util.Arrays;