]> git.seodisparate.com - TurnBasedMinecraftMod/commitdiff
Version 1.5, minor fixes 1.5
authorStephen Seo <seo.disparate@gmail.com>
Fri, 19 Oct 2018 08:18:02 +0000 (17:18 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Fri, 19 Oct 2018 08:18:02 +0000 (17:18 +0900)
Food and potion consumption in battle is now handled more properly.

Changelog.md
build.gradle
src/main/java/com/seodisparate/TurnBasedMinecraft/common/Battle.java
src/main/java/com/seodisparate/TurnBasedMinecraft/common/BattleUpdater.java
src/main/java/com/seodisparate/TurnBasedMinecraft/common/TurnBasedMinecraftMod.java

index 9c3e97d3d6bc957acafb669b5d4b7d061629b5d6..193d87e85a7ced08bce0094a74da63fbe4657b56 100644 (file)
@@ -1,3 +1,10 @@
+# Version 1.5
+
+Fix proper consumption of food/potion items in battle.
+
+Added some debug output on internal freeze occurrence (investigation of the
+freeze bug is still ongoing).
+
 # Version 1.4
 
 Fix duplicate "... entered battle" messages.
index 9c520aebb7667db12023219f517a2d52d772cf63..2ea243c3c8ab8f7c6bbf6008a46f7cdd951a0c15 100644 (file)
@@ -10,7 +10,7 @@ buildscript {
 apply plugin: 'net.minecraftforge.gradle.forge'\r
 //Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.\r
 \r
-version = "1.4"\r
+version = "1.5"\r
 group = "com.seodisparate.TurnBasedMinecraft" // http://maven.apache.org/guides/mini/guide-naming-conventions.html\r
 archivesBaseName = "TurnBasedMinecraft"\r
 \r
index e40671819a82cd080a25f2aa990905bc8755b8d0..9f8d3c1dbe46048101ab6c1b7ebc1dc82d36ae7e 100644 (file)
@@ -52,6 +52,8 @@ public class Battle
     
     private BattleManager battleManager;
     
+    public String debugLog; // TODO remove after freeze bug has been found
+    
     public enum State
     {
         DECISION(0),
@@ -828,17 +830,22 @@ public class Battle
                         continue;
                     }
                     
+                    debugLog = next.entity.getName();
+                    
                     next.remainingDefenses = 0;
                     
                     switch(next.decision)
                     {
                     case UNDECIDED:
+                        debugLog += " undecided";
                         sendMessageToAllPlayers(PacketBattleMessage.MessageType.DID_NOTHING, next.entity.getEntityId(), 0, 0);
                         break;
                     case ATTACK:
+                        debugLog += " attack";
                         Combatant target = null;
                         if(next.entity instanceof EntityPlayer)
                         {
+                            debugLog += " as player";
                             target = sideA.get(next.targetEntityID);
                             if(target == null)
                             {
@@ -851,6 +858,7 @@ public class Battle
                             ItemStack heldItemStack = ((EntityPlayer)next.entity).getHeldItemMainhand();
                             if(heldItemStack.getItem() instanceof ItemBow)
                             {
+                                debugLog += " with bow";
                                 if(Utility.doesPlayerHaveArrows((EntityPlayer)next.entity))
                                 {
                                     final Entity nextEntity = next.entity;
@@ -880,6 +888,7 @@ public class Battle
                                 }
                                 continue;
                             }
+                            debugLog += " without bow";
                             int hitChance = TurnBasedMinecraftMod.proxy.getConfig().getPlayerAttackProbability();
                             if(target.entity instanceof EntityPlayer)
                             {
@@ -897,6 +906,7 @@ public class Battle
                             {
                                 if(target.remainingDefenses <= 0)
                                 {
+                                    debugLog += " hit success";
                                     // attack
                                     final Entity nextEntity = next.entity;
                                     final Entity targetEntity = target.entity;
@@ -932,6 +942,7 @@ public class Battle
                                 }
                                 else
                                 {
+                                    debugLog += " hit blocked";
                                     // blocked
                                     --target.remainingDefenses;
                                     sendMessageToAllPlayers(PacketBattleMessage.MessageType.DEFEND, target.entity.getEntityId(), next.entity.getEntityId(), 0);
@@ -939,19 +950,23 @@ public class Battle
                             }
                             else
                             {
+                                debugLog += " hit missed";
                                 // miss
                                 sendMessageToAllPlayers(PacketBattleMessage.MessageType.MISS, next.entity.getEntityId(), target.entity.getEntityId(), 0);
                             }
                         }
                         else
                         {
+                            debugLog += " as mob";
                             EntityLivingBase attackTarget = ((EntityLiving)next.entity).getAttackTarget();
                             if(attackTarget != null && hasCombatant(attackTarget.getEntityId()))
                             {
+                                debugLog += " to targeted";
                                 target = getCombatantByID(attackTarget.getEntityId());
                             }
                             else
                             {
+                                debugLog += " to random other side";
                                 if(next.isSideA)
                                 {
                                     int randomTargetIndex = (int)(Math.random() * sideB.size());
@@ -998,6 +1013,7 @@ public class Battle
                             {
                                 if(target.remainingDefenses <= 0)
                                 {
+                                    debugLog += " hit success";
                                     DamageSource damageSource = DamageSource.causeMobDamage((EntityLivingBase)next.entity);
                                     int damageAmount = next.entityInfo.attackPower;
                                     if(next.entityInfo.attackVariance > 0)
@@ -1010,6 +1026,7 @@ public class Battle
                                     final Entity targetEntity = target.entity;
                                     final EntityInfo targetEntityInfo = target.entityInfo;
                                     final int finalDamageAmount = damageAmount;
+                                    debugLog += " adding task...";
                                     next.entity.getServer().addScheduledTask(() -> {
                                         TurnBasedMinecraftMod.proxy.setAttackingEntity(nextEntity);
                                         targetEntity.attackEntityFrom(damageSource, finalDamageAmount);
@@ -1038,9 +1055,11 @@ public class Battle
                                             }
                                         }
                                     });
+                                    debugLog += "...task added";
                                 }
                                 else
                                 {
+                                    debugLog += " hit blocked";
                                     // blocked
                                     --target.remainingDefenses;
                                     sendMessageToAllPlayers(PacketBattleMessage.MessageType.DEFEND, target.entity.getEntityId(), next.entity.getEntityId(), 0);
@@ -1048,16 +1067,19 @@ public class Battle
                             }
                             else
                             {
+                                debugLog += " hit missed";
                                 // miss
                                 sendMessageToAllPlayers(PacketBattleMessage.MessageType.MISS, next.entity.getEntityId(), target.entity.getEntityId(), 0);
                             }
                         }
                         break;
                     case DEFEND:
+                        debugLog += " defend";
                         next.remainingDefenses = TurnBasedMinecraftMod.proxy.getConfig().getDefenseDuration();
                         sendMessageToAllPlayers(PacketBattleMessage.MessageType.DEFENDING, next.entity.getEntityId(), 0, 0);
                         break;
                     case FLEE:
+                        debugLog += " flee";
                         int fastestEnemySpeed = 0;
                         if(next.isSideA)
                         {
@@ -1124,6 +1146,7 @@ public class Battle
                         }
                         if((int)(Math.random() * 100) < fleeProbability)
                         {
+                            debugLog += " success";
                             // flee success
                             combatantsChanged = true;
                             String fleeingCategory = new String();
@@ -1140,13 +1163,16 @@ public class Battle
                         }
                         else
                         {
+                            debugLog += " fail";
                             // flee fail
                             sendMessageToAllPlayers(PacketBattleMessage.MessageType.FLEE, next.entity.getEntityId(), 0, 0);
                         }
                         break;
                     case USE_ITEM:
+                        debugLog += " use item";
                         if(next.itemToUse < 0 || next.itemToUse > 8)
                         {
+                            debugLog += " invalid";
                             sendMessageToAllPlayers(PacketBattleMessage.MessageType.USED_ITEM, next.entity.getEntityId(), 0, PacketBattleMessage.UsedItemAction.USED_INVALID.getValue());
                             break;
                         }
@@ -1154,33 +1180,38 @@ public class Battle
                         Item targetItem = targetItemStack.getItem();
                         if(targetItem == null)
                         {
+                            debugLog += " null";
                             sendMessageToAllPlayers(PacketBattleMessage.MessageType.USED_ITEM, next.entity.getEntityId(), 0, PacketBattleMessage.UsedItemAction.USED_NOTHING.getValue());
                             break;
                         }
                         if(targetItem instanceof ItemFood)
                         {
+                            debugLog += " food";
                             sendMessageToAllPlayers(PacketBattleMessage.MessageType.USED_ITEM, next.entity.getEntityId(), 0, PacketBattleMessage.UsedItemAction.USED_FOOD.getValue(), targetItemStack.getDisplayName());
                             final Entity nextEntity = next.entity;
+                            final int nextItemToUse = next.itemToUse;
                             next.entity.getServer().addScheduledTask(() -> {
-                                ((ItemFood)targetItem).onItemUseFinish(targetItemStack, nextEntity.world, (EntityLivingBase)nextEntity);
+                                ((EntityPlayer)nextEntity).inventory.setInventorySlotContents(nextItemToUse, targetItem.onItemUseFinish(targetItemStack, nextEntity.world, (EntityLivingBase)nextEntity));
                             });
                         }
                         else if(targetItem instanceof ItemPotion && !(targetItem instanceof ItemSplashPotion) && !(targetItem instanceof ItemLingeringPotion))
                         {
+                            debugLog += " potion";
                             sendMessageToAllPlayers(PacketBattleMessage.MessageType.USED_ITEM, next.entity.getEntityId(), 0, PacketBattleMessage.UsedItemAction.USED_POTION.getValue(), targetItemStack.getDisplayName());
                             final Entity nextEntity = next.entity;
                             final int nextItemToUse = next.itemToUse;
                             next.entity.getServer().addScheduledTask(() -> {
-                                ((ItemPotion)targetItem).onItemUseFinish(targetItemStack, nextEntity.world, (EntityLivingBase)nextEntity);
-                                ((EntityPlayer)nextEntity).inventory.setInventorySlotContents(nextItemToUse, new ItemStack(Items.GLASS_BOTTLE));
+                                ((EntityPlayer)nextEntity).inventory.setInventorySlotContents(nextItemToUse, targetItem.onItemUseFinish(targetItemStack, nextEntity.world, (EntityLivingBase)nextEntity));
                             });
                         }
                         else
                         {
+                            debugLog += " non-consumable";
                             sendMessageToAllPlayers(PacketBattleMessage.MessageType.USED_ITEM, next.entity.getEntityId(), 0, PacketBattleMessage.UsedItemAction.USED_INVALID.getValue(), targetItemStack.getDisplayName());
                         }
                         break;
                     case SWITCH_ITEM:
+                        debugLog += " switch item";
                         if(next.itemToUse < 0 || next.itemToUse > 8)
                         {
                             sendMessageToAllPlayers(PacketBattleMessage.MessageType.SWITCHED_ITEM, next.entity.getEntityId(), 0, 0);
@@ -1195,6 +1226,7 @@ public class Battle
                         break;
                     }
                 }
+                debugLog = "Actions end";
                 for(Combatant c : sideA.values())
                 {
                     c.decision = Decision.UNDECIDED;
index 6a497ecf176449424594f239a414f8b1a0bd96d8..58b715a9fdea8c5de8f476c82790332dbc40f01a 100644 (file)
@@ -64,7 +64,7 @@ public class BattleUpdater implements Runnable
                     if(!updateRunnable.isFinished())
                     {
                         // TODO this is an ugly fix to a still-not-found freeze bug in Battle.update()
-                        TurnBasedMinecraftMod.logger.error("Battle (" + entry.getValue().getId() + ") update timed out!");
+                        TurnBasedMinecraftMod.logger.error("Battle (" + entry.getValue().getId() + "; " + entry.getValue().debugLog + ") update timed out!");
                         updateThread.stop();
                     }
                     else if(updateRunnable.isBattleFinished())
index a245a646ed9693c9e166096e08c4c397bee6e267..26a17ddc65420ef9c7c9e47fdee41f17e54a59b0 100644 (file)
@@ -26,7 +26,7 @@ public class TurnBasedMinecraftMod
 {
     public static final String MODID = "com.seodisparate.turnbasedminecraft";
     public static final String NAME = "Turn Based Minecraft Mod";
-    public static final String VERSION = "1.4";
+    public static final String VERSION = "1.5";
     public static final String CONFIG_FILENAME = "TBM_Config.xml";
     public static final String CONFIG_DIRECTORY = "config/TurnBasedMinecraft/";
     public static final String CONFIG_FILE_PATH = CONFIG_DIRECTORY + CONFIG_FILENAME;