From: Hendrik B. <nh...@us...> - 2011-04-30 12:27:21
|
Update of /cvsroot/arianne/stendhal/src/games/stendhal/server/core/rp/equipping/builder In directory vz-cvs-4.sog:/tmp/cvs-serv23899/src/games/stendhal/server/core/rp/equipping/builder Modified Files: EquipmentActionBuilder.java Added Files: PartialBuilder.java BuildSourceFromPath.java BuildTargetFromOldActionFormat.java BuildSourceFromOldActionFormat.java BuildSourceFromGround.java BuildTargetFromPath.java BuildTargetFromGround.java Log Message: split EquipmentActionBuilder into 6 classes --- NEW FILE: BuildSourceFromPath.java --- /*************************************************************************** * (C) Copyright 2003-2011 - Stendhal * *************************************************************************** *************************************************************************** * * * This program 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 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ package games.stendhal.server.core.rp.equipping.builder; import games.stendhal.common.EquipActionConsts; import games.stendhal.common.MathHelper; import games.stendhal.server.actions.equip.EquipUtil; import games.stendhal.server.core.rp.equipping.EquipmentActionData; import games.stendhal.server.entity.Entity; import games.stendhal.server.entity.player.Player; import games.stendhal.server.entity.slot.EntitySlot; import games.stendhal.server.entity.slot.GroundSlot; import java.util.Iterator; import java.util.List; import marauroa.common.game.RPAction; import marauroa.common.game.RPObject; import marauroa.common.game.RPSlot; class BuildSourceFromPath implements PartialBuilder { public void build(EquipmentActionData data, Player player, RPAction action) { List<String> path = action.getList(EquipActionConsts.SOURCE_PATH); Iterator<String> it = path.iterator(); // get parent Entity parent = EquipUtil.getEntityFromId(player, MathHelper.parseInt(it.next())); if (parent == null) { data.setErrorMessage(""); return; } // Walk the slot path Entity entity = parent; String slotName = null; while (it.hasNext()) { slotName = it.next(); if (!entity.hasSlot(slotName)) { data.setErrorMessage(""); return; } final RPSlot slot = ((EntitySlot) entity.getSlot(slotName)).getWriteableSlot(); if (slot == null) { data.setErrorMessage(""); return; } if (!it.hasNext()) { data.setErrorMessage(""); return; } final RPObject.ID itemId = new RPObject.ID(MathHelper.parseInt(it.next()), ""); if (!slot.has(itemId)) { data.setErrorMessage(""); return; } entity = (Entity) slot.get(itemId); } // if the item is not contained, the item is on the ground if (parent == entity) { data.addSourceItem(entity); data.addSourceSlot(new GroundSlot(player.getZone(), entity)); } else { data.addSourceItem(entity); data.addSourceSlot((EntitySlot) entity.getContainerSlot()); } } } --- NEW FILE: BuildSourceFromGround.java --- /*************************************************************************** * (C) Copyright 2003-2011 - Stendhal * *************************************************************************** *************************************************************************** * * * This program 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 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ package games.stendhal.server.core.rp.equipping.builder; import static games.stendhal.common.constants.Actions.BASEITEM; import games.stendhal.server.core.engine.StendhalRPZone; import games.stendhal.server.core.rp.equipping.EquipmentActionData; import games.stendhal.server.entity.Entity; import games.stendhal.server.entity.PassiveEntity; import games.stendhal.server.entity.player.Player; import games.stendhal.server.entity.slot.GroundSlot; import games.stendhal.server.util.EntityHelper; import marauroa.common.game.RPAction; class BuildSourceFromGround implements PartialBuilder { public void build(EquipmentActionData data, Player player, RPAction action) { final StendhalRPZone zone = player.getZone(); final int objectid = action.getInt(BASEITEM); final Entity object = EntityHelper.entityFromZoneByID(objectid, zone); if (!(object instanceof PassiveEntity)) { return; } data.addSourceItem(object); data.addSourceSlot(new GroundSlot(zone, object)); } } Index: EquipmentActionBuilder.java =================================================================== RCS file: /cvsroot/arianne/stendhal/src/games/stendhal/server/core/rp/equipping/builder/EquipmentActionBuilder.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** EquipmentActionBuilder.java 30 Apr 2011 11:37:22 -0000 1.1 --- EquipmentActionBuilder.java 30 Apr 2011 12:27:19 -0000 1.2 *************** *** 1,31 **** ! /* $Id$ ! * $Log$ ! * Revision 1.1 2011/04/30 11:37:22 nhnb ! * created a class EquipmentActionBuilder which created EquipmentActionData from any equipment related action, supporting both old and new format ! * ! */ package games.stendhal.server.core.rp.equipping.builder; import static games.stendhal.common.constants.Actions.BASEITEM; import static games.stendhal.common.constants.Actions.X; - import static games.stendhal.common.constants.Actions.Y; import games.stendhal.common.EquipActionConsts; - import games.stendhal.common.MathHelper; - import games.stendhal.server.actions.equip.EquipUtil; - import games.stendhal.server.core.engine.StendhalRPZone; import games.stendhal.server.core.rp.equipping.EquipmentActionData; - import games.stendhal.server.entity.Entity; - import games.stendhal.server.entity.PassiveEntity; import games.stendhal.server.entity.player.Player; - import games.stendhal.server.entity.slot.EntitySlot; - import games.stendhal.server.entity.slot.GroundSlot; - import games.stendhal.server.util.EntityHelper; - - import java.util.Iterator; - import java.util.List; - import marauroa.common.game.RPAction; - import marauroa.common.game.RPObject; - import marauroa.common.game.RPSlot; /** --- 1,21 ---- ! /*************************************************************************** ! * (C) Copyright 2003-2011 - Stendhal * ! *************************************************************************** ! *************************************************************************** ! * * ! * This program 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 2 of the License, or * ! * (at your option) any later version. * ! * * ! ***************************************************************************/ package games.stendhal.server.core.rp.equipping.builder; import static games.stendhal.common.constants.Actions.BASEITEM; import static games.stendhal.common.constants.Actions.X; import games.stendhal.common.EquipActionConsts; import games.stendhal.server.core.rp.equipping.EquipmentActionData; import games.stendhal.server.entity.player.Player; import marauroa.common.game.RPAction; /** *************** *** 79,87 **** private void buildSource() { if (action.has(EquipActionConsts.SOURCE_PATH)) { ! buildSourceFromPath(); } else if (action.has(EquipActionConsts.BASE_OBJECT)) { ! buildSourceFromOldContainedFormat(); } else if (action.has(BASEITEM)) { ! buildSourceFromGround(); } else { data.setErrorMessage(""); --- 69,77 ---- private void buildSource() { if (action.has(EquipActionConsts.SOURCE_PATH)) { ! new BuildSourceFromPath().build(data, player, action); } else if (action.has(EquipActionConsts.BASE_OBJECT)) { ! new BuildSourceFromOldActionFormat().build(data, player, action); } else if (action.has(BASEITEM)) { ! new BuildSourceFromGround().build(data, player, action); } else { data.setErrorMessage(""); *************** *** 91,249 **** private void buildTarget() { if (action.has(EquipActionConsts.TARGET_PATH)) { ! buildTargetFromPath(); } else if (action.has(X)) { ! buildTargetFromGround(); } else if (action.has(EquipActionConsts.TARGET_OBJECT)) { ! buildTargetFromOldContainedFormat(); ! } else { ! data.setErrorMessage(""); ! } ! } ! ! private void buildSourceFromPath() { ! List<String> path = action.getList(EquipActionConsts.SOURCE_PATH); ! Iterator<String> it = path.iterator(); ! ! // get parent ! Entity parent = EquipUtil.getEntityFromId(player, MathHelper.parseInt(it.next())); ! if (parent == null) { ! data.setErrorMessage(""); ! return; ! } ! ! // Walk the slot path ! Entity entity = parent; ! String slotName = null; ! while (it.hasNext()) { ! slotName = it.next(); ! if (!entity.hasSlot(slotName)) { ! data.setErrorMessage(""); ! return; ! } ! ! final RPSlot slot = ((EntitySlot) entity.getSlot(slotName)).getWriteableSlot(); ! if (slot == null) { ! data.setErrorMessage(""); ! return; ! } ! if (!it.hasNext()) { ! data.setErrorMessage(""); ! return; ! } ! final RPObject.ID itemId = new RPObject.ID(MathHelper.parseInt(it.next()), ""); ! if (!slot.has(itemId)) { ! data.setErrorMessage(""); ! return; ! } ! ! entity = (Entity) slot.get(itemId); ! } ! ! // if the item is not contained, the item is on the ground ! if (parent == entity) { ! data.addSourceItem(entity); ! data.addSourceSlot(new GroundSlot(player.getZone(), entity)); } else { - data.addSourceItem(entity); - data.addSourceSlot((EntitySlot) entity.getContainerSlot()); - } - } - - private void buildSourceFromOldContainedFormat() { - final Entity parent = EquipUtil.getEntityFromId(player, action.getInt(EquipActionConsts.BASE_OBJECT)); - - if (parent == null) { - data.setErrorMessage(""); - return; - } - - final String slotName = action.get(EquipActionConsts.BASE_SLOT); - if (!parent.hasSlot(slotName)) { data.setErrorMessage(""); - return; - } - final RPSlot slot = ((EntitySlot) parent.getSlot(slotName)).getWriteableSlot(); - if (slot == null || !(slot instanceof EntitySlot)) { - data.setErrorMessage(""); - return; - } - - final RPObject.ID baseItemId = new RPObject.ID(action.getInt(EquipActionConsts.BASE_ITEM), ""); - if (!slot.has(baseItemId)) { - data.setErrorMessage(""); - return; } - final Entity entity = (Entity) slot.get(baseItemId); - data.addSourceItem(entity); - data.addSourceSlot((EntitySlot) slot); - } - - - private void buildSourceFromGround() { - final StendhalRPZone zone = player.getZone(); - final int objectid = action.getInt(BASEITEM); - final Entity object = EntityHelper.entityFromZoneByID(objectid, zone); - if (!(object instanceof PassiveEntity)) { - return; - } - data.addSourceItem(object); - data.addSourceSlot(new GroundSlot(zone, object)); - } - - private void buildTargetFromGround() { - final int x = action.getInt(X); - final int y = action.getInt(Y); - data.setTargetSlot(new GroundSlot(player.getZone(), x, y)); } - private void buildTargetFromPath() { - List<String> path = action.getList(EquipActionConsts.TARGET_PATH); - Iterator<String> it = path.iterator(); - - // get parent - Entity parent = EquipUtil.getEntityFromId(player, MathHelper.parseInt(it.next())); - if (parent == null) { - data.setErrorMessage(""); - return; - } - - // Walk the slot path - EntitySlot slot = null; - while (it.hasNext()) { - String slotName = it.next(); - if (!parent.hasSlot(slotName)) { - data.setErrorMessage(""); - return; - } - slot = parent.getEntitySlot(slotName); - if (!it.hasNext()) { - break; - } - - final RPObject.ID itemId = new RPObject.ID(MathHelper.parseInt(it.next()), ""); - if (!slot.has(itemId)) { - data.setErrorMessage(""); - return; - } - parent = (Entity) slot.get(itemId); - } - data.setTargetSlot(slot); - } - - private void buildTargetFromOldContainedFormat() { - // get parent - Entity parent = EquipUtil.getEntityFromId(player, action.getInt(EquipActionConsts.TARGET_OBJECT)); - if (parent == null) { - data.setErrorMessage(""); - return; - } - - // get slot - String slotName = action.get(EquipActionConsts.TARGET_SLOT); - if (!parent.hasSlot(slotName)) { - data.setErrorMessage(""); - return; - } - data.setTargetSlot(parent.getEntitySlot(slotName)); - } } --- 81,93 ---- private void buildTarget() { if (action.has(EquipActionConsts.TARGET_PATH)) { ! new BuildTargetFromPath().build(data, player, action); } else if (action.has(X)) { ! new BuildTargetFromGround().build(data, player, action); } else if (action.has(EquipActionConsts.TARGET_OBJECT)) { ! new BuildTargetFromOldActionFormat().build(data, player, action); } else { data.setErrorMessage(""); } } } --- NEW FILE: BuildTargetFromPath.java --- /*************************************************************************** * (C) Copyright 2003-2011 - Stendhal * *************************************************************************** *************************************************************************** * * * This program 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 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ package games.stendhal.server.core.rp.equipping.builder; import games.stendhal.common.EquipActionConsts; import games.stendhal.common.MathHelper; import games.stendhal.server.actions.equip.EquipUtil; import games.stendhal.server.core.rp.equipping.EquipmentActionData; import games.stendhal.server.entity.Entity; import games.stendhal.server.entity.player.Player; import games.stendhal.server.entity.slot.EntitySlot; import java.util.Iterator; import java.util.List; import marauroa.common.game.RPAction; import marauroa.common.game.RPObject; class BuildTargetFromPath implements PartialBuilder { public void build(EquipmentActionData data, Player player, RPAction action) { List<String> path = action.getList(EquipActionConsts.TARGET_PATH); Iterator<String> it = path.iterator(); // get parent Entity parent = EquipUtil.getEntityFromId(player, MathHelper.parseInt(it.next())); if (parent == null) { data.setErrorMessage(""); return; } // Walk the slot path EntitySlot slot = null; while (it.hasNext()) { String slotName = it.next(); if (!parent.hasSlot(slotName)) { data.setErrorMessage(""); return; } slot = parent.getEntitySlot(slotName); if (!it.hasNext()) { break; } final RPObject.ID itemId = new RPObject.ID(MathHelper.parseInt(it.next()), ""); if (!slot.has(itemId)) { data.setErrorMessage(""); return; } parent = (Entity) slot.get(itemId); } data.setTargetSlot(slot); } } --- NEW FILE: BuildTargetFromOldActionFormat.java --- /*************************************************************************** * (C) Copyright 2003-2011 - Stendhal * *************************************************************************** *************************************************************************** * * * This program 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 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ package games.stendhal.server.core.rp.equipping.builder; import games.stendhal.common.EquipActionConsts; import games.stendhal.server.actions.equip.EquipUtil; import games.stendhal.server.core.rp.equipping.EquipmentActionData; import games.stendhal.server.entity.Entity; import games.stendhal.server.entity.player.Player; import marauroa.common.game.RPAction; class BuildTargetFromOldActionFormat implements PartialBuilder { public void build(EquipmentActionData data, Player player, RPAction action) { // get parent Entity parent = EquipUtil.getEntityFromId(player, action.getInt(EquipActionConsts.TARGET_OBJECT)); if (parent == null) { data.setErrorMessage(""); return; } // get slot String slotName = action.get(EquipActionConsts.TARGET_SLOT); if (!parent.hasSlot(slotName)) { data.setErrorMessage(""); return; } data.setTargetSlot(parent.getEntitySlot(slotName)); } } --- NEW FILE: PartialBuilder.java --- /*************************************************************************** * (C) Copyright 2003-2011 - Stendhal * *************************************************************************** *************************************************************************** * * * This program 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 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ package games.stendhal.server.core.rp.equipping.builder; import games.stendhal.server.core.rp.equipping.EquipmentActionData; import games.stendhal.server.entity.player.Player; import marauroa.common.game.RPAction; /** * builds parts of an EquipmentActionData * * @author hendrik */ interface PartialBuilder { /** * builds parts of an EquipmentActionData object * * @param data the EquipmentActionData to build * @param player player sending the action * @param action action to process */ public void build(EquipmentActionData data, Player player, RPAction action); } --- NEW FILE: BuildSourceFromOldActionFormat.java --- /*************************************************************************** * (C) Copyright 2003-2011 - Stendhal * *************************************************************************** *************************************************************************** * * * This program 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 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ package games.stendhal.server.core.rp.equipping.builder; import games.stendhal.common.EquipActionConsts; import games.stendhal.server.actions.equip.EquipUtil; import games.stendhal.server.core.rp.equipping.EquipmentActionData; import games.stendhal.server.entity.Entity; import games.stendhal.server.entity.player.Player; import games.stendhal.server.entity.slot.EntitySlot; import marauroa.common.game.RPAction; import marauroa.common.game.RPObject; import marauroa.common.game.RPSlot; class BuildSourceFromOldActionFormat implements PartialBuilder { public void build(EquipmentActionData data, Player player, RPAction action) { final Entity parent = EquipUtil.getEntityFromId(player, action.getInt(EquipActionConsts.BASE_OBJECT)); if (parent == null) { data.setErrorMessage(""); return; } final String slotName = action.get(EquipActionConsts.BASE_SLOT); if (!parent.hasSlot(slotName)) { data.setErrorMessage(""); return; } final RPSlot slot = ((EntitySlot) parent.getSlot(slotName)).getWriteableSlot(); if (slot == null || !(slot instanceof EntitySlot)) { data.setErrorMessage(""); return; } final RPObject.ID baseItemId = new RPObject.ID(action.getInt(EquipActionConsts.BASE_ITEM), ""); if (!slot.has(baseItemId)) { data.setErrorMessage(""); return; } final Entity entity = (Entity) slot.get(baseItemId); data.addSourceItem(entity); data.addSourceSlot((EntitySlot) slot); } } --- NEW FILE: BuildTargetFromGround.java --- /*************************************************************************** * (C) Copyright 2003-2011 - Stendhal * *************************************************************************** *************************************************************************** * * * This program 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 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ package games.stendhal.server.core.rp.equipping.builder; import static games.stendhal.common.constants.Actions.X; import static games.stendhal.common.constants.Actions.Y; import games.stendhal.server.core.rp.equipping.EquipmentActionData; import games.stendhal.server.entity.player.Player; import games.stendhal.server.entity.slot.GroundSlot; import marauroa.common.game.RPAction; class BuildTargetFromGround implements PartialBuilder { public void build(EquipmentActionData data, Player player, RPAction action) { final int x = action.getInt(X); final int y = action.getInt(Y); data.setTargetSlot(new GroundSlot(player.getZone(), x, y)); } } |