playerCount.incrementAndGet();
players.put(e.getEntityId(), newCombatant);
}
+ if(TurnBasedMinecraftMod.config.isFreezeCombatantsEnabled())
+ {
+ newCombatant.x = e.posX;
+ newCombatant.y = e.posY;
+ newCombatant.z = e.posZ;
+ newCombatant.yaw = e.rotationYaw;
+ newCombatant.pitch = e.rotationPitch;
+ }
}
}
if(sideB != null)
playerCount.incrementAndGet();
players.put(e.getEntityId(), newCombatant);
}
+ if(TurnBasedMinecraftMod.config.isFreezeCombatantsEnabled())
+ {
+ newCombatant.x = e.posX;
+ newCombatant.y = e.posY;
+ newCombatant.z = e.posZ;
+ newCombatant.yaw = e.rotationYaw;
+ newCombatant.pitch = e.rotationPitch;
+ }
}
}
undecidedCount.incrementAndGet();
}
}
+ if(TurnBasedMinecraftMod.config.isFreezeCombatantsEnabled())
+ {
+ newCombatant.x = e.posX;
+ newCombatant.y = e.posY;
+ newCombatant.z = e.posZ;
+ newCombatant.yaw = e.rotationYaw;
+ newCombatant.pitch = e.rotationPitch;
+ }
if(newCombatant.entityInfo != null)
{
sendMessageToAllPlayers(PacketBattleMessage.MessageType.ENTERED, newCombatant.entity.getEntityId(), 0, id, newCombatant.entityInfo.category);
undecidedCount.incrementAndGet();
}
}
+ if(TurnBasedMinecraftMod.config.isFreezeCombatantsEnabled())
+ {
+ newCombatant.x = e.posX;
+ newCombatant.y = e.posY;
+ newCombatant.z = e.posZ;
+ newCombatant.yaw = e.rotationYaw;
+ newCombatant.pitch = e.rotationPitch;
+ }
if(newCombatant.entityInfo != null)
{
sendMessageToAllPlayers(PacketBattleMessage.MessageType.ENTERED, newCombatant.entity.getEntityId(), 0, id, newCombatant.entityInfo.category);
}
}
+ private void enforceFreezePositions()
+ {
+ for(Combatant c : sideA.values())
+ {
+ c.entity.setPositionAndRotation(c.x, c.y, c.z, c.yaw, c.pitch);
+ }
+ for(Combatant c : sideB.values())
+ {
+ c.entity.setPositionAndRotation(c.x, c.y, c.z, c.yaw, c.pitch);
+ }
+ }
+
/**
* @return True if battle has ended
*/
{
return true;
}
+ if(TurnBasedMinecraftMod.config.isFreezeCombatantsEnabled())
+ {
+ enforceFreezePositions();
+ }
switch(state)
{
case DECISION:
break;
case ACTION:
{
- Combatant next = turnOrderQueue.poll();
- while(next != null)
+ for(Combatant next = turnOrderQueue.poll(); next != null; next = turnOrderQueue.poll())
{
if(!next.entity.isEntityAlive())
{
- next = turnOrderQueue.poll();
continue;
}
{
final Entity nextEntity = next.entity;
final Entity targetEntity = target.entity;
+ final float yawDirection = Utility.yawDirection(next.entity.posX, next.entity.posZ, target.entity.posX, target.entity.posZ);
+ final float pitchDirection = Utility.pitchDirection(next.entity.posX, next.entity.posY, next.entity.posZ, target.entity.posX, target.entity.posY, target.entity.posZ);
+ if(TurnBasedMinecraftMod.config.isFreezeCombatantsEnabled())
+ {
+ next.yaw = yawDirection;
+ next.pitch = pitchDirection;
+ }
next.entity.getServer().addScheduledTask(() -> {
// have player look at attack target
- ((EntityPlayerMP)nextEntity).connection.setPlayerLocation(nextEntity.posX, nextEntity.posY, nextEntity.posZ, Utility.yawDirection(nextEntity.posX, nextEntity.posZ, targetEntity.posX, targetEntity.posZ), Utility.pitchDirection(nextEntity.posX, nextEntity.posY, nextEntity.posZ, targetEntity.posX, targetEntity.posY, targetEntity.posZ));
+ ((EntityPlayerMP)nextEntity).connection.setPlayerLocation(nextEntity.posX, nextEntity.posY, nextEntity.posZ, yawDirection, pitchDirection);
ItemBow itemBow = (ItemBow)heldItemStack.getItem();
synchronized(TurnBasedMinecraftMod.attackerViaBow)
{
{
sendMessageToAllPlayers(PacketBattleMessage.MessageType.BOW_NO_AMMO, next.entity.getEntityId(), 0, 0);
}
- next = turnOrderQueue.poll();
continue;
}
int hitChance = TurnBasedMinecraftMod.config.getPlayerAttackProbability();
final Entity nextEntity = next.entity;
final Entity targetEntity = target.entity;
final EntityInfo targetEntityInfo = target.entityInfo;
+ final float yawDirection = Utility.yawDirection(next.entity.posX, next.entity.posZ, target.entity.posX, target.entity.posZ);
+ final float pitchDirection = Utility.pitchDirection(next.entity.posX, next.entity.posY, next.entity.posZ, target.entity.posX, target.entity.posY, target.entity.posZ);
+ if(TurnBasedMinecraftMod.config.isFreezeCombatantsEnabled())
+ {
+ next.yaw = yawDirection;
+ next.pitch = pitchDirection;
+ }
next.entity.getServer().addScheduledTask(() -> {
// have player look at attack target
- ((EntityPlayerMP)nextEntity).connection.setPlayerLocation(nextEntity.posX, nextEntity.posY, nextEntity.posZ, Utility.yawDirection(nextEntity.posX, nextEntity.posZ, targetEntity.posX, targetEntity.posZ), Utility.pitchDirection(nextEntity.posX, nextEntity.posY, nextEntity.posZ, targetEntity.posX, targetEntity.posY, targetEntity.posZ));
+ ((EntityPlayerMP)nextEntity).connection.setPlayerLocation(nextEntity.posX, nextEntity.posY, nextEntity.posZ, yawDirection, pitchDirection);
TurnBasedMinecraftMod.attackingEntity = nextEntity;
TurnBasedMinecraftMod.attackingDamage = 0;
((EntityPlayer)nextEntity).attackTargetEntityWithCurrentItem(targetEntity);
}
if(target == null || !target.entity.isEntityAlive())
{
- next = turnOrderQueue.poll();
continue;
}
int hitChance = next.entityInfo.attackProbability;
sendMessageToAllPlayers(PacketBattleMessage.MessageType.SWITCHED_ITEM, next.entity.getEntityId(), 0, 1);
break;
}
- next = turnOrderQueue.poll();
}
for(Combatant c : sideA.values())
{
private int maxInBattle = 8;
private Set<String> musicBattleTypes;
private Set<String> musicSillyTypes;
+ private boolean freezeCombatantsInBattle = false;
public Config(Logger logger)
{
{
maxInBattle = Integer.parseInt(xmlReader.getElementText());
}
+ else if(xmlReader.getLocalName().equals("FreezeBattleCombatants"))
+ {
+ freezeCombatantsInBattle = !xmlReader.getElementText().toLowerCase().equals("false");
+ }
else if(xmlReader.getLocalName().equals("IgnoreBattleTypes"))
{
do
xmlReader.next();
if(xmlReader.isStartElement())
{
- String classType = xmlReader.getLocalName();
- EntityInfo eInfo = new EntityInfo();
- try
+ if(xmlReader.getLocalName().equals("Entry"))
{
- eInfo.classType = Class.forName(classType);
- } catch (ClassNotFoundException e)
- {
- logger.error("Failed to get class of name " + classType);
- }
- do
- {
- xmlReader.next();
- if(xmlReader.isStartElement())
+ EntityInfo eInfo = new EntityInfo();
+ do
{
- if(xmlReader.getLocalName().equals("AttackPower"))
+ xmlReader.next();
+ if(xmlReader.isStartElement())
{
- for(int i = 0; i < xmlReader.getAttributeCount(); ++i)
+ if(xmlReader.getLocalName().equals("Name"))
{
- if(xmlReader.getAttributeLocalName(i).equals("Probability"))
+ try
{
- eInfo.attackProbability = Integer.parseInt(xmlReader.getAttributeValue(i));
- }
- else if(xmlReader.getAttributeLocalName(i).equals("Variance"))
+ eInfo.classType = Class.forName(xmlReader.getElementText());
+ } catch (ClassNotFoundException e)
{
- eInfo.attackVariance = Integer.parseInt(xmlReader.getAttributeValue(i));
+ logger.error("Failed to get class of name " + xmlReader.getElementText());
}
}
- eInfo.attackPower = Integer.parseInt(xmlReader.getElementText());
- }
- else if(xmlReader.getLocalName().equals("AttackEffect"))
- {
- for(int i = 0; i < xmlReader.getAttributeCount(); ++i)
+ else if(xmlReader.getLocalName().equals("AttackPower"))
{
- if(xmlReader.getAttributeLocalName(i).equals("Probability"))
+ for(int i = 0; i < xmlReader.getAttributeCount(); ++i)
{
- eInfo.attackEffectProbability = Integer.parseInt(xmlReader.getAttributeValue(i));
+ if(xmlReader.getAttributeLocalName(i).equals("Probability"))
+ {
+ eInfo.attackProbability = Integer.parseInt(xmlReader.getAttributeValue(i));
+ }
+ else if(xmlReader.getAttributeLocalName(i).equals("Variance"))
+ {
+ eInfo.attackVariance = Integer.parseInt(xmlReader.getAttributeValue(i));
+ }
}
+ eInfo.attackPower = Integer.parseInt(xmlReader.getElementText());
}
- eInfo.attackEffect = EntityInfo.Effect.fromString(xmlReader.getElementText());
- }
- else if(xmlReader.getLocalName().equals("Evasion"))
- {
- eInfo.evasion = Integer.parseInt(xmlReader.getElementText());
- }
- else if(xmlReader.getLocalName().equals("DefenseDamage"))
- {
- for(int i = 0; i < xmlReader.getAttributeCount(); ++i)
+ else if(xmlReader.getLocalName().equals("AttackEffect"))
{
- if(xmlReader.getAttributeLocalName(i).equals("Probability"))
+ for(int i = 0; i < xmlReader.getAttributeCount(); ++i)
{
- eInfo.defenseDamageProbability = Integer.parseInt(xmlReader.getAttributeValue(i));
+ if(xmlReader.getAttributeLocalName(i).equals("Probability"))
+ {
+ eInfo.attackEffectProbability = Integer.parseInt(xmlReader.getAttributeValue(i));
+ }
}
+ eInfo.attackEffect = EntityInfo.Effect.fromString(xmlReader.getElementText());
}
- eInfo.defenseDamage = Integer.parseInt(xmlReader.getElementText());
- }
- else if(xmlReader.getLocalName().equals("Category"))
- {
- eInfo.category = xmlReader.getElementText().toLowerCase();
- }
- else if(xmlReader.getLocalName().equals("IgnoreBattle"))
- {
- if(xmlReader.getElementText().toLowerCase().equals("true"))
+ else if(xmlReader.getLocalName().equals("Evasion"))
{
- eInfo.ignoreBattle = true;
+ eInfo.evasion = Integer.parseInt(xmlReader.getElementText());
}
- }
- else if(xmlReader.getLocalName().equals("Speed"))
- {
- eInfo.speed = Integer.parseInt(xmlReader.getElementText());
- }
- else if(xmlReader.getLocalName().equals("Decision"))
- {
- do
+ else if(xmlReader.getLocalName().equals("DefenseDamage"))
{
- xmlReader.next();
- if(xmlReader.isStartElement())
+ for(int i = 0; i < xmlReader.getAttributeCount(); ++i)
{
- if(xmlReader.getLocalName().equals("Attack"))
+ if(xmlReader.getAttributeLocalName(i).equals("Probability"))
{
- eInfo.decisionAttack = Integer.parseInt(xmlReader.getElementText());
+ eInfo.defenseDamageProbability = Integer.parseInt(xmlReader.getAttributeValue(i));
}
- else if(xmlReader.getLocalName().equals("Defend"))
- {
- eInfo.decisionDefend = Integer.parseInt(xmlReader.getElementText());
- }
- else if(xmlReader.getLocalName().equals("Flee"))
+ }
+ eInfo.defenseDamage = Integer.parseInt(xmlReader.getElementText());
+ }
+ else if(xmlReader.getLocalName().equals("Category"))
+ {
+ eInfo.category = xmlReader.getElementText().toLowerCase();
+ }
+ else if(xmlReader.getLocalName().equals("IgnoreBattle"))
+ {
+ if(xmlReader.getElementText().toLowerCase().equals("true"))
+ {
+ eInfo.ignoreBattle = true;
+ }
+ }
+ else if(xmlReader.getLocalName().equals("Speed"))
+ {
+ eInfo.speed = Integer.parseInt(xmlReader.getElementText());
+ }
+ else if(xmlReader.getLocalName().equals("Decision"))
+ {
+ do
+ {
+ xmlReader.next();
+ if(xmlReader.isStartElement())
{
- eInfo.decisionFlee = Integer.parseInt(xmlReader.getElementText());
+ if(xmlReader.getLocalName().equals("Attack"))
+ {
+ eInfo.decisionAttack = Integer.parseInt(xmlReader.getElementText());
+ }
+ else if(xmlReader.getLocalName().equals("Defend"))
+ {
+ eInfo.decisionDefend = Integer.parseInt(xmlReader.getElementText());
+ }
+ else if(xmlReader.getLocalName().equals("Flee"))
+ {
+ eInfo.decisionFlee = Integer.parseInt(xmlReader.getElementText());
+ }
}
- }
- } while(!(xmlReader.isEndElement() && xmlReader.getLocalName().equals("Decision")));
+ } while(!(xmlReader.isEndElement() && xmlReader.getLocalName().equals("Decision")));
+ }
}
+ } while(!(xmlReader.isEndElement() && xmlReader.getLocalName().equals("Entry")));
+ if(eInfo.classType != null)
+ {
+ entityInfoMap.put(eInfo.classType.getName(), eInfo);
}
- } while(!(xmlReader.isEndElement() && xmlReader.getLocalName().equals(classType)));
- if(eInfo.classType != null)
- {
- entityInfoMap.put(eInfo.classType.getName(), eInfo);
}
}
} while(!(xmlReader.isEndElement() && xmlReader.getLocalName().equals("EntityStats")));
{
return musicSillyTypes.contains(type.toLowerCase());
}
+
+ public boolean isFreezeCombatantsEnabled()
+ {
+ return freezeCombatantsInBattle;
+ }
}
<TurnBasedMinecraftConfig>
<!-- If the mod has a newer version config, it will rename the existing config and place the new config -->
- <Version>2</Version>
+ <Version>3</Version>
<!-- If there are "MaxInBattle" amount of entities in battle, other entities cannot join until combatants leave battle. -->
<MaxInBattle>8</MaxInBattle>
+ <!-- If not set to "false", then when battle starts all combatants will remain in their starting position. -->
+ <FreezeBattleCombatants>false</FreezeBattleCombatants>
<!-- Types that will not initiate battle with player. They are listed as "Category" per EntiytStats entity.
Note that items listed in "IgnoreBattleTypes" and "Category" are converted to lowercase before being compared. -->
<IgnoreBattleTypes>
<MinimumHitPercentage>4</MinimumHitPercentage>
<!-- Battle stats for entities should be specified here. If an entity is not listed it cannot enter battle. -->
<EntityStats>
+ <!-- Name: The full class name of an entity. -->
<!-- AttackPower: How much damage an entity does per attack. Usually has a "Probability" attribute between 0 and 100. Also may have a "Variance" attribute that varies the attack power by the specified amount randomly. -->
<!-- AttackEffect: (Optional) Applies effect to target entity with "Probability" success rate. -->
<!-- DefenseDamage: (Optional) Applies damage to an attacker when attacked with "Probability" success rate. -->
<!-- IgnoreBattle: (Optional) Per entity setting to not enter turn-based-battle if value is "true". If "true" these stats will not apply to the entity as they are only used in turn-based-battle. -->
<!-- Category: Sets the type of the entity, used by "IgnoreBattleTypes" to determine what types ignore battle. -->
<!-- Decision: Lists percentages of what action taken by the entity, one of Attack, Defend, or Flee. If the sum is less than 100, the mob has a chance to do nothing with the remaining percentage -->
- <net.minecraft.entity.monster.EntityBlaze>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityBlaze</Name>
<AttackPower Probability="50">5</AttackPower>
<AttackEffect Probability="75">fire</AttackEffect>
<Evasion>5</Evasion>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityBlaze>
- <net.minecraft.entity.monster.EntityCaveSpider>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityCaveSpider</Name>
<AttackPower Probability="75">2</AttackPower>
<AttackEffect Probability="90">poison</AttackEffect>
<Evasion>35</Evasion>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityCaveSpider>
- <net.minecraft.entity.monster.EntityCreeper>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityCreeper</Name>
<IgnoreBattle>true</IgnoreBattle>
<AttackPower Probability="17" Variance="7">15</AttackPower>
<Evasion>5</Evasion>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityCreeper>
- <net.minecraft.entity.monster.EntityElderGuardian>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityElderGuardian</Name>
<AttackPower Probability="65">8</AttackPower>
<DefenseDamage Probability="35">2</DefenseDamage>
<Evasion>25</Evasion>
<Defend>20</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityElderGuardian>
- <net.minecraft.entity.monster.EntityEnderman>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityEnderman</Name>
<AttackPower Probability="80">7</AttackPower>
<Evasion>40</Evasion>
<Category>monster</Category>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityEnderman>
- <net.minecraft.entity.monster.EntityEndermite>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityEndermite</Name>
<AttackPower Probability="80">2</AttackPower>
<Evasion>40</Evasion>
<Category>monster</Category>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityEndermite>
- <net.minecraft.entity.monster.EntityEvoker>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityEvoker</Name>
<AttackPower Probability="60">6</AttackPower>
<Evasion>35</Evasion>
<Category>monster</Category>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityEvoker>
- <net.minecraft.entity.monster.EntityGhast>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityGhast</Name>
<IgnoreBattle>true</IgnoreBattle>
<AttackPower Probability="20">13</AttackPower>
<Evasion>35</Evasion>
<Defend>0</Defend>
<Flee>25</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityGhast>
- <net.minecraft.entity.monster.EntityGiantZombie>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityGiantZombie</Name>
<AttackPower Probability="35">11</AttackPower>
<Evasion>2</Evasion>
<Category>monster</Category>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityGiantZombie>
- <net.minecraft.entity.monster.EntityGuardian>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityGuardian</Name>
<AttackPower Probability="55">6</AttackPower>
<DefenseDamage Probability="30">2</DefenseDamage>
<Evasion>25</Evasion>
<Defend>20</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityGuardian>
- <net.minecraft.entity.monster.EntityHusk>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityHusk</Name>
<AttackPower Probability="70">3</AttackPower>
<AttackEffect Probability="95">hunger</AttackEffect>
<Evasion>5</Evasion>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityHusk>
- <net.minecraft.entity.monster.EntityIronGolem>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityIronGolem</Name>
<AttackPower Probability="85" Variance="7">14</AttackPower>
<Evasion>5</Evasion>
<Category>monster</Category>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityIronGolem>
- <net.minecraft.entity.monster.EntityMagmaCube>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityMagmaCube</Name>
<AttackPower Probability="35">3</AttackPower>
<Evasion>12</Evasion>
<Category>monster</Category>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityMagmaCube>
- <net.minecraft.entity.monster.EntityPigZombie>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityPigZombie</Name>
<AttackPower Probability="70">8</AttackPower>
<Evasion>10</Evasion>
<Category>monster</Category>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityPigZombie>
- <net.minecraft.entity.monster.EntityPolarBear>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityPolarBear</Name>
<AttackPower Probability="67">6</AttackPower>
<Evasion>5</Evasion>
<Category>animal</Category>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityPolarBear>
- <net.minecraft.entity.monster.EntityShulker>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityShulker</Name>
<AttackPower Probability="80">4</AttackPower>
<Evasion>15</Evasion>
<Category>monster</Category>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityShulker>
- <net.minecraft.entity.monster.EntitySilverfish>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntitySilverfish</Name>
<AttackPower Probability="85">1</AttackPower>
<Evasion>37</Evasion>
<Category>monster</Category>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntitySilverfish>
- <net.minecraft.entity.monster.EntitySkeleton>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntitySkeleton</Name>
<AttackPower Probability="75" Variance="1">3</AttackPower>
<Evasion>13</Evasion>
<Category>monster</Category>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntitySkeleton>
- <net.minecraft.entity.monster.EntitySlime>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntitySlime</Name>
<AttackPower Probability="35">2</AttackPower>
<Evasion>10</Evasion>
<Category>monster</Category>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntitySlime>
- <net.minecraft.entity.monster.EntitySnowman>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntitySnowman</Name>
<AttackPower Probability="80">0</AttackPower>
<Evasion>5</Evasion>
<Category>passive</Category>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntitySnowman>
- <net.minecraft.entity.monster.EntitySpider>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntitySpider</Name>
<AttackPower Probability="70">2</AttackPower>
<Evasion>25</Evasion>
<Category>monster</Category>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntitySpider>
- <net.minecraft.entity.monster.EntityStray>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityStray</Name>
<AttackPower Probability="75" Variance="1">3</AttackPower>
<AttackEffect Probability="90">slow</AttackEffect>
<Evasion>13</Evasion>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityStray>
- <net.minecraft.entity.monster.EntityVex>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityVex</Name>
<AttackPower Probability="65">9</AttackPower>
<Evasion>30</Evasion>
<Category>monster</Category>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityVex>
- <net.minecraft.entity.monster.EntityVindicator>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityVindicator</Name>
<AttackPower Probability="70">13</AttackPower>
<Evasion>10</Evasion>
<Category>monster</Category>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityVindicator>
- <net.minecraft.entity.monster.EntityWitch>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityWitch</Name>
<AttackPower Probability="75" Variance="1">5</AttackPower>
<Evasion>8</Evasion>
<Category>monster</Category>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityWitch>
- <net.minecraft.entity.monster.EntityWitherSkeleton>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityWitherSkeleton</Name>
<AttackPower Probability="70">8</AttackPower>
<AttackEffect Probability="90">wither</AttackEffect>
<Evasion>7</Evasion>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityWitherSkeleton>
- <net.minecraft.entity.monster.EntityZombie>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityZombie</Name>
<AttackPower Probability="70">3</AttackPower>
<Evasion>5</Evasion>
<Category>monster</Category>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityZombie>
- <net.minecraft.entity.monster.EntityZombieVillager>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.monster.EntityZombieVillager</Name>
<AttackPower Probability="70">3</AttackPower>
<Evasion>5</Evasion>
<Category>monster</Category>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.monster.EntityZombieVillager>
- <net.minecraft.entity.passive.EntityBat>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.passive.EntityBat</Name>
<AttackPower Probability="70">0</AttackPower>
<Evasion>35</Evasion>
<Category>passive</Category>
<Defend>0</Defend>
<Flee>90</Flee>
</Decision>
- </net.minecraft.entity.passive.EntityBat>
- <net.minecraft.entity.passive.EntityChicken>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.passive.EntityChicken</Name>
<AttackPower Probability="70">0</AttackPower>
<Evasion>10</Evasion>
<Category>passive</Category>
<Defend>0</Defend>
<Flee>90</Flee>
</Decision>
- </net.minecraft.entity.passive.EntityChicken>
- <net.minecraft.entity.passive.EntityCow>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.passive.EntityCow</Name>
<AttackPower Probability="50">0</AttackPower>
<Evasion>1</Evasion>
<Category>passive</Category>
<Defend>10</Defend>
<Flee>80</Flee>
</Decision>
- </net.minecraft.entity.passive.EntityCow>
- <net.minecraft.entity.passive.EntityDonkey>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.passive.EntityDonkey</Name>
<AttackPower Probability="70">0</AttackPower>
<Evasion>10</Evasion>
<Category>passive</Category>
<Defend>0</Defend>
<Flee>90</Flee>
</Decision>
- </net.minecraft.entity.passive.EntityDonkey>
- <net.minecraft.entity.passive.EntityHorse>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.passive.EntityHorse</Name>
<AttackPower Probability="70">0</AttackPower>
<Evasion>10</Evasion>
<Category>passive</Category>
<Defend>0</Defend>
<Flee>90</Flee>
</Decision>
- </net.minecraft.entity.passive.EntityHorse>
- <net.minecraft.entity.passive.EntityLlama>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.passive.EntityLlama</Name>
<AttackPower Probability="70">1</AttackPower>
<Evasion>10</Evasion>
<Category>passive</Category>
<Defend>0</Defend>
<Flee>25</Flee>
</Decision>
- </net.minecraft.entity.passive.EntityLlama>
- <net.minecraft.entity.passive.EntityMooshroom>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.passive.EntityMooshroom</Name>
<AttackPower Probability="70">0</AttackPower>
<Evasion>1</Evasion>
<Category>passive</Category>
<Defend>10</Defend>
<Flee>80</Flee>
</Decision>
- </net.minecraft.entity.passive.EntityMooshroom>
- <net.minecraft.entity.passive.EntityMule>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.passive.EntityMule</Name>
<AttackPower Probability="70">0</AttackPower>
<Evasion>10</Evasion>
<Category>passive</Category>
<Defend>0</Defend>
<Flee>90</Flee>
</Decision>
- </net.minecraft.entity.passive.EntityMule>
- <net.minecraft.entity.passive.EntityOcelot>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.passive.EntityOcelot</Name>
<AttackPower Probability="70" Variance="1">1</AttackPower>
<Evasion>10</Evasion>
<Category>passive</Category>
<Defend>0</Defend>
<Flee>90</Flee>
</Decision>
- </net.minecraft.entity.passive.EntityOcelot>
- <net.minecraft.entity.passive.EntityParrot>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.passive.EntityParrot</Name>
<AttackPower Probability="70">0</AttackPower>
<Evasion>35</Evasion>
<Category>passive</Category>
<Defend>0</Defend>
<Flee>90</Flee>
</Decision>
- </net.minecraft.entity.passive.EntityParrot>
- <net.minecraft.entity.passive.EntityPig>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.passive.EntityPig</Name>
<AttackPower Probability="70">0</AttackPower>
<Evasion>10</Evasion>
<Category>passive</Category>
<Defend>5</Defend>
<Flee>85</Flee>
</Decision>
- </net.minecraft.entity.passive.EntityPig>
- <net.minecraft.entity.passive.EntityRabbit>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.passive.EntityRabbit</Name>
<AttackPower Probability="70">0</AttackPower>
<Evasion>40</Evasion>
<Category>passive</Category>
<Defend>0</Defend>
<Flee>100</Flee>
</Decision>
- </net.minecraft.entity.passive.EntityRabbit>
- <net.minecraft.entity.passive.EntitySheep>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.passive.EntitySheep</Name>
<AttackPower Probability="70">0</AttackPower>
<Evasion>5</Evasion>
<Category>passive</Category>
<Defend>0</Defend>
<Flee>90</Flee>
</Decision>
- </net.minecraft.entity.passive.EntitySheep>
- <net.minecraft.entity.passive.EntitySkeletonHorse>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.passive.EntitySkeletonHorse</Name>
<AttackPower Probability="70">0</AttackPower>
<Evasion>5</Evasion>
<Category>passive</Category>
<Defend>0</Defend>
<Flee>90</Flee>
</Decision>
- </net.minecraft.entity.passive.EntitySkeletonHorse>
- <net.minecraft.entity.passive.EntitySquid>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.passive.EntitySquid</Name>
<AttackPower Probability="70">0</AttackPower>
<Evasion>15</Evasion>
<Category>passive</Category>
<Defend>0</Defend>
<Flee>90</Flee>
</Decision>
- </net.minecraft.entity.passive.EntitySquid>
- <net.minecraft.entity.passive.EntityVillager>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.passive.EntityVillager</Name>
<AttackPower Probability="70">0</AttackPower>
<Evasion>5</Evasion>
<Category>passive</Category>
<Defend>10</Defend>
<Flee>80</Flee>
</Decision>
- </net.minecraft.entity.passive.EntityVillager>
- <net.minecraft.entity.passive.EntityWolf>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.passive.EntityWolf</Name>
<AttackPower Probability="70">4</AttackPower>
<Evasion>20</Evasion>
<Category>animal</Category>
<Defend>15</Defend>
<Flee>5</Flee>
</Decision>
- </net.minecraft.entity.passive.EntityWolf>
- <net.minecraft.entity.passive.EntityZombieHorse>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.passive.EntityZombieHorse</Name>
<AttackPower Probability="70">0</AttackPower>
<Evasion>8</Evasion>
<Category>passive</Category>
<Defend>0</Defend>
<Flee>90</Flee>
</Decision>
- </net.minecraft.entity.passive.EntityZombieHorse>
- <net.minecraft.entity.boss.EntityDragon>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.boss.EntityDragon</Name>
<AttackPower Probability="70" Variance="2">10</AttackPower>
<Evasion>27</Evasion>
<Category>boss</Category>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.boss.EntityDragon>
- <net.minecraft.entity.boss.EntityWither>
+ </Entry>
+ <Entry>
+ <Name>net.minecraft.entity.boss.EntityWither</Name>
<AttackPower Probability="70">8</AttackPower>
<Evasion>20</Evasion>
<AttackEffect Probability="90">wither</AttackEffect>
<Defend>0</Defend>
<Flee>0</Flee>
</Decision>
- </net.minecraft.entity.boss.EntityWither>
+ </Entry>
</EntityStats>
</TurnBasedMinecraftConfig>
\ No newline at end of file