crash bug fixes, mod is playable at this point
Missing some features from the pre-rewrite version such as playing battle music, using bow/arrows, limiting number of combatants in battle...
This commit is contained in:
parent
3d6354e808
commit
5999808859
13 changed files with 191 additions and 62 deletions
|
@ -5,12 +5,13 @@ import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
import com.seodisparate.TurnBasedMinecraft.TurnBasedMinecraftMod;
|
|
||||||
import com.seodisparate.TurnBasedMinecraft.common.Battle;
|
import com.seodisparate.TurnBasedMinecraft.common.Battle;
|
||||||
import com.seodisparate.TurnBasedMinecraft.common.Combatant;
|
import com.seodisparate.TurnBasedMinecraft.common.Combatant;
|
||||||
|
import com.seodisparate.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||||
import com.seodisparate.TurnBasedMinecraft.common.networking.PacketBattleDecision;
|
import com.seodisparate.TurnBasedMinecraft.common.networking.PacketBattleDecision;
|
||||||
import com.seodisparate.TurnBasedMinecraft.common.networking.PacketHandler;
|
import com.seodisparate.TurnBasedMinecraft.common.networking.PacketHandler;
|
||||||
|
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.GuiButton;
|
import net.minecraft.client.gui.GuiButton;
|
||||||
import net.minecraft.client.gui.GuiScreen;
|
import net.minecraft.client.gui.GuiScreen;
|
||||||
|
|
||||||
|
@ -125,7 +126,10 @@ public class BattleGui extends GuiScreen
|
||||||
|
|
||||||
public void turnEnd()
|
public void turnEnd()
|
||||||
{
|
{
|
||||||
TurnBasedMinecraftMod.currentBattle.setState(Battle.State.DECISION);
|
if(TurnBasedMinecraftMod.currentBattle != null)
|
||||||
|
{
|
||||||
|
TurnBasedMinecraftMod.currentBattle.setState(Battle.State.DECISION);
|
||||||
|
}
|
||||||
timeRemaining.set((int)TurnBasedMinecraftMod.BattleDecisionTime.getSeconds());
|
timeRemaining.set((int)TurnBasedMinecraftMod.BattleDecisionTime.getSeconds());
|
||||||
setState(MenuState.MAIN_MENU);
|
setState(MenuState.MAIN_MENU);
|
||||||
}
|
}
|
||||||
|
@ -148,36 +152,36 @@ public class BattleGui extends GuiScreen
|
||||||
{
|
{
|
||||||
case MAIN_MENU:
|
case MAIN_MENU:
|
||||||
info = "What will you do?";
|
info = "What will you do?";
|
||||||
buttonList.add(new GuiButton(ButtonAction.ATTACK.getValue(), width*2/7 - 40, height - 120, 80, 20, "Attack"));
|
buttonList.add(new GuiButton(ButtonAction.ATTACK.getValue(), width*2/7 - 30, height - 120, 60, 20, "Attack"));
|
||||||
buttonList.add(new GuiButton(ButtonAction.DEFEND.getValue(), width*3/7 - 40, height - 120, 80, 20, "Defend"));
|
buttonList.add(new GuiButton(ButtonAction.DEFEND.getValue(), width*3/7 - 30, height - 120, 60, 20, "Defend"));
|
||||||
buttonList.add(new GuiButton(ButtonAction.ITEM.getValue(), width*4/7 - 40, height - 120, 80, 20, "Item"));
|
buttonList.add(new GuiButton(ButtonAction.ITEM.getValue(), width*4/7 - 30, height - 120, 60, 20, "Item"));
|
||||||
buttonList.add(new GuiButton(ButtonAction.FLEE.getValue(), width*5/7 - 40, height - 120, 80, 20, "Flee"));
|
buttonList.add(new GuiButton(ButtonAction.FLEE.getValue(), width*5/7 - 30, height - 120, 60, 20, "Flee"));
|
||||||
break;
|
break;
|
||||||
case ATTACK_TARGET:
|
case ATTACK_TARGET:
|
||||||
info = "Who will you attack?";
|
info = "Who will you attack?";
|
||||||
int y = 50;
|
int y = 30;
|
||||||
for(Map.Entry<Integer, Combatant> e : TurnBasedMinecraftMod.currentBattle.getSideAEntrySet())
|
for(Map.Entry<Integer, Combatant> e : TurnBasedMinecraftMod.currentBattle.getSideAEntrySet())
|
||||||
{
|
{
|
||||||
if(e.getValue().entity != null)
|
if(e.getValue().entity != null)
|
||||||
{
|
{
|
||||||
buttonList.add(new EntitySelectionButton(ButtonAction.ATTACK_TARGET.getValue(), width/4 - 100, y, e.getValue().entity.getName(), e.getKey()));
|
buttonList.add(new EntitySelectionButton(ButtonAction.ATTACK_TARGET.getValue(), width/4 - 60, y, 120, 20, e.getValue().entity.getName(), e.getKey()));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
buttonList.add(new EntitySelectionButton(ButtonAction.ATTACK_TARGET.getValue(), width/4 - 100, y, "Unknown", e.getKey()));
|
buttonList.add(new EntitySelectionButton(ButtonAction.ATTACK_TARGET.getValue(), width/4 - 60, y, 120, 20, "Unknown", e.getKey()));
|
||||||
}
|
}
|
||||||
y += 20;
|
y += 20;
|
||||||
}
|
}
|
||||||
y = 50;
|
y = 30;
|
||||||
for(Map.Entry<Integer, Combatant> e : TurnBasedMinecraftMod.currentBattle.getSideBEntrySet())
|
for(Map.Entry<Integer, Combatant> e : TurnBasedMinecraftMod.currentBattle.getSideBEntrySet())
|
||||||
{
|
{
|
||||||
if(e.getValue().entity != null)
|
if(e.getValue().entity != null)
|
||||||
{
|
{
|
||||||
buttonList.add(new EntitySelectionButton(ButtonAction.ATTACK_TARGET.getValue(), width*3/4 - 100, y, e.getValue().entity.getName(), e.getKey()));
|
buttonList.add(new EntitySelectionButton(ButtonAction.ATTACK_TARGET.getValue(), width*3/4 - 60, y, 120, 20, e.getValue().entity.getName(), e.getKey()));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
buttonList.add(new EntitySelectionButton(ButtonAction.ATTACK_TARGET.getValue(), width*3/4 - 100, y, "Unknown", e.getKey()));
|
buttonList.add(new EntitySelectionButton(ButtonAction.ATTACK_TARGET.getValue(), width*3/4 - 60, y, 120, 20, "Unknown", e.getKey()));
|
||||||
}
|
}
|
||||||
y += 20;
|
y += 20;
|
||||||
}
|
}
|
||||||
|
@ -214,6 +218,11 @@ public class BattleGui extends GuiScreen
|
||||||
@Override
|
@Override
|
||||||
public void drawScreen(int mouseX, int mouseY, float partialTicks)
|
public void drawScreen(int mouseX, int mouseY, float partialTicks)
|
||||||
{
|
{
|
||||||
|
if(TurnBasedMinecraftMod.currentBattle == null)
|
||||||
|
{
|
||||||
|
drawHoveringText("Waiting...", width / 2 - 50, height / 2);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if(TurnBasedMinecraftMod.currentBattle.getState() == Battle.State.DECISION && timeRemaining.get() > 0)
|
if(TurnBasedMinecraftMod.currentBattle.getState() == Battle.State.DECISION && timeRemaining.get() > 0)
|
||||||
{
|
{
|
||||||
long nextInstant = System.nanoTime();
|
long nextInstant = System.nanoTime();
|
||||||
|
@ -230,7 +239,25 @@ public class BattleGui extends GuiScreen
|
||||||
|
|
||||||
super.drawScreen(mouseX, mouseY, partialTicks);
|
super.drawScreen(mouseX, mouseY, partialTicks);
|
||||||
|
|
||||||
drawHoveringText(info, width / 2 - 50, height - 50);
|
String timeRemainingString = "Time remaining: ";
|
||||||
|
int timeRemainingInt = timeRemaining.get();
|
||||||
|
if(timeRemainingInt > 8)
|
||||||
|
{
|
||||||
|
timeRemainingString += "\u00A7a";
|
||||||
|
}
|
||||||
|
else if(timeRemainingInt > 4)
|
||||||
|
{
|
||||||
|
timeRemainingString += "\u00A7e";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
timeRemainingString += "\u00A7c";
|
||||||
|
}
|
||||||
|
timeRemainingString += Integer.toString(timeRemainingInt);
|
||||||
|
int stringWidth = Minecraft.getMinecraft().fontRenderer.getStringWidth(timeRemainingString);
|
||||||
|
Minecraft.getMinecraft().fontRenderer.drawString(timeRemainingString, width/2 - stringWidth/2, 5, 0xFFFFFFFF);
|
||||||
|
stringWidth = Minecraft.getMinecraft().fontRenderer.getStringWidth(info);
|
||||||
|
Minecraft.getMinecraft().fontRenderer.drawString(info, width/2 - stringWidth/2, 20, 0xFFFFFFFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -276,6 +303,10 @@ public class BattleGui extends GuiScreen
|
||||||
if(button instanceof ItemSelectionButton)
|
if(button instanceof ItemSelectionButton)
|
||||||
{
|
{
|
||||||
PacketHandler.INSTANCE.sendToServer(new PacketBattleDecision(TurnBasedMinecraftMod.currentBattle.getId(), Battle.Decision.SWITCH_ITEM, ((ItemSelectionButton)button).itemStackID));
|
PacketHandler.INSTANCE.sendToServer(new PacketBattleDecision(TurnBasedMinecraftMod.currentBattle.getId(), Battle.Decision.SWITCH_ITEM, ((ItemSelectionButton)button).itemStackID));
|
||||||
|
if(((ItemSelectionButton)button).itemStackID >= 0 && ((ItemSelectionButton)button).itemStackID < 9)
|
||||||
|
{
|
||||||
|
Minecraft.getMinecraft().player.inventory.currentItem = ((ItemSelectionButton)button).itemStackID;
|
||||||
|
}
|
||||||
setState(MenuState.WAITING);
|
setState(MenuState.WAITING);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
package com.seodisparate.TurnBasedMinecraft.common;
|
||||||
|
|
||||||
|
import net.minecraftforge.event.entity.living.LivingAttackEvent;
|
||||||
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
|
||||||
|
public class AttackEventHandler
|
||||||
|
{
|
||||||
|
@SubscribeEvent
|
||||||
|
public void entityAttacked(LivingAttackEvent event)
|
||||||
|
{
|
||||||
|
if(event.getEntity().world.isRemote)
|
||||||
|
{
|
||||||
|
TurnBasedMinecraftMod.logger.debug("isRemote");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if(TurnBasedMinecraftMod.battleManager == null)
|
||||||
|
{
|
||||||
|
TurnBasedMinecraftMod.battleManager = new BattleManager(TurnBasedMinecraftMod.logger);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!(event.getSource().getTrueSource() == null || event.getSource().getTrueSource().equals(TurnBasedMinecraftMod.attackingEntity)) && TurnBasedMinecraftMod.battleManager.checkAttack(event))
|
||||||
|
{
|
||||||
|
TurnBasedMinecraftMod.logger.debug("Canceled LivingAttackEvent between " + TurnBasedMinecraftMod.attackingEntity + " and " + event.getEntity());
|
||||||
|
event.setCanceled(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TurnBasedMinecraftMod.logger.debug("Did not cancel attack");
|
||||||
|
}
|
||||||
|
if(TurnBasedMinecraftMod.attackingDamage < (int) event.getAmount())
|
||||||
|
{
|
||||||
|
TurnBasedMinecraftMod.attackingDamage = (int) event.getAmount();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,11 +11,11 @@ import java.util.Queue;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
import com.seodisparate.TurnBasedMinecraft.TurnBasedMinecraftMod;
|
|
||||||
import com.seodisparate.TurnBasedMinecraft.common.networking.PacketBattleInfo;
|
import com.seodisparate.TurnBasedMinecraft.common.networking.PacketBattleInfo;
|
||||||
import com.seodisparate.TurnBasedMinecraft.common.networking.PacketBattleMessage;
|
import com.seodisparate.TurnBasedMinecraft.common.networking.PacketBattleMessage;
|
||||||
import com.seodisparate.TurnBasedMinecraft.common.networking.PacketHandler;
|
import com.seodisparate.TurnBasedMinecraft.common.networking.PacketHandler;
|
||||||
|
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.EntityLivingBase;
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
@ -588,7 +588,14 @@ public class Battle
|
||||||
{
|
{
|
||||||
// attack
|
// attack
|
||||||
// TODO damage via bow and arrow
|
// TODO damage via bow and arrow
|
||||||
|
// have player look at attack target
|
||||||
|
final Entity nextEntity = next.entity;
|
||||||
|
final Entity targetEntity = target.entity;
|
||||||
|
Minecraft.getMinecraft().addScheduledTask(() -> {
|
||||||
|
((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));
|
||||||
|
});
|
||||||
TurnBasedMinecraftMod.attackingEntity = next.entity;
|
TurnBasedMinecraftMod.attackingEntity = next.entity;
|
||||||
|
TurnBasedMinecraftMod.attackingDamage = 0;
|
||||||
((EntityPlayer)next.entity).attackTargetEntityWithCurrentItem(target.entity);
|
((EntityPlayer)next.entity).attackTargetEntityWithCurrentItem(target.entity);
|
||||||
TurnBasedMinecraftMod.attackingEntity = null;
|
TurnBasedMinecraftMod.attackingEntity = null;
|
||||||
sendMessageToAllPlayers(PacketBattleMessage.MessageType.ATTACK, next.entity.getEntityId(), target.entity.getEntityId(), TurnBasedMinecraftMod.attackingDamage);
|
sendMessageToAllPlayers(PacketBattleMessage.MessageType.ATTACK, next.entity.getEntityId(), target.entity.getEntityId(), TurnBasedMinecraftMod.attackingDamage);
|
||||||
|
@ -844,6 +851,7 @@ public class Battle
|
||||||
c.decision = Decision.UNDECIDED;
|
c.decision = Decision.UNDECIDED;
|
||||||
}
|
}
|
||||||
state = State.DECISION;
|
state = State.DECISION;
|
||||||
|
undecidedCount.set(players.size());
|
||||||
healthCheck();
|
healthCheck();
|
||||||
sendMessageToAllPlayers(PacketBattleMessage.MessageType.TURN_END, 0, 0, 0);
|
sendMessageToAllPlayers(PacketBattleMessage.MessageType.TURN_END, 0, 0, 0);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -5,7 +5,7 @@ import java.util.Collection;
|
||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import com.seodisparate.TurnBasedMinecraft.TurnBasedMinecraftMod;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
@ -16,9 +16,11 @@ public class BattleManager
|
||||||
private int IDCounter = 0;
|
private int IDCounter = 0;
|
||||||
protected Map<Integer, Battle> battleMap;
|
protected Map<Integer, Battle> battleMap;
|
||||||
private Thread updaterThread;
|
private Thread updaterThread;
|
||||||
|
private Logger logger;
|
||||||
|
|
||||||
public BattleManager()
|
public BattleManager(Logger logger)
|
||||||
{
|
{
|
||||||
|
this.logger = logger;
|
||||||
battleMap = new Hashtable<Integer, Battle>();
|
battleMap = new Hashtable<Integer, Battle>();
|
||||||
updaterThread = new Thread(new BattleUpdater(this));
|
updaterThread = new Thread(new BattleUpdater(this));
|
||||||
updaterThread.start();
|
updaterThread.start();
|
||||||
|
@ -40,6 +42,39 @@ public class BattleManager
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check if ignore battle in config
|
||||||
|
EntityInfo entityInfo = TurnBasedMinecraftMod.config.getMatchingEntityInfo(event.getEntity());
|
||||||
|
if(entityInfo != null && (TurnBasedMinecraftMod.config.isIgnoreBattleType(entityInfo.category) || entityInfo.ignoreBattle))
|
||||||
|
{
|
||||||
|
// attacked entity ignores battle
|
||||||
|
for(Battle b : battleMap.values())
|
||||||
|
{
|
||||||
|
if(b.hasCombatant(event.getSource().getTrueSource().getEntityId()))
|
||||||
|
{
|
||||||
|
logger.debug("Attack Canceled: attacked ignores battle but attacker in battle");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
logger.debug("Attack Not Canceled: attacked ignores battle");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
entityInfo = TurnBasedMinecraftMod.config.getMatchingEntityInfo(event.getSource().getTrueSource());
|
||||||
|
if(entityInfo != null && (TurnBasedMinecraftMod.config.isIgnoreBattleType(entityInfo.category) || entityInfo.ignoreBattle))
|
||||||
|
{
|
||||||
|
// attacker entity ignores battle
|
||||||
|
for(Battle b : battleMap.values())
|
||||||
|
{
|
||||||
|
if(b.hasCombatant(event.getEntity().getEntityId()))
|
||||||
|
{
|
||||||
|
logger.debug("Attack Canceled: attacker ignores battle but attacked in battle");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
logger.debug("Attack Not Canceled: attacker ignores battle");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// check if one is in battle
|
// check if one is in battle
|
||||||
Entity inBattle = null;
|
Entity inBattle = null;
|
||||||
Entity notInBattle = null;
|
Entity notInBattle = null;
|
||||||
|
@ -52,6 +87,7 @@ public class BattleManager
|
||||||
if(inBattle != null)
|
if(inBattle != null)
|
||||||
{
|
{
|
||||||
// both combatants are in battle
|
// both combatants are in battle
|
||||||
|
logger.debug("Attack Canceled: both are in battle");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -66,6 +102,7 @@ public class BattleManager
|
||||||
if(inBattle != null)
|
if(inBattle != null)
|
||||||
{
|
{
|
||||||
// both combatants are in battle
|
// both combatants are in battle
|
||||||
|
logger.debug("Attack Canceled: both are in battle");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -88,6 +125,11 @@ public class BattleManager
|
||||||
sideA.add(event.getEntity());
|
sideA.add(event.getEntity());
|
||||||
sideB.add(event.getSource().getTrueSource());
|
sideB.add(event.getSource().getTrueSource());
|
||||||
createBattle(sideA, sideB);
|
createBattle(sideA, sideB);
|
||||||
|
logger.debug("Attack Not Canceled: new battle created");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
logger.debug("Attack Not Canceled: neither are in battle or players");
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -102,6 +144,7 @@ public class BattleManager
|
||||||
battle.addCombatantToSideA(notInBattle);
|
battle.addCombatantToSideA(notInBattle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logger.debug("Attack Canceled: one is in battle");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,6 @@ package com.seodisparate.TurnBasedMinecraft.common;
|
||||||
|
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
|
||||||
import com.seodisparate.TurnBasedMinecraft.TurnBasedMinecraftMod;
|
|
||||||
|
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.EntityLivingBase;
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
|
|
@ -20,7 +20,6 @@ import javax.xml.stream.XMLStreamReader;
|
||||||
|
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import com.seodisparate.TurnBasedMinecraft.TurnBasedMinecraftMod;
|
|
||||||
import com.seodisparate.TurnBasedMinecraft.common.EntityInfo.Category;
|
import com.seodisparate.TurnBasedMinecraft.common.EntityInfo.Category;
|
||||||
|
|
||||||
public class Config
|
public class Config
|
||||||
|
@ -404,7 +403,7 @@ public class Config
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
EntityInfo matching = entityInfoMap.get(entity.getClass().getName());
|
EntityInfo matching = entityInfoMap.get(entity.getClass().getName());
|
||||||
if(matching.classType.isInstance(entity))
|
if(matching != null && matching.classType.isInstance(entity))
|
||||||
{
|
{
|
||||||
for(Class c : matching.conflictingTypes)
|
for(Class c : matching.conflictingTypes)
|
||||||
{
|
{
|
||||||
|
@ -453,4 +452,9 @@ public class Config
|
||||||
|
|
||||||
return configVersion;
|
return configVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isIgnoreBattleType(Category type)
|
||||||
|
{
|
||||||
|
return ignoreBattleTypes.contains(type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,10 @@
|
||||||
package com.seodisparate.TurnBasedMinecraft;
|
package com.seodisparate.TurnBasedMinecraft.common;
|
||||||
|
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
|
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import com.seodisparate.TurnBasedMinecraft.client.BattleGui;
|
import com.seodisparate.TurnBasedMinecraft.client.BattleGui;
|
||||||
import com.seodisparate.TurnBasedMinecraft.common.Battle;
|
|
||||||
import com.seodisparate.TurnBasedMinecraft.common.BattleManager;
|
|
||||||
import com.seodisparate.TurnBasedMinecraft.common.Config;
|
|
||||||
import com.seodisparate.TurnBasedMinecraft.common.networking.PacketBattleDecision;
|
import com.seodisparate.TurnBasedMinecraft.common.networking.PacketBattleDecision;
|
||||||
import com.seodisparate.TurnBasedMinecraft.common.networking.PacketBattleInfo;
|
import com.seodisparate.TurnBasedMinecraft.common.networking.PacketBattleInfo;
|
||||||
import com.seodisparate.TurnBasedMinecraft.common.networking.PacketBattleMessage;
|
import com.seodisparate.TurnBasedMinecraft.common.networking.PacketBattleMessage;
|
||||||
|
@ -15,6 +12,7 @@ import com.seodisparate.TurnBasedMinecraft.common.networking.PacketBattleRequest
|
||||||
import com.seodisparate.TurnBasedMinecraft.common.networking.PacketHandler;
|
import com.seodisparate.TurnBasedMinecraft.common.networking.PacketHandler;
|
||||||
|
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.event.entity.living.LivingAttackEvent;
|
import net.minecraftforge.event.entity.living.LivingAttackEvent;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.common.Mod.EventHandler;
|
import net.minecraftforge.fml.common.Mod.EventHandler;
|
||||||
|
@ -38,12 +36,12 @@ public class TurnBasedMinecraftMod
|
||||||
|
|
||||||
private static int CONFIG_FILE_VERSION = 0;
|
private static int CONFIG_FILE_VERSION = 0;
|
||||||
|
|
||||||
private static Logger logger;
|
protected static Logger logger;
|
||||||
private static BattleManager battleManager;
|
protected static BattleManager battleManager;
|
||||||
private static int packetHandlerID = 0;
|
private static int packetHandlerID = 0;
|
||||||
public static Entity attackingEntity;
|
protected static Entity attackingEntity;
|
||||||
public static int attackingDamage = 0;
|
protected static int attackingDamage = 0;
|
||||||
public static Config config;
|
protected static Config config;
|
||||||
|
|
||||||
public static Battle currentBattle = null;
|
public static Battle currentBattle = null;
|
||||||
public static BattleGui currentBattleGui = null;
|
public static BattleGui currentBattleGui = null;
|
||||||
|
@ -59,14 +57,8 @@ public class TurnBasedMinecraftMod
|
||||||
public void init(FMLInitializationEvent event)
|
public void init(FMLInitializationEvent event)
|
||||||
{
|
{
|
||||||
currentBattle = null;
|
currentBattle = null;
|
||||||
if(event.getSide() == Side.SERVER)
|
battleManager = null;
|
||||||
{
|
config = new Config(logger);
|
||||||
battleManager = new BattleManager();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
battleManager = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// register packets
|
// register packets
|
||||||
PacketHandler.INSTANCE.registerMessage(
|
PacketHandler.INSTANCE.registerMessage(
|
||||||
|
@ -90,33 +82,17 @@ public class TurnBasedMinecraftMod
|
||||||
packetHandlerID++,
|
packetHandlerID++,
|
||||||
Side.CLIENT);
|
Side.CLIENT);
|
||||||
logger.debug("INIT");
|
logger.debug("INIT");
|
||||||
|
|
||||||
|
// register event handler(s)
|
||||||
|
MinecraftForge.EVENT_BUS.register(new AttackEventHandler());
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void postInit(FMLPostInitializationEvent event)
|
public void postInit(FMLPostInitializationEvent event)
|
||||||
{
|
{
|
||||||
if(battleManager != null)
|
|
||||||
{
|
|
||||||
config = new Config(logger);
|
|
||||||
}
|
|
||||||
logger.debug("POSTINIT");
|
logger.debug("POSTINIT");
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
|
||||||
public void entityAttacked(LivingAttackEvent event)
|
|
||||||
{
|
|
||||||
if(battleManager == null || event.getEntity().world.isRemote)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if(!event.getSource().getTrueSource().equals(attackingEntity) && battleManager.checkAttack(event))
|
|
||||||
{
|
|
||||||
logger.debug("Canceled LivingAttackEvent between " + attackingEntity + " and " + event.getEntity());
|
|
||||||
event.setCanceled(true);
|
|
||||||
}
|
|
||||||
attackingDamage = (int) event.getAmount();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BattleManager getBattleManager()
|
public static BattleManager getBattleManager()
|
||||||
{
|
{
|
||||||
return battleManager;
|
return battleManager;
|
|
@ -0,0 +1,31 @@
|
||||||
|
package com.seodisparate.TurnBasedMinecraft.common;
|
||||||
|
|
||||||
|
public class Utility
|
||||||
|
{
|
||||||
|
public static float yawDirection(double posX, double posZ, double targetX, double targetZ)
|
||||||
|
{
|
||||||
|
double radians = Math.atan2(targetZ - posZ, targetX - posX);
|
||||||
|
radians = (radians - Math.PI / 2.0);
|
||||||
|
if(radians < 0.0)
|
||||||
|
{
|
||||||
|
radians += Math.PI * 2.0;
|
||||||
|
}
|
||||||
|
return (float)(radians * 180.0 / Math.PI);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static float pitchDirection(double posX, double posY, double posZ, double targetX, double targetY, double targetZ)
|
||||||
|
{
|
||||||
|
double diffX = targetX - posX;
|
||||||
|
double diffY = targetY - posY;
|
||||||
|
double diffZ = targetZ - posZ;
|
||||||
|
double distance = Math.sqrt(diffX * diffX + diffZ * diffZ);
|
||||||
|
if(Math.abs(diffY) < 0.1)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return (float)(-Math.atan(diffY / distance) * 180.0 / Math.PI);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
package com.seodisparate.TurnBasedMinecraft.common.networking;
|
package com.seodisparate.TurnBasedMinecraft.common.networking;
|
||||||
|
|
||||||
import com.seodisparate.TurnBasedMinecraft.TurnBasedMinecraftMod;
|
|
||||||
import com.seodisparate.TurnBasedMinecraft.common.Battle;
|
import com.seodisparate.TurnBasedMinecraft.common.Battle;
|
||||||
|
import com.seodisparate.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||||
import com.seodisparate.TurnBasedMinecraft.common.Battle.Decision;
|
import com.seodisparate.TurnBasedMinecraft.common.Battle.Decision;
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
|
|
|
@ -3,7 +3,7 @@ package com.seodisparate.TurnBasedMinecraft.common.networking;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
import com.seodisparate.TurnBasedMinecraft.TurnBasedMinecraftMod;
|
import com.seodisparate.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
|
|
@ -3,9 +3,9 @@ package com.seodisparate.TurnBasedMinecraft.common.networking;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import com.seodisparate.TurnBasedMinecraft.TurnBasedMinecraftMod;
|
|
||||||
import com.seodisparate.TurnBasedMinecraft.client.BattleGui;
|
import com.seodisparate.TurnBasedMinecraft.client.BattleGui;
|
||||||
import com.seodisparate.TurnBasedMinecraft.common.Battle;
|
import com.seodisparate.TurnBasedMinecraft.common.Battle;
|
||||||
|
import com.seodisparate.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
@ -327,8 +327,11 @@ public class PacketBattleMessage implements IMessage
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TURN_END:
|
case TURN_END:
|
||||||
Minecraft.getMinecraft().ingameGUI.getChatGUI().printChatMessage(new TextComponentString(
|
if(TurnBasedMinecraftMod.currentBattle != null)
|
||||||
|
{
|
||||||
|
Minecraft.getMinecraft().ingameGUI.getChatGUI().printChatMessage(new TextComponentString(
|
||||||
"The turn ended!"));
|
"The turn ended!"));
|
||||||
|
}
|
||||||
if(TurnBasedMinecraftMod.currentBattleGui != null)
|
if(TurnBasedMinecraftMod.currentBattleGui != null)
|
||||||
{
|
{
|
||||||
TurnBasedMinecraftMod.currentBattleGui.turnEnd();
|
TurnBasedMinecraftMod.currentBattleGui.turnEnd();
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package com.seodisparate.TurnBasedMinecraft.common.networking;
|
package com.seodisparate.TurnBasedMinecraft.common.networking;
|
||||||
|
|
||||||
import com.seodisparate.TurnBasedMinecraft.TurnBasedMinecraftMod;
|
|
||||||
import com.seodisparate.TurnBasedMinecraft.common.Battle;
|
import com.seodisparate.TurnBasedMinecraft.common.Battle;
|
||||||
|
import com.seodisparate.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package com.seodisparate.TurnBasedMinecraft.common.networking;
|
package com.seodisparate.TurnBasedMinecraft.common.networking;
|
||||||
|
|
||||||
import com.seodisparate.TurnBasedMinecraft.TurnBasedMinecraftMod;
|
import com.seodisparate.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||||
|
|
||||||
import net.minecraftforge.fml.common.network.NetworkRegistry;
|
import net.minecraftforge.fml.common.network.NetworkRegistry;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper;
|
import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper;
|
||||||
|
|
Loading…
Reference in a new issue