Fixes, mod now works (still WIP)

TODO: Battles currently don't work in dimensions other than the
overworld.
This commit is contained in:
Stephen Seo 2019-11-28 16:32:34 +09:00
parent 4ddd0312e4
commit ac2a012bd3
11 changed files with 877 additions and 403 deletions

View file

@ -116,11 +116,11 @@ jar {
manifest { manifest {
attributes([ attributes([
"Specification-Title": "TurnBasedMinecraftMod", "Specification-Title": "TurnBasedMinecraftMod",
"Specification-Vendor": "TurnBasedMinecraftMod_SS", "Specification-Vendor": "TurnBasedMinecraftMod_BK",
"Specification-Version": "1", // We are version 1 of ourselves "Specification-Version": "1", // We are version 1 of ourselves
"Implementation-Title": project.name, "Implementation-Title": project.name,
"Implementation-Version": "${version}", "Implementation-Version": "${version}",
"Implementation-Vendor" :"TurnBasedMinecraftMod_SS", "Implementation-Vendor" :"TurnBasedMinecraftMod_BK",
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"),
"ContainedDeps": "javamp3-1.0.3.jar" "ContainedDeps": "javamp3-1.0.3.jar"
]) ])

View file

@ -10,7 +10,7 @@ import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraftforge.event.entity.living.LivingAttackEvent; import net.minecraftforge.event.entity.living.LivingAttackEvent;
import net.minecraftforge.event.entity.living.LivingSetAttackTargetEvent; import net.minecraftforge.event.entity.living.LivingSetAttackTargetEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.network.NetworkDirection; import net.minecraftforge.fml.network.PacketDistributor;
public class AttackEventHandler public class AttackEventHandler
{ {
@ -68,10 +68,9 @@ public class AttackEventHandler
BattleManager battleManager = proxy.getBattleManager(); BattleManager battleManager = proxy.getBattleManager();
// handle edit entity, pick entity via attack // handle edit entity, pick entity via attack
{ {
EditingInfo editingInfo = null;
if(event.getSource().getTrueSource() != null && event.getEntity() != null) if(event.getSource().getTrueSource() != null && event.getEntity() != null)
{ {
editingInfo = proxy.getEditingInfo(event.getSource().getTrueSource().getEntityId()); final EditingInfo editingInfo = proxy.getEditingInfo(event.getSource().getTrueSource().getEntityId());
if(editingInfo != null && editingInfo.isPendingEntitySelection) if(editingInfo != null && editingInfo.isPendingEntitySelection)
{ {
editingInfo.isPendingEntitySelection = false; editingInfo.isPendingEntitySelection = false;
@ -81,28 +80,18 @@ public class AttackEventHandler
if(!event.getEntity().hasCustomName()) if(!event.getEntity().hasCustomName())
{ {
TurnBasedMinecraftMod.logger.error("Cannot edit custom name from entity without custom name"); TurnBasedMinecraftMod.logger.error("Cannot edit custom name from entity without custom name");
TurnBasedMinecraftMod.getHandler().sendTo( TurnBasedMinecraftMod.getHandler().send(PacketDistributor.PLAYER.with(() -> (ServerPlayerEntity)editingInfo.editor), new PacketGeneralMessage("Cannot edit custom name from entity without custom name"));
new PacketGeneralMessage("Cannot edit custom name from entity without custom name"),
((ServerPlayerEntity)editingInfo.editor).connection.netManager,
NetworkDirection.PLAY_TO_CLIENT);
return; return;
} }
//editingInfo.entityInfo = config.getCustomEntityInfo(event.getEntity().getCustomNameTag()); editingInfo.entityInfo = config.getCustomEntityInfo(event.getEntity().getCustomName().getUnformattedComponentText());
editingInfo.entityInfo = config.getCustomEntityInfo(event.getEntity().getCustomName().getString());
if(editingInfo.entityInfo == null) if(editingInfo.entityInfo == null)
{ {
editingInfo.entityInfo = new EntityInfo(); editingInfo.entityInfo = new EntityInfo();
editingInfo.entityInfo.customName = event.getEntity().getCustomName().getString(); editingInfo.entityInfo.customName = event.getEntity().getCustomName().getString();
} }
TurnBasedMinecraftMod.getHandler().sendTo( TurnBasedMinecraftMod.getHandler().send(PacketDistributor.PLAYER.with(() -> (ServerPlayerEntity)editingInfo.editor), new PacketGeneralMessage("Editing custom name \"" + event.getEntity().getCustomName().getUnformattedComponentText() + "\""));
new PacketGeneralMessage("Editing custom name \"" + event.getEntity().getCustomName().getString() + "\""),
((ServerPlayerEntity)editingInfo.editor).connection.netManager,
NetworkDirection.PLAY_TO_CLIENT);
TurnBasedMinecraftMod.logger.info("Begin editing custom \"" + event.getEntity().getCustomName().getString() + "\""); TurnBasedMinecraftMod.logger.info("Begin editing custom \"" + event.getEntity().getCustomName().getString() + "\"");
TurnBasedMinecraftMod.getHandler().sendTo( TurnBasedMinecraftMod.getHandler().send(PacketDistributor.PLAYER.with(() -> (ServerPlayerEntity)editingInfo.editor), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo),
((ServerPlayerEntity)editingInfo.editor).connection.netManager,
NetworkDirection.PLAY_TO_CLIENT);
} }
else else
{ {
@ -116,15 +105,9 @@ public class AttackEventHandler
{ {
editingInfo.entityInfo = editingInfo.entityInfo.clone(); editingInfo.entityInfo = editingInfo.entityInfo.clone();
} }
TurnBasedMinecraftMod.getHandler().sendTo( TurnBasedMinecraftMod.getHandler().send(PacketDistributor.PLAYER.with(() -> (ServerPlayerEntity)editingInfo.editor), new PacketGeneralMessage("Editing entity \"" + editingInfo.entityInfo.classType.getName() + "\""));
new PacketGeneralMessage("Editing entity \"" + editingInfo.entityInfo.classType.getName() + "\""),
((ServerPlayerEntity)editingInfo.editor).connection.netManager,
NetworkDirection.PLAY_TO_CLIENT);
TurnBasedMinecraftMod.logger.info("Begin editing \"" + editingInfo.entityInfo.classType.getName() + "\""); TurnBasedMinecraftMod.logger.info("Begin editing \"" + editingInfo.entityInfo.classType.getName() + "\"");
TurnBasedMinecraftMod.getHandler().sendTo( TurnBasedMinecraftMod.getHandler().send(PacketDistributor.PLAYER.with(() -> (ServerPlayerEntity)editingInfo.editor), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo),
((ServerPlayerEntity)editingInfo.editor).connection.netManager,
NetworkDirection.PLAY_TO_CLIENT);
} }
return; return;
} }
@ -132,6 +115,7 @@ public class AttackEventHandler
} }
if(event.getEntity() != null && event.getSource().getTrueSource() != null && (battleManager.isRecentlyLeftBattle(event.getEntity().getEntityId()) || battleManager.isRecentlyLeftBattle(event.getSource().getTrueSource().getEntityId()))) if(event.getEntity() != null && event.getSource().getTrueSource() != null && (battleManager.isRecentlyLeftBattle(event.getEntity().getEntityId()) || battleManager.isRecentlyLeftBattle(event.getSource().getTrueSource().getEntityId())))
{ {
// TurnBasedMinecraftMod.logger.debug("Canceled attack");
event.setCanceled(true); event.setCanceled(true);
return; return;
} }
@ -143,13 +127,12 @@ public class AttackEventHandler
&& !config.getBattleIgnoringPlayers().contains(event.getEntity().getEntityId()) && !config.getBattleIgnoringPlayers().contains(event.getEntity().getEntityId())
&& battleManager.checkAttack(event)) && battleManager.checkAttack(event))
{ {
// TurnBasedMinecraftMod.logger.debug("Canceled LivingAttackEvent between " + TurnBasedMinecraftMod.commonProxy.getAttackingEntity() + " and " + event.getEntity()); // TurnBasedMinecraftMod.logger.debug("Canceled LivingAttackEvent between " + TurnBasedMinecraftMod.proxy.getAttackingEntity() + " and " + event.getEntity());
event.setCanceled(true); event.setCanceled(true);
} } else {
else
{
// TurnBasedMinecraftMod.logger.debug("Did not cancel attack"); // TurnBasedMinecraftMod.logger.debug("Did not cancel attack");
} }
if(TurnBasedMinecraftMod.proxy.getAttackingDamage() < (int) event.getAmount()) if(TurnBasedMinecraftMod.proxy.getAttackingDamage() < (int) event.getAmount())
{ {
TurnBasedMinecraftMod.proxy.setAttackingDamage((int) event.getAmount()); TurnBasedMinecraftMod.proxy.setAttackingDamage((int) event.getAmount());

View file

@ -128,7 +128,12 @@ public class Battle
{ {
for(Entity e : sideA) for(Entity e : sideA)
{ {
EntityInfo entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getCustomEntityInfoReference(e.getCustomName().getUnformattedComponentText()); EntityInfo entityInfo;
try {
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getCustomEntityInfoReference(e.getCustomName().getUnformattedComponentText());
} catch(NullPointerException exception) {
entityInfo = null;
}
if(entityInfo == null) if(entityInfo == null)
{ {
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e); entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e);
@ -161,7 +166,12 @@ public class Battle
{ {
for(Entity e : sideB) for(Entity e : sideB)
{ {
EntityInfo entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getCustomEntityInfoReference(e.getCustomName().getUnformattedComponentText()); EntityInfo entityInfo;
try {
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getCustomEntityInfoReference(e.getCustomName().getUnformattedComponentText());
} catch(NullPointerException exception) {
entityInfo = null;
}
if(entityInfo == null) if(entityInfo == null)
{ {
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e); entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e);
@ -296,7 +306,12 @@ public class Battle
public void addCombatantToSideA(Entity e) public void addCombatantToSideA(Entity e)
{ {
EntityInfo entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getCustomEntityInfoReference(e.getCustomName().getUnformattedComponentText()); EntityInfo entityInfo;
try {
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getCustomEntityInfoReference(e.getCustomName().getUnformattedComponentText());
} catch(NullPointerException exception) {
entityInfo = null;
}
if(entityInfo == null) if(entityInfo == null)
{ {
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e); entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e);
@ -357,7 +372,12 @@ public class Battle
public void addCombatantToSideB(Entity e) public void addCombatantToSideB(Entity e)
{ {
EntityInfo entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getCustomEntityInfoReference(e.getCustomName().getUnformattedComponentText()); EntityInfo entityInfo;
try {
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getCustomEntityInfoReference(e.getCustomName().getUnformattedComponentText());
} catch(NullPointerException exception) {
entityInfo = null;
}
if(entityInfo == null) if(entityInfo == null)
{ {
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e); entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e);

View file

@ -46,9 +46,9 @@ public class BattleManager
public boolean checkAttack(final LivingAttackEvent event) public boolean checkAttack(final LivingAttackEvent event)
{ {
Config config = TurnBasedMinecraftMod.proxy.getConfig(); Config config = TurnBasedMinecraftMod.proxy.getConfig();
// verify that both entities are EntityPlayer and not in creative or has a corresponding EntityInfo
String receiverClassName = event.getEntity().getClass().getName(); String receiverClassName = event.getEntity().getClass().getName();
String receiverCustomName; String receiverCustomName;
try { try {
receiverCustomName = event.getEntity().getCustomName().getUnformattedComponentText(); receiverCustomName = event.getEntity().getCustomName().getUnformattedComponentText();
} catch (NullPointerException e) { } catch (NullPointerException e) {
@ -67,9 +67,13 @@ public class BattleManager
attackerCustomName = null; attackerCustomName = null;
} }
if(!((event.getEntity() instanceof PlayerEntity && !((PlayerEntity)event.getEntity()).isCreative()) || (config.getEntityInfoReference(receiverClassName) != null || config.getCustomEntityInfoReference(receiverCustomName) != null)) // verify that both entities are EntityPlayer and not in creative or has a corresponding EntityInfo
|| !((event.getSource().getTrueSource() instanceof PlayerEntity && !((PlayerEntity)event.getSource().getTrueSource()).isCreative()) || (config.getEntityInfoReference(attackerClassName) != null || config.getCustomEntityInfoReference(attackerCustomName) != null))) if(!((event.getEntity() instanceof PlayerEntity && !((PlayerEntity)event.getEntity()).isCreative())
|| (config.getEntityInfoReference(receiverClassName) != null || config.getCustomEntityInfoReference(receiverCustomName) != null))
|| !((event.getSource().getTrueSource() instanceof PlayerEntity && !((PlayerEntity)event.getSource().getTrueSource()).isCreative())
|| (config.getEntityInfoReference(attackerClassName) != null || config.getCustomEntityInfoReference(attackerCustomName) != null)))
{ {
logger.debug("BattleManager: Failed first check, attacker is \"" + attackerClassName + "\", defender is \"" + receiverClassName + "\"");
return false; return false;
} }

View file

@ -3,10 +3,10 @@ package com.burnedkirby.TurnBasedMinecraft.common;
import java.util.Comparator; import java.util.Comparator;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.init.MobEffects; import net.minecraft.potion.EffectInstance;
import net.minecraft.potion.PotionEffect; import net.minecraft.potion.Effects;
public class Combatant public class Combatant
{ {
@ -50,18 +50,18 @@ public class Combatant
@Override @Override
public int compare(Combatant c0, Combatant c1) public int compare(Combatant c0, Combatant c1)
{ {
if(c0.entity instanceof EntityPlayer && c0.recalcSpeedOnCompare) if(c0.entity instanceof PlayerEntity && c0.recalcSpeedOnCompare)
{ {
EntityLivingBase c0Entity = (EntityLivingBase)c0.entity; LivingEntity c0Entity = (LivingEntity)c0.entity;
boolean isHaste = false; boolean isHaste = false;
boolean isSlow = false; boolean isSlow = false;
for(PotionEffect e : c0Entity.getActivePotionEffects()) for(EffectInstance e : c0Entity.getActivePotionEffects())
{ {
if(e.getEffectName().equals(MobEffects.HASTE.getName()) || e.getEffectName().equals(MobEffects.SPEED.getName())) if(e.getEffectName().equals(Effects.HASTE.getName()) || e.getEffectName().equals(Effects.SPEED.getName()))
{ {
isHaste = true; isHaste = true;
} }
else if(e.getEffectName().equals(MobEffects.SLOWNESS.getName())) else if(e.getEffectName().equals(Effects.SLOWNESS.getName()))
{ {
isSlow = true; isSlow = true;
} }
@ -84,18 +84,18 @@ public class Combatant
} }
} }
if(c1.entity instanceof EntityPlayer && c1.recalcSpeedOnCompare) if(c1.entity instanceof PlayerEntity && c1.recalcSpeedOnCompare)
{ {
EntityLivingBase c1Entity = (EntityLivingBase)c1.entity; LivingEntity c1Entity = (LivingEntity)c1.entity;
boolean isHaste = false; boolean isHaste = false;
boolean isSlow = false; boolean isSlow = false;
for(PotionEffect e : c1Entity.getActivePotionEffects()) for(EffectInstance e : c1Entity.getActivePotionEffects())
{ {
if(e.getEffectName().equals(MobEffects.HASTE.getName())) if(e.getEffectName().equals(Effects.HASTE.getName()))
{ {
isHaste = true; isHaste = true;
} }
else if(e.getEffectName().equals(MobEffects.SLOWNESS.getName())) else if(e.getEffectName().equals(Effects.SLOWNESS.getName()))
{ {
isSlow = true; isSlow = true;
} }

View file

@ -4,12 +4,11 @@ import java.util.*;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.ITextComponent;
import net.minecraftforge.common.MinecraftForge; import net.minecraft.world.dimension.DimensionType;
import net.minecraftforge.fml.server.ServerLifecycleHooks;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraftforge.fml.common.FMLCommonHandler;
public class CommonProxy public class CommonProxy
{ {
@ -26,6 +25,7 @@ public class CommonProxy
attackerViaBow = new HashSet<AttackerViaBow>(); attackerViaBow = new HashSet<AttackerViaBow>();
editingPlayers = new Hashtable<Integer, EditingInfo>(); editingPlayers = new Hashtable<Integer, EditingInfo>();
initializeClient(); initializeClient();
logger.debug("Init proxy for com_burnedkirby_turnbasedminecraft");
} }
protected void initializeClient() {} protected void initializeClient() {}
@ -69,6 +69,7 @@ public class CommonProxy
{ {
config = new Config(logger); config = new Config(logger);
postInitClient(); postInitClient();
logger.debug("postInit proxy for com_burnedkirby_turnbasedminecraft");
} }
protected void postInitClient() {} protected void postInitClient() {}
@ -94,7 +95,8 @@ public class CommonProxy
public Entity getEntityByID(int id) public Entity getEntityByID(int id)
{ {
return FMLCommonHandler.instance().getMinecraftServerInstance().getEntityWorld().getEntityByID(id); // TODO validate dimension of entity
return ServerLifecycleHooks.getCurrentServer().getWorld(DimensionType.OVERWORLD).getEntityByID(id);
} }
public final boolean isServerRunning() public final boolean isServerRunning()

View file

@ -57,6 +57,16 @@ public class Config
musicSillyTypes = new HashSet<String>(); musicSillyTypes = new HashSet<String>();
battleIgnoringPlayers = new HashSet<Integer>(); battleIgnoringPlayers = new HashSet<Integer>();
{
File confPath = new File(TurnBasedMinecraftMod.CONFIG_DIRECTORY);
if(!confPath.exists()) {
if(!confPath.mkdirs()) {
logger.error("Failed to create config dir \"" + TurnBasedMinecraftMod.CONFIG_DIRECTORY + "\"");
return;
}
}
}
writeDefaultConfig(getClass().getResourceAsStream(TurnBasedMinecraftMod.CONFIG_INTERNAL_PATH)); writeDefaultConfig(getClass().getResourceAsStream(TurnBasedMinecraftMod.CONFIG_INTERNAL_PATH));
int internalVersion = getConfigFileVersion(new File(TurnBasedMinecraftMod.DEFAULT_CONFIG_FILE_PATH)); int internalVersion = getConfigFileVersion(new File(TurnBasedMinecraftMod.DEFAULT_CONFIG_FILE_PATH));
@ -776,6 +786,7 @@ public class Config
return false; return false;
} }
boolean saved = false;
try { try {
if (eInfo.classType != null || !eInfo.customName.isEmpty()) { if (eInfo.classType != null || !eInfo.customName.isEmpty()) {
for (com.electronwill.nightconfig.core.Config entity : entities) { for (com.electronwill.nightconfig.core.Config entity : entities) {
@ -795,6 +806,7 @@ public class Config
entity.set("decision_attack_probability", eInfo.decisionAttack); entity.set("decision_attack_probability", eInfo.decisionAttack);
entity.set("decision_defend_probability", eInfo.decisionDefend); entity.set("decision_defend_probability", eInfo.decisionDefend);
entity.set("decision_flee_probability", eInfo.decisionFlee); entity.set("decision_flee_probability", eInfo.decisionFlee);
saved = true;
break; break;
} }
} }
@ -812,6 +824,19 @@ public class Config
conf.save(); conf.save();
conf.close(); conf.close();
if(!saved) {
logger.warn("Failed to save \"" + eInfo.classType.getName() + "\"");
return false;
}
if(eInfo.classType != null) {
entityInfoMap.put(eInfo.classType.getName(), eInfo);
} else if(!eInfo.customName.isEmpty()){
customEntityInfoMap.put(eInfo.customName, eInfo);
} else {
logger.warn("Failed to update entity info in memory");
}
return true; return true;
} }

View file

@ -4,6 +4,8 @@ import com.burnedkirby.TurnBasedMinecraft.client.ClientProxy;
import com.burnedkirby.TurnBasedMinecraft.common.networking.*; import com.burnedkirby.TurnBasedMinecraft.common.networking.*;
import com.mojang.brigadier.LiteralMessage; import com.mojang.brigadier.LiteralMessage;
import com.mojang.brigadier.Message; import com.mojang.brigadier.Message;
import com.mojang.brigadier.arguments.BoolArgumentType;
import com.mojang.brigadier.arguments.IntegerArgumentType;
import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.brigadier.exceptions.SimpleCommandExceptionType; import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
@ -21,24 +23,25 @@ import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLDedicatedServerSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLDedicatedServerSetupEvent;
import net.minecraftforge.fml.event.server.FMLServerStartingEvent; import net.minecraftforge.fml.event.server.FMLServerStartingEvent;
import net.minecraftforge.fml.event.server.FMLServerStoppingEvent; import net.minecraftforge.fml.event.server.FMLServerStoppingEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.fml.network.NetworkRegistry; import net.minecraftforge.fml.network.NetworkRegistry;
import net.minecraftforge.fml.network.PacketDistributor; import net.minecraftforge.fml.network.PacketDistributor;
import net.minecraftforge.fml.network.simple.SimpleChannel; import net.minecraftforge.fml.network.simple.SimpleChannel;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
@Mod(value = TurnBasedMinecraftMod.MODID) @Mod(TurnBasedMinecraftMod.MODID)
public class TurnBasedMinecraftMod public class TurnBasedMinecraftMod
{ {
public static final String MODID = "com.burnedkirby.turnbasedminecraft"; public static final String MODID = "com_burnedkirby_turnbasedminecraft";
public static final String NAME = "Turn Based Minecraft Mod"; public static final String NAME = "Turn Based Minecraft Mod";
public static final String VERSION = "1.8"; public static final String VERSION = "1.9";
public static final String CONFIG_FILENAME = "TBM_Config.toml"; public static final String CONFIG_FILENAME = "TBM_Config.toml";
public static final String DEFAULT_CONFIG_FILENAME = "TBM_Config_DEFAULT.toml"; public static final String DEFAULT_CONFIG_FILENAME = "TBM_Config_DEFAULT.toml";
public static final String CONFIG_DIRECTORY = "config/TurnBasedMinecraft/"; public static final String CONFIG_DIRECTORY = "config/TurnBasedMinecraft/";
public static final String CONFIG_FILE_PATH = CONFIG_DIRECTORY + CONFIG_FILENAME; public static final String CONFIG_FILE_PATH = CONFIG_DIRECTORY + CONFIG_FILENAME;
public static final String DEFAULT_CONFIG_FILE_PATH = CONFIG_DIRECTORY + DEFAULT_CONFIG_FILENAME; public static final String DEFAULT_CONFIG_FILE_PATH = CONFIG_DIRECTORY + DEFAULT_CONFIG_FILENAME;
public static final String CONFIG_INTERNAL_PATH = "/assets/TurnBasedMinecraft/" + CONFIG_FILENAME; public static final String CONFIG_INTERNAL_PATH = "/assets/com_burnedkirby_turnbasedminecraft/" + CONFIG_FILENAME;
public static final String MUSIC_ROOT = CONFIG_DIRECTORY + "Music/"; public static final String MUSIC_ROOT = CONFIG_DIRECTORY + "Music/";
public static final String MUSIC_SILLY = MUSIC_ROOT + "silly/"; public static final String MUSIC_SILLY = MUSIC_ROOT + "silly/";
public static final String MUSIC_BATTLE = MUSIC_ROOT + "battle/"; public static final String MUSIC_BATTLE = MUSIC_ROOT + "battle/";
@ -63,12 +66,19 @@ public class TurnBasedMinecraftMod
public static CommonProxy proxy; public static CommonProxy proxy;
@SubscribeEvent public TurnBasedMinecraftMod() {
public void firstInit(FMLCommonSetupEvent event) FMLJavaModLoadingContext.get().getModEventBus().addListener(this::firstInit);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::secondInitClient);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::secondInitServer);
MinecraftForge.EVENT_BUS.register(this);
}
private void firstInit(final FMLCommonSetupEvent event)
{ {
proxy = DistExecutor.runForDist(()->()->new ClientProxy(), ()->()->new CommonProxy()); proxy = DistExecutor.runForDist(()->()->new ClientProxy(), ()->()->new CommonProxy());
proxy.initialize();
proxy.setLogger(logger); proxy.setLogger(logger);
proxy.initialize();
// register packets // register packets
int packetHandlerID = 0; int packetHandlerID = 0;
@ -112,16 +122,16 @@ public class TurnBasedMinecraftMod
// register event handler(s) // register event handler(s)
MinecraftForge.EVENT_BUS.register(new AttackEventHandler()); MinecraftForge.EVENT_BUS.register(new AttackEventHandler());
MinecraftForge.EVENT_BUS.register(new PlayerJoinEventHandler()); MinecraftForge.EVENT_BUS.register(new PlayerJoinEventHandler());
logger.debug("Init com_burnedkirby_turnbasedminecraft");
} }
@SubscribeEvent private void secondInitClient(final FMLClientSetupEvent event)
public void secondInitClient(FMLClientSetupEvent event)
{ {
proxy.postInit(); proxy.postInit();
} }
@SubscribeEvent private void secondInitServer(final FMLDedicatedServerSetupEvent event)
public void secondInitServer(FMLDedicatedServerSetupEvent event)
{ {
proxy.postInit(); proxy.postInit();
} }
@ -220,109 +230,65 @@ public class TurnBasedMinecraftMod
} else if(editingInfo != null) { } else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY)); getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else { } else {
proxy.setEditingPlayer(c.getSource().asPlayer()); proxy.setEditingPlayer(player);
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY)); getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
logger.info("Begin editing TBM Entity for player \"" + player.getDisplayName().getUnformattedComponentText() + "\""); logger.info("Begin editing TBM Entity for player \"" + player.getDisplayName().getUnformattedComponentText() + "\" (\"" + c.getSource().getName() + "\")");
} }
return 1; return 1;
}) })
.then(Commands.argument("action", StringArgumentType.word()) .then(Commands.literal("finish")
.executes(c -> { .executes(c -> {
String action = StringArgumentType.getString(c, "action").toLowerCase();
ServerPlayerEntity player = c.getSource().asPlayer(); ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId()); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
if(editingInfo != null && !editingInfo.isPendingEntitySelection) { if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
if (action.equals("finish")) { if(!proxy.getConfig().editEntityEntry(editingInfo.entityInfo)) {
if (!proxy.getConfig().editEntityEntry(editingInfo.entityInfo)) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketGeneralMessage("An error occurred while attempting to save an entry to the config")); getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketGeneralMessage("An error occurred while attempting to save an entry to the config"));
proxy.removeEditingInfo(player.getEntityId()); proxy.removeEditingInfo(player.getEntityId());
} else { } else {
proxy.removeEditingInfo(player.getEntityId()); proxy.removeEditingInfo(player.getEntityId());
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketGeneralMessage("Entity info saved in config and loaded.")); getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketGeneralMessage("Entity info saved in config and loaded."));
} }
} else if (action.equals("cancel")) {
proxy.removeEditingInfo(player.getEntityId());
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketGeneralMessage("Cancelled editing entry."));
} else if (action.equals("edit")) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} else {
Message exceptionMessage = new LiteralMessage("Invalid action for tbm-edit");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
} else if(editingInfo != null) { } else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY)); getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
if(action.equals("custom")) {
proxy.setEditingPlayer(player);
proxy.getEditingInfo(player.getEntityId()).isEditingCustomName = true;
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
logger.info("Begin editing custom TBM Entity for player \"" + player.getDisplayName().getUnformattedComponentText() + "\'");
} else { } else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\")."); Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage); throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
} }
return 1;
}))
.then(Commands.literal("cancel")
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
if(editingInfo != null) {
proxy.removeEditingInfo(player.getEntityId());
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketGeneralMessage("Cancelled editing entry."));
} }
return 1; return 1;
}) }))
.then(Commands.argument("category", StringArgumentType.word()) .then(Commands.literal("custom")
.executes(c -> { .executes(c -> {
String action = StringArgumentType.getString(c, "action").toLowerCase();
String category = StringArgumentType.getString(c, "category");
ServerPlayerEntity player = c.getSource().asPlayer(); ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId()); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
if(editingInfo != null && !editingInfo.isPendingEntitySelection) { if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
if (action.equals("edit")) { Message exceptionMessage = new LiteralMessage("Invalid action for tbm-edit");
switch (category) {
case "ignoreBattle":
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_IGNORE_BATTLE));
break;
case "attackPower":
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_POWER));
break;
case "attackProbability":
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_PROBABILITY));
break;
case "attackVariance":
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_VARIANCE));
break;
case "attackEffect":
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_EFFECT));
break;
case "attackEffectProbability":
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_EFFECT_PROBABILITY));
break;
case "defenseDamage":
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DEFENSE_DAMAGE));
break;
case "defenseDamageProbability":
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DEFENSE_DAMAGE_PROBABILITY));
break;
case "evasion":
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_EVASION));
break;
case "speed":
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_SPEED));
break;
case "category":
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_CATEGORY));
break;
case "decisionAttack":
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DECISION_ATTACK));
break;
case "decisionDefend":
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DECISION_DEFEND));
break;
case "decisionFlee":
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DECISION_FLEE));
break;
default:
Message exceptionMessage = new LiteralMessage("Invalid argument for \"/tbm-edit edit <category>\"");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage); throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
} } else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else { } else {
Message exceptionMessage = new LiteralMessage("Invalid argument"); proxy.setEditingPlayer(player);
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage); proxy.getEditingInfo(player.getEntityId()).isEditingCustomName = true;
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
logger.info("Begin editing custom TBM Entity for player \"" + player.getDisplayName().getUnformattedComponentText() + "\" (\"" + c.getSource().getName() + "\")");
} }
return 1;
}))
.then(Commands.literal("edit")
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} else if(editingInfo != null){ } else if(editingInfo != null){
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY)); getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else { } else {
@ -331,190 +297,12 @@ public class TurnBasedMinecraftMod
} }
return 1; return 1;
}) })
.then(Commands.argument("value", StringArgumentType.greedyString())) .then(Commands.literal("ignoreBattle")
.executes(c -> { .executes(c -> {
String action = StringArgumentType.getString(c, "action").toLowerCase();
String category = StringArgumentType.getString(c, "category");
String value = StringArgumentType.getString(c, "value").toLowerCase();
ServerPlayerEntity player = c.getSource().asPlayer(); ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId()); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
if(editingInfo != null && !editingInfo.isPendingEntitySelection) { if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
if (action.equals("edit")) { getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_IGNORE_BATTLE));
switch (category) {
case "ignoreBattle":
if (value.equals("true")) {
editingInfo.entityInfo.ignoreBattle = true;
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} else if (value.equals("false")) {
editingInfo.entityInfo.ignoreBattle = false;
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} else {
Message exceptionMessage = new LiteralMessage("Invalid value for \"/tbm-edit edit ignoreBattle <boolean>\"");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
break;
case "attackPower":
try {
editingInfo.entityInfo.attackPower = Integer.parseInt(value);
if (editingInfo.entityInfo.attackPower < 0) {
editingInfo.entityInfo.attackPower = 0;
}
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} catch (NumberFormatException e) {
Message exceptionMessage = new LiteralMessage("Invalid value for \"/tbm-edit edit attackPower <integer>\"");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
break;
case "attackProbability":
try {
editingInfo.entityInfo.attackProbability = Integer.parseInt(value);
if (editingInfo.entityInfo.attackProbability < 0) {
editingInfo.entityInfo.attackProbability = 0;
} else if (editingInfo.entityInfo.attackProbability > 100) {
editingInfo.entityInfo.attackProbability = 100;
}
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} catch (NumberFormatException e) {
Message exceptionMessage = new LiteralMessage("Invalid value for \"/tbm-edit edit attackProbability <percentage-integer>\"");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
break;
case "attackVariance":
try {
editingInfo.entityInfo.attackVariance = Integer.parseInt(value);
if (editingInfo.entityInfo.attackVariance < 0) {
editingInfo.entityInfo.attackVariance = 0;
}
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} catch (NumberFormatException e) {
Message exceptionMessage = new LiteralMessage("Invalid value for \"/tbm-edit edit attackVariance <integer>\"");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
break;
case "attackEffect":
editingInfo.entityInfo.attackEffect = EntityInfo.Effect.fromString(value);
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
break;
case "attackEffectProbability":
try {
editingInfo.entityInfo.attackEffectProbability = Integer.parseInt(value);
if (editingInfo.entityInfo.attackEffectProbability < 0) {
editingInfo.entityInfo.attackEffectProbability = 0;
} else if (editingInfo.entityInfo.attackEffectProbability > 100) {
editingInfo.entityInfo.attackEffectProbability = 100;
}
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} catch (NumberFormatException e) {
Message exceptionMessage = new LiteralMessage("Invalid value for \"/tbm-edit edit attackEffectProbability <percentage-integer>\"");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
break;
case "defenseDamage":
try {
editingInfo.entityInfo.defenseDamage = Integer.parseInt(value);
if (editingInfo.entityInfo.defenseDamage < 0) {
editingInfo.entityInfo.defenseDamage = 0;
}
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} catch (NumberFormatException e) {
Message exceptionMessage = new LiteralMessage("Invalid value for \"/tbm-edit edit defenseDamage <integer>\"");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
break;
case "defenseDamageProbability":
try {
editingInfo.entityInfo.defenseDamageProbability = Integer.parseInt(value);
if (editingInfo.entityInfo.defenseDamageProbability < 0) {
editingInfo.entityInfo.defenseDamageProbability = 0;
} else if (editingInfo.entityInfo.defenseDamageProbability > 100) {
editingInfo.entityInfo.defenseDamageProbability = 100;
}
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} catch (NumberFormatException e) {
Message exceptionMessage = new LiteralMessage("Invalid value for \"/tbm-edit edit defenseDamageProbability <percentage-integer>\"");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
break;
case "evasion":
try {
editingInfo.entityInfo.evasion = Integer.parseInt(value);
if (editingInfo.entityInfo.evasion < 0) {
editingInfo.entityInfo.evasion = 0;
} else if (editingInfo.entityInfo.evasion > 100) {
editingInfo.entityInfo.evasion = 100;
}
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} catch (NumberFormatException e) {
Message exceptionMessage = new LiteralMessage("Invalid value for \"/tbm-edit edit evasion <percentage-integer>\"");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
break;
case "speed":
try {
editingInfo.entityInfo.speed = Integer.parseInt(value);
if (editingInfo.entityInfo.speed < 0) {
editingInfo.entityInfo.speed = 0;
}
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} catch (NumberFormatException e) {
Message exceptionMessage = new LiteralMessage("Invalid value for \"/tbm-edit edit speed <integer>\"");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
break;
case "category":
editingInfo.entityInfo.category = value;
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
break;
case "decisionAttack":
try {
editingInfo.entityInfo.decisionAttack = Integer.parseInt(value);
if (editingInfo.entityInfo.decisionAttack < 0) {
editingInfo.entityInfo.decisionAttack = 0;
} else if (editingInfo.entityInfo.decisionAttack > 100) {
editingInfo.entityInfo.decisionAttack = 100;
}
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} catch (NumberFormatException e) {
Message exceptionMessage = new LiteralMessage("Invalid value for \"/tbm-edit edit decisionAttack <percentage-integer>\"");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
break;
case "decisionDefend":
try {
editingInfo.entityInfo.decisionDefend = Integer.parseInt(value);
if (editingInfo.entityInfo.decisionDefend < 0) {
editingInfo.entityInfo.decisionDefend = 0;
} else if (editingInfo.entityInfo.decisionDefend > 100) {
editingInfo.entityInfo.decisionDefend = 100;
}
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} catch (NumberFormatException e) {
Message exceptionMessage = new LiteralMessage("Invalid value for \"/tbm-edit edit decisionDefend <percentage-integer>\"");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
break;
case "decisionFlee":
try {
editingInfo.entityInfo.decisionFlee = Integer.parseInt(value);
if (editingInfo.entityInfo.decisionFlee < 0) {
editingInfo.entityInfo.decisionFlee = 0;
} else if (editingInfo.entityInfo.decisionFlee > 100) {
editingInfo.entityInfo.decisionFlee = 100;
}
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} catch (NumberFormatException e) {
Message exceptionMessage = new LiteralMessage("Invalid value for \"/tbm-edit edit decisionFlee <percentage-integer>\"");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
break;
default:
Message exceptionMessage = new LiteralMessage("Invalid category for \"/tbm-edit edit <category> <value>\"");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
} else {
Message exceptionMessage = new LiteralMessage("Invalid args for \"/tbm-edit <args...>\"");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
} else if(editingInfo != null) { } else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY)); getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else { } else {
@ -523,7 +311,469 @@ public class TurnBasedMinecraftMod
} }
return 1; return 1;
}) })
)) .then(Commands.argument("ignoreBattle", BoolArgumentType.bool())
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
boolean ignoreBattle = BoolArgumentType.getBool(c, "ignoreBattle");
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
editingInfo.entityInfo.ignoreBattle = ignoreBattle;
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
}))
)
.then(Commands.literal("attackPower")
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_POWER));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
})
.then(Commands.argument("attackPower", IntegerArgumentType.integer())
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
int attackPower = IntegerArgumentType.getInteger(c, "attackPower");
if(attackPower < 0) {
attackPower = 0;
}
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
editingInfo.entityInfo.attackPower = attackPower;
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
}))
)
.then(Commands.literal("attackProbability")
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_PROBABILITY));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
})
.then(Commands.argument("attackProbability", IntegerArgumentType.integer())
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
int attackProbability = IntegerArgumentType.getInteger(c, "attackProbability");
if(attackProbability < 0) {
attackProbability = 0;
} else if(attackProbability > 100) {
attackProbability = 100;
}
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
editingInfo.entityInfo.attackProbability = attackProbability;
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
}))
)
.then(Commands.literal("attackVariance")
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_VARIANCE));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
})
.then(Commands.argument("attackVariance", IntegerArgumentType.integer())
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
int attackVariance = IntegerArgumentType.getInteger(c, "attackVariance");
if(attackVariance < 0) {
attackVariance = 0;
}
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
editingInfo.entityInfo.attackVariance = attackVariance;
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
}))
)
.then(Commands.literal("attackEffect")
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_EFFECT));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
})
.then(Commands.argument("attackEffect", StringArgumentType.word())
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
EntityInfo.Effect effect = EntityInfo.Effect.fromString(StringArgumentType.getString(c, "attackEffect"));
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
editingInfo.entityInfo.attackEffect = effect;
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
}))
)
.then(Commands.literal("attackEffectProbability")
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_EFFECT_PROBABILITY));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
})
.then(Commands.argument("attackEffectProbability", IntegerArgumentType.integer())
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
int attackEffectProbability = IntegerArgumentType.getInteger(c, "attackEffectProbability");
if(attackEffectProbability < 0) {
attackEffectProbability = 0;
} else if(attackEffectProbability > 100) {
attackEffectProbability = 100;
}
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
editingInfo.entityInfo.attackEffectProbability = attackEffectProbability;
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
}))
)
.then(Commands.literal("defenseDamage")
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DEFENSE_DAMAGE));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
})
.then(Commands.argument("defenseDamage", IntegerArgumentType.integer())
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
int defenseDamage = IntegerArgumentType.getInteger(c, "defenseDamage");
if(defenseDamage < 0) {
defenseDamage = 0;
}
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
editingInfo.entityInfo.defenseDamage = defenseDamage;
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
}))
)
.then(Commands.literal("defenseDamageProbability")
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DEFENSE_DAMAGE_PROBABILITY));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
})
.then(Commands.argument("defenseDamageProbability", IntegerArgumentType.integer())
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
int defenseDamageProbability = IntegerArgumentType.getInteger(c, "defenseDamageProbability");
if(defenseDamageProbability < 0) {
defenseDamageProbability = 0;
} else if(defenseDamageProbability > 100) {
defenseDamageProbability = 100;
}
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
editingInfo.entityInfo.defenseDamageProbability = defenseDamageProbability;
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
}))
)
.then(Commands.literal("evasion")
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_EVASION));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
})
.then(Commands.argument("evasion", IntegerArgumentType.integer())
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
int evasion = IntegerArgumentType.getInteger(c, "evasion");
if(evasion < 0) {
evasion = 0;
} else if(evasion > 100) {
evasion = 100;
}
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
editingInfo.entityInfo.evasion = evasion;
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
}))
)
.then(Commands.literal("speed")
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_SPEED));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
})
.then(Commands.argument("speed", IntegerArgumentType.integer())
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
int speed = IntegerArgumentType.getInteger(c, "speed");
if(speed < 0) {
speed = 0;
}
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
editingInfo.entityInfo.speed = speed;
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
}))
)
.then(Commands.literal("category")
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_CATEGORY));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
})
.then(Commands.argument("category", StringArgumentType.word())
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
String category = StringArgumentType.getString(c, "category");
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
editingInfo.entityInfo.category = category;
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
}))
)
.then(Commands.literal("decisionAttack")
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DECISION_ATTACK));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
})
.then(Commands.argument("decisionAttack", IntegerArgumentType.integer())
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
int decisionAttack = IntegerArgumentType.getInteger(c, "decisionAttack");
if(decisionAttack < 0) {
decisionAttack = 0;
} else if(decisionAttack > 100) {
decisionAttack = 100;
}
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
editingInfo.entityInfo.decisionAttack = decisionAttack;
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
}))
)
.then(Commands.literal("decisionDefend")
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DECISION_DEFEND));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
})
.then(Commands.argument("decisionDefend", IntegerArgumentType.integer())
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
int decisionDefend = IntegerArgumentType.getInteger(c, "decisionDefend");
if(decisionDefend < 0) {
decisionDefend = 0;
} else if(decisionDefend > 100) {
decisionDefend = 100;
}
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
editingInfo.entityInfo.decisionDefend = decisionDefend;
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
}))
)
.then(Commands.literal("decisionFlee")
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DECISION_FLEE));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
})
.then(Commands.argument("decisionFlee", IntegerArgumentType.integer())
.executes(c -> {
ServerPlayerEntity player = c.getSource().asPlayer();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getEntityId());
int decisionFlee = IntegerArgumentType.getInteger(c, "decisionFlee");
if(editingInfo != null && !editingInfo.isPendingEntitySelection) {
editingInfo.entityInfo.decisionFlee = decisionFlee;
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} else if(editingInfo != null) {
getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
}))
)
)
); );
} }

View file

@ -0,0 +1,52 @@
# This is an example mods.toml file. It contains the data relating to the loading mods.
# There are several mandatory fields (#mandatory), and many more that are optional (#optional).
# The overall format is standard TOML format, v0.5.0.
# Note that there are a couple of TOML lists in this file.
# Find more information on toml format here: https://github.com/toml-lang/toml
# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml
modLoader="javafml" #mandatory
# A version range to match for said mod loader - for regular FML @Mod it will be the forge version
loaderVersion="[28,)" #mandatory (28 is current forge version)
# A URL to refer people to when problems occur with this mod
issueTrackerURL="https://github.com/Stephen-Seo/TurnBasedMinecraftMod/issues" #optional
# A list of mods - how many allowed here is determined by the individual mod loader
[[mods]] #mandatory
# The modid of the mod
modId="com_burnedkirby_turnbasedminecraft" #mandatory
# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it
version="1.9" #mandatory
# A display name for the mod
displayName="TurnBasedMinecraftMod" #mandatory
# A URL to query for updates for this mod. See the JSON update specification <here>
#updateJSONURL="" #optional
# A URL for the "homepage" for this mod, displayed in the mod UI
displayURL="https://github.com/Stephen-Seo/TurnBasedMinecraftMod" #optional
# A file name (in the root of the mod JAR) containing a logo for display
#logoFile="" #optional
# A text field displayed in the mod UI
credits="Thanks for this mod goes to Java" #optional
# A text field displayed in the mod UI
authors="BurnedKirby" #optional
# The description text for the mod (multi line!) (#mandatory)
description='''
Implements turn-based-battle in Minecraft.
'''
# A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional.
[[dependencies.com_burnedkirby_turnbasedminecraft]] #optional
# the modid of the dependency
modId="forge" #mandatory
# Does this dependency have to exist - if not, ordering below must be specified
mandatory=true #mandatory
# The version range of the dependency
versionRange="[28,)" #mandatory
# An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory
ordering="NONE"
# Side this dependency is applied on - BOTH, CLIENT or SERVER
side="BOTH"
# Here's another dependency
[[dependencies.com_burnedkirby_turnbasedminecraft]]
modId="minecraft"
mandatory=true
versionRange="[1.14.4]"
ordering="NONE"
side="BOTH"

View file

@ -88,7 +88,7 @@ battle_turn_time_seconds = 15
# decision_flee_probability: Percentage of entity choosing to flee on turn. # decision_flee_probability: Percentage of entity choosing to flee on turn.
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityBlaze" name = "net.minecraft.entity.monster.BlazeEntity"
attack_power = 5 attack_power = 5
attack_probability = 50 attack_probability = 50
attack_effect = "fire" attack_effect = "fire"
@ -101,7 +101,7 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityCaveSpider" name = "net.minecraft.entity.monster.CaveSpiderEntity"
attack_power = 2 attack_power = 2
attack_probability = 75 attack_probability = 75
attack_effect = "poison" attack_effect = "poison"
@ -114,7 +114,7 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityCreeper" name = "net.minecraft.entity.monster.CreeperEntity"
ignore_battle = true ignore_battle = true
attack_power = 15 attack_power = 15
attack_probability = 17 attack_probability = 17
@ -127,7 +127,19 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityElderGuardian" name = "net.minecraft.entity.monster.DrownedEntity"
attack_power = 3
attack_probability = 70
attack_variance = 2
evasion = 5
category = "monster"
speed = 25
decision_attack_probability = 100
decision_defend_probability = 0
decision_flee_probability = 0
[[server_config.entity]]
name = "net.minecraft.entity.monster.ElderGuardianEntity"
attack_power = 8 attack_power = 8
attack_probability = 65 attack_probability = 65
defense_damage = 2 defense_damage = 2
@ -140,7 +152,7 @@ decision_defend_probability = 20
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityEnderman" name = "net.minecraft.entity.monster.EndermanEntity"
attack_power = 7 attack_power = 7
attack_probability = 80 attack_probability = 80
evasion = 40 evasion = 40
@ -151,7 +163,7 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityEndermite" name = "net.minecraft.entity.monster.EndermiteEntity"
attack_power = 2 attack_power = 2
attack_probability = 80 attack_probability = 80
evasion = 40 evasion = 40
@ -162,7 +174,7 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityEvoker" name = "net.minecraft.entity.monster.EvokerEntity"
attack_power = 6 attack_power = 6
attack_probability = 60 attack_probability = 60
evasion = 35 evasion = 35
@ -173,7 +185,7 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityGhast" name = "net.minecraft.entity.monster.GhastEntity"
ignore_battle = true ignore_battle = true
attack_power = 13 attack_power = 13
attack_probability = 20 attack_probability = 20
@ -185,7 +197,7 @@ decision_defend_probability = 0
decision_flee_probability = 25 decision_flee_probability = 25
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityGiantZombie" name = "net.minecraft.entity.monster.GiantEntity"
attack_power = 11 attack_power = 11
attack_probability = 35 attack_probability = 35
evasion = 2 evasion = 2
@ -196,7 +208,7 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityGuardian" name = "net.minecraft.entity.monster.GuardianEntity"
attack_power = 6 attack_power = 6
attack_probability = 55 attack_probability = 55
defense_damage = 2 defense_damage = 2
@ -209,7 +221,7 @@ decision_defend_probability = 20
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityHusk" name = "net.minecraft.entity.monster.HuskEntity"
attack_power = 3 attack_power = 3
attack_probability = 70 attack_probability = 70
attack_effect = "hunger" attack_effect = "hunger"
@ -222,7 +234,19 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityIronGolem" name = "net.minecraft.entity.monster.IllusionerEntity"
attack_power = 2
attack_probability = 70
attack_variance = 2
evasion = 5
category = "monster"
speed = 35
decision_attack_probability = 100
decision_defend_probability = 0
decision_flee_probability = 0
[[server_config.entity]]
name = "net.minecraft.entity.monster.IronGolemEntity"
attack_power = 14 attack_power = 14
attack_probability = 85 attack_probability = 85
attack_variance = 7 attack_variance = 7
@ -234,7 +258,7 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityMagmaCube" name = "net.minecraft.entity.monster.MagmaCubeEntity"
attack_power = 3 attack_power = 3
attack_probability = 35 attack_probability = 35
evasion = 12 evasion = 12
@ -245,29 +269,43 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityPigZombie" name = "net.minecraft.entity.monster.PhantomEntity"
attack_power = 8 attack_power = 2
attack_probability = 70 attack_probability = 90
attack_variance = 1
evasion = 35
category = "monster"
speed = 65
decision_attack_probability = 100
decision_defend_probability = 0
decision_flee_probability = 0
[[server_config.entity]]
name = "net.minecraft.entity.monster.PillagerEntity"
attack_power = 3
attack_probability = 60
attack_variance = 1
evasion = 10 evasion = 10
category = "monster" category = "monster"
speed = 50 speed = 30
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityPolarBear" name = "net.minecraft.entity.monster.RavagerEntity"
attack_power = 6 attack_power = 12
attack_probability = 67 attack_probability = 70
evasion = 5 attack_variance = 4
category = "animal" evasion = 4
category = "monster"
speed = 35 speed = 35
decision_attack_probability = 100 decision_attack_probability = 90
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityShulker" name = "net.minecraft.entity.monster.ShulkerEntity"
attack_power = 4 attack_power = 4
attack_probability = 80 attack_probability = 80
evasion = 15 evasion = 15
@ -278,7 +316,7 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntitySilverfish" name = "net.minecraft.entity.monster.SilverfishEntity"
attack_power = 1 attack_power = 1
attack_probability = 85 attack_probability = 85
evasion = 37 evasion = 37
@ -289,7 +327,7 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntitySkeleton" name = "net.minecraft.entity.monster.SkeletonEntity"
attack_power = 3 attack_power = 3
attack_probability = 75 attack_probability = 75
attack_variance = 1 attack_variance = 1
@ -301,7 +339,7 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntitySlime" name = "net.minecraft.entity.monster.SlimeEntity"
attack_power = 2 attack_power = 2
attack_probability = 35 attack_probability = 35
evasion = 10 evasion = 10
@ -312,18 +350,7 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntitySnowman" name = "net.minecraft.entity.monster.SpiderEntity"
attack_power = 0
attack_probability = 80
evasion = 5
category = "passive"
speed = 60
decision_attack_probability = 100
decision_defend_probability = 0
decision_flee_probability = 0
[[server_config.entity]]
name = "net.minecraft.entity.monster.EntitySpider"
attack_power = 2 attack_power = 2
attack_probability = 70 attack_probability = 70
evasion = 25 evasion = 25
@ -334,7 +361,7 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityStray" name = "net.minecraft.entity.monster.StrayEntity"
attack_power = 3 attack_power = 3
attack_probability = 75 attack_probability = 75
attack_variance = 1 attack_variance = 1
@ -348,7 +375,7 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityVex" name = "net.minecraft.entity.monster.VexEntity"
attack_power = 9 attack_power = 9
attack_probability = 65 attack_probability = 65
evasion = 30 evasion = 30
@ -359,7 +386,7 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityVindicator" name = "net.minecraft.entity.monster.VindicatorEntity"
attack_power = 13 attack_power = 13
attack_probability = 70 attack_probability = 70
evasion = 10 evasion = 10
@ -370,7 +397,7 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityWitch" name = "net.minecraft.entity.monster.WitchEntity"
attack_power = 5 attack_power = 5
attack_probability = 75 attack_probability = 75
attack_variance = 1 attack_variance = 1
@ -382,7 +409,7 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityWitherSkeleton" name = "net.minecraft.entity.monster.WitherSkeletonEntity"
attack_power = 8 attack_power = 8
attack_probability = 70 attack_probability = 70
attack_effect = "wither" attack_effect = "wither"
@ -395,7 +422,7 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityZombie" name = "net.minecraft.entity.monster.ZombieEntity"
attack_power = 3 attack_power = 3
attack_probability = 70 attack_probability = 70
evasion = 5 evasion = 5
@ -406,7 +433,18 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.monster.EntityZombieVillager" name = "net.minecraft.entity.monster.ZombiePigmanEntity"
attack_power = 8
attack_probability = 70
evasion = 10
category = "monster"
speed = 50
decision_attack_probability = 100
decision_defend_probability = 0
decision_flee_probability = 0
[[server_config.entity]]
name = "net.minecraft.entity.monster.ZombieVillagerEntity"
attack_power = 3 attack_power = 3
attack_probability = 70 attack_probability = 70
evasion = 5 evasion = 5
@ -417,7 +455,7 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.passive.EntityBat" name = "net.minecraft.entity.passive.BatEntity"
attack_power = 0 attack_power = 0
attack_probability = 70 attack_probability = 70
evasion = 35 evasion = 35
@ -428,7 +466,7 @@ decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.passive.EntityChicken" name = "net.minecraft.entity.passive.ChickenEntity"
attack_power = 0 attack_power = 0
attack_probability = 70 attack_probability = 70
evasion = 10 evasion = 10
@ -439,7 +477,7 @@ decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.passive.EntityCow" name = "net.minecraft.entity.passive.CowEntity"
attack_power = 0 attack_power = 0
attack_probability = 50 attack_probability = 50
evasion = 1 evasion = 1
@ -450,7 +488,19 @@ decision_defend_probability = 10
decision_flee_probability = 80 decision_flee_probability = 80
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.passive.EntityDonkey" name = "net.minecraft.entity.passive.DolphinEntity"
attack_power = 3
attack_probability = 80
attack_variance = 1
evasion = 45
category = "passive"
speed = 75
decision_attack_probability = 70
decision_defend_probability = 0
decision_flee_probability = 30
[[server_config.entity]]
name = "net.minecraft.entity.passive.horse.DonkeyEntity"
attack_power = 0 attack_power = 0
attack_probability = 70 attack_probability = 70
evasion = 10 evasion = 10
@ -461,7 +511,7 @@ decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.passive.EntityHorse" name = "net.minecraft.entity.passive.horse.HorseEntity"
attack_power = 0 attack_power = 0
attack_probability = 70 attack_probability = 70
evasion = 10 evasion = 10
@ -472,7 +522,7 @@ decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.passive.EntityLlama" name = "net.minecraft.entity.passive.horse.LlamaEntity"
attack_power = 1 attack_power = 1
attack_probability = 70 attack_probability = 70
evasion = 10 evasion = 10
@ -483,7 +533,7 @@ decision_defend_probability = 0
decision_flee_probability = 25 decision_flee_probability = 25
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.passive.EntityMooshroom" name = "net.minecraft.entity.passive.MooshroomEntity"
attack_power = 0 attack_power = 0
attack_probability = 70 attack_probability = 70
evasion = 1 evasion = 1
@ -494,7 +544,7 @@ decision_defend_probability = 10
decision_flee_probability = 80 decision_flee_probability = 80
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.passive.EntityMule" name = "net.minecraft.entity.passive.horse.MuleEntity"
attack_power = 0 attack_power = 0
attack_probability = 70 attack_probability = 70
evasion = 10 evasion = 10
@ -505,11 +555,11 @@ decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.passive.EntityOcelot" name = "net.minecraft.entity.passive.OcelotEntity"
attack_power = 1 attack_power = 1
attack_probability = 70 attack_probability = 70
attack_variance = 1 attack_variance = 1
evasion = 10 evasion = 30
category = "passive" category = "passive"
speed = 75 speed = 75
decision_attack_probability = 0 decision_attack_probability = 0
@ -517,7 +567,18 @@ decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.passive.EntityParrot" name = "net.minecraft.entity.passive.PandaEntity"
attack_power = 6
attack_probability = 60
evasion = 10
category = "passive"
speed = 30
decision_attack_probability = 45
decision_defend_probability = 25
decision_flee_probability = 30
[[server_config.entity]]
name = "net.minecraft.entity.passive.ParrotEntity"
attack_power = 0 attack_power = 0
attack_probability = 70 attack_probability = 70
evasion = 35 evasion = 35
@ -528,7 +589,7 @@ decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.passive.EntityPig" name = "net.minecraft.entity.passive.PigEntity"
attack_power = 0 attack_power = 0
attack_probability = 70 attack_probability = 70
evasion = 10 evasion = 10
@ -539,7 +600,18 @@ decision_defend_probability = 5
decision_flee_probability = 85 decision_flee_probability = 85
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.passive.EntityRabbit" name = "net.minecraft.entity.passive.PolarBearEntity"
attack_power = 6
attack_probability = 67
evasion = 5
category = "animal"
speed = 35
decision_attack_probability = 100
decision_defend_probability = 0
decision_flee_probability = 0
[[server_config.entity]]
name = "net.minecraft.entity.passive.RabbitEntity"
attack_power = 0 attack_power = 0
attack_probability = 70 attack_probability = 70
evasion = 40 evasion = 40
@ -550,7 +622,7 @@ decision_defend_probability = 0
decision_flee_probability = 100 decision_flee_probability = 100
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.passive.EntitySheep" name = "net.minecraft.entity.passive.SheepEntity"
attack_power = 0 attack_power = 0
attack_probability = 70 attack_probability = 70
evasion = 5 evasion = 5
@ -561,7 +633,7 @@ decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.passive.EntitySkeletonHorse" name = "net.minecraft.entity.passive.horse.SkeletonHorseEntity"
attack_power = 0 attack_power = 0
attack_probability = 70 attack_probability = 70
evasion = 5 evasion = 5
@ -572,7 +644,18 @@ decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.passive.EntitySquid" name = "net.minecraft.entity.passive.SnowGolemEntity"
attack_power = 0
attack_probability = 80
evasion = 5
category = "passive"
speed = 60
decision_attack_probability = 100
decision_defend_probability = 0
decision_flee_probability = 0
[[server_config.entity]]
name = "net.minecraft.entity.passive.SquidEntity"
attack_power = 0 attack_power = 0
attack_probability = 70 attack_probability = 70
evasion = 15 evasion = 15
@ -583,7 +666,18 @@ decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.passive.EntityVillager" name = "net.minecraft.entity.passive.horse.TraderLlamaEntity"
attack_power = 1
attack_probability = 70
evasion = 10
category = "passive"
speed = 50
decision_attack_probability = 65
decision_defend_probability = 0
decision_flee_probability = 25
[[server_config.entity]]
name = "net.minecraft.entity.merchant.villager.VillagerEntity"
attack_power = 0 attack_power = 0
attack_probability = 70 attack_probability = 70
evasion = 5 evasion = 5
@ -594,7 +688,7 @@ decision_defend_probability = 10
decision_flee_probability = 80 decision_flee_probability = 80
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.passive.EntityWolf" name = "net.minecraft.entity.passive.WolfEntity"
attack_power = 4 attack_power = 4
attack_probability = 70 attack_probability = 70
evasion = 20 evasion = 20
@ -605,7 +699,7 @@ decision_defend_probability = 15
decision_flee_probability = 5 decision_flee_probability = 5
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.passive.EntityZombieHorse" name = "net.minecraft.entity.passive.horse.ZombieHorseEntity"
attack_power = 0 attack_power = 0
attack_probability = 70 attack_probability = 70
evasion = 8 evasion = 8
@ -616,7 +710,53 @@ decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.boss.EntityDragon" name = "net.minecraft.entity.passive.fish.CodEntity"
attack_power = 0
attack_probability = 50
evasion = 50
category = "passive"
speed = 75
decision_attack_probability = 25
decision_defend_probability = 0
decision_flee_probability = 75
[[server_config.entity]]
name = "net.minecraft.entity.passive.fish.PufferfishEntity"
attack_power = 0
attack_probability = 50
defense_damage = 3
defense_damage_probability = 75
evasion = 25
category = "passive"
speed = 45
decision_attack_probability = 35
decision_defend_probability = 0
decision_flee_probability = 65
[[server_config.entity]]
name = "net.minecraft.entity.passive.fish.SalmonEntity"
attack_power = 0
attack_probability = 50
evasion = 50
category = "passive"
speed = 75
decision_attack_probability = 25
decision_defend_probability = 0
decision_flee_probability = 75
[[server_config.entity]]
name = "net.minecraft.entity.passive.fish.TropicalFishEntity"
attack_power = 0
attack_probability = 50
evasion = 50
category = "passive"
speed = 75
decision_attack_probability = 25
decision_defend_probability = 0
decision_flee_probability = 75
[[server_config.entity]]
name = "net.minecraft.entity.boss.dragon.EnderDragonEntity"
attack_power = 10 attack_power = 10
attack_probability = 70 attack_probability = 70
attack_variance = 2 attack_variance = 2
@ -628,7 +768,7 @@ decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
[[server_config.entity]] [[server_config.entity]]
name = "net.minecraft.entity.boss.EntityWither" name = "net.minecraft.entity.boss.WitherEntity"
attack_power = 8 attack_power = 8
attack_probability = 70 attack_probability = 70
attack_effect = "wither" attack_effect = "wither"

View file

@ -1,6 +1,6 @@
[ [
{ {
"modid": "com.burnedkirby.turnbasedminecraft", "modid": "com_burnedkirby_turnbasedminecraft",
"name": "Turn Based Minecraft", "name": "Turn Based Minecraft",
"description": "Changes battles to be turn-based.", "description": "Changes battles to be turn-based.",
"version": "${version}", "version": "${version}",
@ -10,8 +10,6 @@
"authorList": ["Stephen Seo"], "authorList": ["Stephen Seo"],
"credits": "The Forge and FML guys, for making this possible. "credits": "The Forge and FML guys, for making this possible.
Dependencies: Dependencies:
shadow by John Rengelman (Apache License 2.0)
Cava-Toml by ConenSys team (Apache License 2.0)
JavaMP3 by delthas, josephx86, GlaDOSik, and kevinstadler (MIT License)", JavaMP3 by delthas, josephx86, GlaDOSik, and kevinstadler (MIT License)",
"logoFile": "", "logoFile": "",
"screenshots": [], "screenshots": [],