diff --git a/src/main/java/com/reider745/InnerCoreServer.java b/src/main/java/com/reider745/InnerCoreServer.java index 6695cce50..c4ef8d210 100644 --- a/src/main/java/com/reider745/InnerCoreServer.java +++ b/src/main/java/com/reider745/InnerCoreServer.java @@ -347,10 +347,14 @@ public void reload() { public void start() { try{ for(File file : Objects.requireNonNull(new File(InnerCoreServer.dataPath, "behavior_packs").listFiles())) { - BehaviorPack pack = new BehaviorPack(file.getAbsolutePath()); - pack.load(); + try{ + BehaviorPack pack = new BehaviorPack(file.getAbsolutePath()); + pack.load(); + }catch (Exception e) { + Logger.error("Error loaded behavior pack " + file.getAbsolutePath()); + } } - }catch (Exception e){} + }catch (Exception ignore){} } public static Object getProperty(String variable) { diff --git a/src/main/java/com/reider745/behavior/BehaviorContent.java b/src/main/java/com/reider745/behavior/BehaviorContent.java index 4353ee3d4..ea9744a85 100644 --- a/src/main/java/com/reider745/behavior/BehaviorContent.java +++ b/src/main/java/com/reider745/behavior/BehaviorContent.java @@ -5,5 +5,5 @@ public abstract class BehaviorContent { public abstract String getTagName(); public abstract String getDefaultDirectory(); - public abstract void load(JSONObject json); + public abstract void load(JSONObject json, String file); } diff --git a/src/main/java/com/reider745/behavior/BehaviorPack.java b/src/main/java/com/reider745/behavior/BehaviorPack.java index 84ac7f497..9c33d0245 100644 --- a/src/main/java/com/reider745/behavior/BehaviorPack.java +++ b/src/main/java/com/reider745/behavior/BehaviorPack.java @@ -1,7 +1,7 @@ package com.reider745.behavior; -import com.reider745.InnerCoreServer; import com.reider745.behavior.entities.EntitiesContent; +import com.reider745.behavior.spawnrules.SpawnRulesContent; import com.zhekasmirnov.horizon.runtime.logger.Logger; import com.zhekasmirnov.horizon.util.FileUtils; import org.json.JSONArray; @@ -16,6 +16,7 @@ public class BehaviorPack { static { contents_api.add(new EntitiesContent()); + contents_api.add(new SpawnRulesContent()); } private final String path; @@ -103,12 +104,12 @@ public void loadFileContext(String path){ for(BehaviorContent content : contents_api){ if(contents.has(content.getTagName())){ - content.load(contents); + content.load(contents, path); return; } } - throw new RuntimeException("Not support "+path); + Logger.warning("Not support content: "+path); } catch (Exception e) { Logger.warning(path); throw new RuntimeException(e); diff --git a/src/main/java/com/reider745/behavior/entities/CustomEntity.java b/src/main/java/com/reider745/behavior/entities/CustomEntity.java index 9842cf897..6de4a6adf 100644 --- a/src/main/java/com/reider745/behavior/entities/CustomEntity.java +++ b/src/main/java/com/reider745/behavior/entities/CustomEntity.java @@ -119,6 +119,10 @@ public Vector3 updateMove(int tickDiff) { final double gravity_value = this.getGravity() * 4; final Vector3 pos = this.getPosition().clone(); + motionX += factory.liftForce.x / 20; + motionY += factory.liftForce.y / 20; + motionZ += factory.liftForce.z / 20; + if(factory.isPhysics && isSolid(pos.x, pos.y - 0.001,pos.z) == null) { this.motionY -= gravity_value; } @@ -138,12 +142,14 @@ public Vector3 updateMove(int tickDiff) { motionX += move.x * factory.movement; motionZ += move.z * factory.movement; - if(this.getHeight() <= 1){ - if(raycast(pos, move) != null && raycast(pos.add(0, 1.2, 0), move) != null) - targetPositionMovementUpdate(); - }else - if(raycast(pos.add(0, 1.2, 0), move) != null) - targetPositionMovementUpdate(); + if(factory.canClimb) { + if(this.getHeight() <= 1){ + if(raycast(pos, move) != null && raycast(pos.add(0, 1.2, 0), move) != null) + targetPositionMovementUpdate(); + }else + if(raycast(pos.add(0, 1.2, 0), move) != null) + targetPositionMovementUpdate(); + } } } @@ -158,7 +164,6 @@ public Vector3 updateMove(int tickDiff) { tickJump = 0; } }else{ - tickJump++; final var xzLength = Math.sqrt(motionX * motionX + motionZ * motionZ); diff --git a/src/main/java/com/reider745/behavior/entities/EntitiesContent.java b/src/main/java/com/reider745/behavior/entities/EntitiesContent.java index 13f2d21d9..865fc7d38 100644 --- a/src/main/java/com/reider745/behavior/entities/EntitiesContent.java +++ b/src/main/java/com/reider745/behavior/entities/EntitiesContent.java @@ -31,11 +31,11 @@ public String getDefaultDirectory() { } @Override - public void load(JSONObject json) { + public void load(JSONObject json, String file) { final String version_name = json.getString("format_version"); final EntitiesVersion version = versions.get(version_name); if(version == null) - throw new RuntimeException("not support version "+version_name); + throw new RuntimeException("Not support entities version "+version_name); version.load(json.getJSONObject(getTagName())).build(); } diff --git a/src/main/java/com/reider745/behavior/entities/EntityContentFactory.java b/src/main/java/com/reider745/behavior/entities/EntityContentFactory.java index 052feb5e0..81bef64c2 100644 --- a/src/main/java/com/reider745/behavior/entities/EntityContentFactory.java +++ b/src/main/java/com/reider745/behavior/entities/EntityContentFactory.java @@ -1,22 +1,18 @@ package com.reider745.behavior.entities; -import cn.nukkit.entity.Entity; import cn.nukkit.entity.custom.EntityDefinition; import cn.nukkit.entity.custom.EntityManager; -import cn.nukkit.level.Position; +import cn.nukkit.math.Vector3; import com.reider745.behavior.entities.formats.tags.DescriptionsFactory; import com.reider745.behavior.entities.formats.tags.components.BossComponent; -import com.reider745.behavior.entities.formats.tags.components.CollisionComponent; -import com.reider745.behavior.entities.formats.tags.components.HealthComponent; +import com.reider745.behavior.entities.formats.tags.components.collision.CollisionComponent; +import com.reider745.behavior.entities.formats.tags.components.life.HealthComponent; import com.reider745.behavior.entities.formats.tags.components.IUpdateEntity; import com.reider745.behavior.entities.formats.tags.components.attack.MeleeAttackComponent; import com.reider745.behavior.entities.formats.tags.components.attack.NearestAttackableTarget; -import com.reider745.behavior.entities.formats.tags.components.navigation.NavigationComponentsTag; import com.reider745.behavior.entities.formats.tags.components.navigation.NavigationRandomStroll; import com.reider745.behavior.entities.formats.tags.components.navigation.NavigationWalkComponent; import com.zhekasmirnov.horizon.runtime.logger.Logger; -import org.json.JSONArray; -import org.json.JSONObject; import java.util.ArrayList; import java.util.HashMap; @@ -44,11 +40,13 @@ public class EntityContentFactory { public boolean isHurtByTarget = false; public boolean isNameable = false; public boolean isPushable = false; + public boolean canClimb = false; public float movement = .5f; public int damage = 0; public static final HashMap factoryMap = new HashMap<>(); + public Vector3 liftForce = new Vector3(0, 0, 0); public void addUpdate(IUpdateEntity tag){ @@ -72,7 +70,7 @@ public EntityDefinition getEntityDefinition() { } public void build(){ - Logger.warning("Register entity "+description.identifier); + Logger.info("Register entity "+description.identifier); factoryMap.put(description.identifier, this); EntityManager.get() diff --git a/src/main/java/com/reider745/behavior/entities/formats/EntitiesVersion18.java b/src/main/java/com/reider745/behavior/entities/formats/EntitiesVersion18.java index 002a0e8f4..4100d957d 100644 --- a/src/main/java/com/reider745/behavior/entities/formats/EntitiesVersion18.java +++ b/src/main/java/com/reider745/behavior/entities/formats/EntitiesVersion18.java @@ -5,7 +5,6 @@ import com.reider745.behavior.entities.TagContentFactory; import com.reider745.behavior.entities.formats.tags.ComponentsFactory; import com.reider745.behavior.entities.formats.tags.DescriptionsFactory; -import com.reider745.behavior.entities.formats.tags.components.HealthComponent; import org.json.JSONObject; import java.util.ArrayList; diff --git a/src/main/java/com/reider745/behavior/entities/formats/tags/ComponentsFactory.java b/src/main/java/com/reider745/behavior/entities/formats/tags/ComponentsFactory.java index 993064cc5..e5eb1bd43 100644 --- a/src/main/java/com/reider745/behavior/entities/formats/tags/ComponentsFactory.java +++ b/src/main/java/com/reider745/behavior/entities/formats/tags/ComponentsFactory.java @@ -4,11 +4,18 @@ import com.reider745.behavior.entities.EntityContentFactory; import com.reider745.behavior.entities.TagContentFactory; import com.reider745.behavior.entities.formats.tags.components.*; +import com.reider745.behavior.entities.formats.tags.components.attack.AttackComponent; import com.reider745.behavior.entities.formats.tags.components.attack.HurtByTargetComponent; import com.reider745.behavior.entities.formats.tags.components.attack.MeleeAttackComponent; import com.reider745.behavior.entities.formats.tags.components.attack.NearestAttackableTarget; -import com.reider745.behavior.entities.formats.tags.components.navigation.NavigationRandomStroll; -import com.reider745.behavior.entities.formats.tags.components.navigation.NavigationWalkComponent; +import com.reider745.behavior.entities.formats.tags.components.collision.BalloonComponent; +import com.reider745.behavior.entities.formats.tags.components.collision.CollisionComponent; +import com.reider745.behavior.entities.formats.tags.components.collision.GravityComponent; +import com.reider745.behavior.entities.formats.tags.components.life.BreathableComponent; +import com.reider745.behavior.entities.formats.tags.components.life.BurnsInDaylight; +import com.reider745.behavior.entities.formats.tags.components.life.FireImmuneComponent; +import com.reider745.behavior.entities.formats.tags.components.life.HealthComponent; +import com.reider745.behavior.entities.formats.tags.components.navigation.*; import com.zhekasmirnov.horizon.runtime.logger.Logger; import org.json.JSONObject; @@ -43,6 +50,9 @@ private static void add(ComponentsTag tag){ add(new NearestAttackableTarget()); add(new MeleeAttackComponent()); add(new HurtByTargetComponent()); + add(new BalloonComponent()); + add(new BreathableComponent()); + add(new CanClimbComponent()); } @Override @@ -57,7 +67,7 @@ public void loadJSON(EntityContentFactory entityFactory, JSONObject json) { final String key = it.next(); final ComponentsTag tag = tags.get(key); if(tag == null){ - Logger.warning("Not support ComponentsFactory "+key); + Logger.warning("Not support entities ComponentsFactory "+key); continue; } diff --git a/src/main/java/com/reider745/behavior/entities/formats/tags/components/AttackComponent.java b/src/main/java/com/reider745/behavior/entities/formats/tags/components/attack/AttackComponent.java similarity index 89% rename from src/main/java/com/reider745/behavior/entities/formats/tags/components/AttackComponent.java rename to src/main/java/com/reider745/behavior/entities/formats/tags/components/attack/AttackComponent.java index abce85262..f8d58569b 100644 --- a/src/main/java/com/reider745/behavior/entities/formats/tags/components/AttackComponent.java +++ b/src/main/java/com/reider745/behavior/entities/formats/tags/components/attack/AttackComponent.java @@ -1,4 +1,4 @@ -package com.reider745.behavior.entities.formats.tags.components; +package com.reider745.behavior.entities.formats.tags.components.attack; import com.reider745.behavior.entities.ComponentsTag; import com.reider745.behavior.entities.EntityContentFactory; diff --git a/src/main/java/com/reider745/behavior/entities/formats/tags/components/attack/ProjectileComponent.java b/src/main/java/com/reider745/behavior/entities/formats/tags/components/attack/ProjectileComponent.java new file mode 100644 index 000000000..d61286f7c --- /dev/null +++ b/src/main/java/com/reider745/behavior/entities/formats/tags/components/attack/ProjectileComponent.java @@ -0,0 +1,16 @@ +package com.reider745.behavior.entities.formats.tags.components.attack; + +import com.reider745.behavior.entities.ComponentsTag; +import com.reider745.behavior.entities.EntityContentFactory; + +public class ProjectileComponent extends ComponentsTag { + @Override + public String getNameTag() { + return "minecraft:projectile"; + } + + @Override + public void load(EntityContentFactory factory, Object json) { + // TODO: BEHAVIOR + } +} diff --git a/src/main/java/com/reider745/behavior/entities/formats/tags/components/collision/BalloonComponent.java b/src/main/java/com/reider745/behavior/entities/formats/tags/components/collision/BalloonComponent.java new file mode 100644 index 000000000..a79b6a3f8 --- /dev/null +++ b/src/main/java/com/reider745/behavior/entities/formats/tags/components/collision/BalloonComponent.java @@ -0,0 +1,24 @@ +package com.reider745.behavior.entities.formats.tags.components.collision; + +import cn.nukkit.math.Vector3; +import com.reider745.behavior.entities.ComponentsTag; +import com.reider745.behavior.entities.EntityContentFactory; +import org.json.JSONArray; +import org.json.JSONObject; + +public class BalloonComponent extends ComponentsTag { + @Override + public String getNameTag() { + return "minecraft:balloon"; + } + + @Override + public void load(EntityContentFactory factory, Object json) { + if(json instanceof JSONObject jsonObject) { + final JSONArray leftForce = jsonObject.getJSONArray("lift_force"); + factory.liftForce = new Vector3(leftForce.getDouble(0), leftForce.getDouble(1), leftForce.getDouble(2)); + } else + throw new RuntimeException("Error loaded entity"); + + } +} diff --git a/src/main/java/com/reider745/behavior/entities/formats/tags/components/CollisionComponent.java b/src/main/java/com/reider745/behavior/entities/formats/tags/components/collision/CollisionComponent.java similarity index 91% rename from src/main/java/com/reider745/behavior/entities/formats/tags/components/CollisionComponent.java rename to src/main/java/com/reider745/behavior/entities/formats/tags/components/collision/CollisionComponent.java index d96a58780..19f1817ce 100644 --- a/src/main/java/com/reider745/behavior/entities/formats/tags/components/CollisionComponent.java +++ b/src/main/java/com/reider745/behavior/entities/formats/tags/components/collision/CollisionComponent.java @@ -1,4 +1,4 @@ -package com.reider745.behavior.entities.formats.tags.components; +package com.reider745.behavior.entities.formats.tags.components.collision; import com.reider745.behavior.entities.ComponentsTag; import com.reider745.behavior.entities.EntityContentFactory; diff --git a/src/main/java/com/reider745/behavior/entities/formats/tags/components/GravityComponent.java b/src/main/java/com/reider745/behavior/entities/formats/tags/components/collision/GravityComponent.java similarity index 83% rename from src/main/java/com/reider745/behavior/entities/formats/tags/components/GravityComponent.java rename to src/main/java/com/reider745/behavior/entities/formats/tags/components/collision/GravityComponent.java index 57c443fb9..57b9bd972 100644 --- a/src/main/java/com/reider745/behavior/entities/formats/tags/components/GravityComponent.java +++ b/src/main/java/com/reider745/behavior/entities/formats/tags/components/collision/GravityComponent.java @@ -1,4 +1,4 @@ -package com.reider745.behavior.entities.formats.tags.components; +package com.reider745.behavior.entities.formats.tags.components.collision; import com.reider745.behavior.entities.ComponentsTag; import com.reider745.behavior.entities.EntityContentFactory; diff --git a/src/main/java/com/reider745/behavior/entities/formats/tags/components/life/BreathableComponent.java b/src/main/java/com/reider745/behavior/entities/formats/tags/components/life/BreathableComponent.java new file mode 100644 index 000000000..3e6d01b31 --- /dev/null +++ b/src/main/java/com/reider745/behavior/entities/formats/tags/components/life/BreathableComponent.java @@ -0,0 +1,43 @@ +package com.reider745.behavior.entities.formats.tags.components.life; + +import com.reider745.behavior.entities.ComponentsTag; +import com.reider745.behavior.entities.CustomEntity; +import com.reider745.behavior.entities.EntityContentFactory; +import com.reider745.behavior.entities.formats.tags.components.IUpdateEntity; +import org.json.JSONObject; + +public class BreathableComponent extends ComponentsTag implements IUpdateEntity { + public int totalSupply, suffocateTime; + public double inhaleTime; + public boolean generatesBubbles; + + @Override + public String getNameTag() { + return "minecraft:breathable"; + } + + @Override + public void load(EntityContentFactory factory, Object json) { + if(json instanceof JSONObject jsonObject) { + final BreathableComponent component = new BreathableComponent(); + + component.totalSupply = jsonObject.getInt("total_supply"); + component.suffocateTime = jsonObject.optInt("suffocate_time", 0); + component.inhaleTime = jsonObject.optDouble("inhale_time", 2.0); + component.generatesBubbles = jsonObject.optBoolean("generates_bubbles", false); + + factory.addUpdate(component); + } else + throw new RuntimeException("Not support"); + } + + @Override + public int getPriority() { + return IUpdateEntity.super.getPriority(); + } + + @Override + public void onUpdate(CustomEntity entity) { + // TODO: BEHAVIOR + } +} diff --git a/src/main/java/com/reider745/behavior/entities/formats/tags/components/BurnsInDaylight.java b/src/main/java/com/reider745/behavior/entities/formats/tags/components/life/BurnsInDaylight.java similarity index 87% rename from src/main/java/com/reider745/behavior/entities/formats/tags/components/BurnsInDaylight.java rename to src/main/java/com/reider745/behavior/entities/formats/tags/components/life/BurnsInDaylight.java index 5887de116..52d54da48 100644 --- a/src/main/java/com/reider745/behavior/entities/formats/tags/components/BurnsInDaylight.java +++ b/src/main/java/com/reider745/behavior/entities/formats/tags/components/life/BurnsInDaylight.java @@ -1,8 +1,9 @@ -package com.reider745.behavior.entities.formats.tags.components; +package com.reider745.behavior.entities.formats.tags.components.life; import com.reider745.behavior.entities.ComponentsTag; import com.reider745.behavior.entities.CustomEntity; import com.reider745.behavior.entities.EntityContentFactory; +import com.reider745.behavior.entities.formats.tags.components.IUpdateEntity; import com.zhekasmirnov.horizon.runtime.logger.Logger; import org.json.JSONObject; diff --git a/src/main/java/com/reider745/behavior/entities/formats/tags/components/FireImmuneComponent.java b/src/main/java/com/reider745/behavior/entities/formats/tags/components/life/FireImmuneComponent.java similarity index 91% rename from src/main/java/com/reider745/behavior/entities/formats/tags/components/FireImmuneComponent.java rename to src/main/java/com/reider745/behavior/entities/formats/tags/components/life/FireImmuneComponent.java index 140e74892..9ac41bc13 100644 --- a/src/main/java/com/reider745/behavior/entities/formats/tags/components/FireImmuneComponent.java +++ b/src/main/java/com/reider745/behavior/entities/formats/tags/components/life/FireImmuneComponent.java @@ -1,4 +1,4 @@ -package com.reider745.behavior.entities.formats.tags.components; +package com.reider745.behavior.entities.formats.tags.components.life; import com.reider745.behavior.entities.ComponentsTag; diff --git a/src/main/java/com/reider745/behavior/entities/formats/tags/components/HealthComponent.java b/src/main/java/com/reider745/behavior/entities/formats/tags/components/life/HealthComponent.java similarity index 92% rename from src/main/java/com/reider745/behavior/entities/formats/tags/components/HealthComponent.java rename to src/main/java/com/reider745/behavior/entities/formats/tags/components/life/HealthComponent.java index 478422a0e..c80d51f34 100644 --- a/src/main/java/com/reider745/behavior/entities/formats/tags/components/HealthComponent.java +++ b/src/main/java/com/reider745/behavior/entities/formats/tags/components/life/HealthComponent.java @@ -1,4 +1,4 @@ -package com.reider745.behavior.entities.formats.tags.components; +package com.reider745.behavior.entities.formats.tags.components.life; import com.reider745.behavior.entities.ComponentsTag; import com.reider745.behavior.entities.EntityContentFactory; diff --git a/src/main/java/com/reider745/behavior/entities/formats/tags/components/navigation/CanClimbComponent.java b/src/main/java/com/reider745/behavior/entities/formats/tags/components/navigation/CanClimbComponent.java new file mode 100644 index 000000000..40909cfd8 --- /dev/null +++ b/src/main/java/com/reider745/behavior/entities/formats/tags/components/navigation/CanClimbComponent.java @@ -0,0 +1,16 @@ +package com.reider745.behavior.entities.formats.tags.components.navigation; + +import com.reider745.behavior.entities.ComponentsTag; +import com.reider745.behavior.entities.EntityContentFactory; + +public class CanClimbComponent extends ComponentsTag { + @Override + public String getNameTag() { + return "minecraft:can_climb"; + } + + @Override + public void load(EntityContentFactory factory, Object json) { + factory.canClimb = true; + } +} diff --git a/src/main/java/com/reider745/behavior/entities/formats/tags/components/JumpComponent.java b/src/main/java/com/reider745/behavior/entities/formats/tags/components/navigation/JumpComponent.java similarity index 83% rename from src/main/java/com/reider745/behavior/entities/formats/tags/components/JumpComponent.java rename to src/main/java/com/reider745/behavior/entities/formats/tags/components/navigation/JumpComponent.java index dadc2843b..86da08a77 100644 --- a/src/main/java/com/reider745/behavior/entities/formats/tags/components/JumpComponent.java +++ b/src/main/java/com/reider745/behavior/entities/formats/tags/components/navigation/JumpComponent.java @@ -1,4 +1,4 @@ -package com.reider745.behavior.entities.formats.tags.components; +package com.reider745.behavior.entities.formats.tags.components.navigation; import com.reider745.behavior.entities.ComponentsTag; import com.reider745.behavior.entities.EntityContentFactory; diff --git a/src/main/java/com/reider745/behavior/entities/formats/tags/components/MovementBasicComponent.java b/src/main/java/com/reider745/behavior/entities/formats/tags/components/navigation/MovementBasicComponent.java similarity index 83% rename from src/main/java/com/reider745/behavior/entities/formats/tags/components/MovementBasicComponent.java rename to src/main/java/com/reider745/behavior/entities/formats/tags/components/navigation/MovementBasicComponent.java index 0cd96c12f..896480579 100644 --- a/src/main/java/com/reider745/behavior/entities/formats/tags/components/MovementBasicComponent.java +++ b/src/main/java/com/reider745/behavior/entities/formats/tags/components/navigation/MovementBasicComponent.java @@ -1,4 +1,4 @@ -package com.reider745.behavior.entities.formats.tags.components; +package com.reider745.behavior.entities.formats.tags.components.navigation; import com.reider745.behavior.entities.ComponentsTag; import com.reider745.behavior.entities.EntityContentFactory; diff --git a/src/main/java/com/reider745/behavior/entities/formats/tags/components/MovementComponent.java b/src/main/java/com/reider745/behavior/entities/formats/tags/components/navigation/MovementComponent.java similarity index 89% rename from src/main/java/com/reider745/behavior/entities/formats/tags/components/MovementComponent.java rename to src/main/java/com/reider745/behavior/entities/formats/tags/components/navigation/MovementComponent.java index 1768ab1ed..4fb91b04f 100644 --- a/src/main/java/com/reider745/behavior/entities/formats/tags/components/MovementComponent.java +++ b/src/main/java/com/reider745/behavior/entities/formats/tags/components/navigation/MovementComponent.java @@ -1,4 +1,4 @@ -package com.reider745.behavior.entities.formats.tags.components; +package com.reider745.behavior.entities.formats.tags.components.navigation; import com.reider745.behavior.entities.ComponentsTag; import com.reider745.behavior.entities.EntityContentFactory; diff --git a/src/main/java/com/reider745/behavior/loots/LootsContent.java b/src/main/java/com/reider745/behavior/loots/LootsContent.java index 20bf553f5..df5a14cc7 100644 --- a/src/main/java/com/reider745/behavior/loots/LootsContent.java +++ b/src/main/java/com/reider745/behavior/loots/LootsContent.java @@ -15,7 +15,7 @@ public String getDefaultDirectory() { } @Override - public void load(JSONObject json) { + public void load(JSONObject json, String file) { } } diff --git a/src/main/java/com/reider745/behavior/spawnrules/SpawnRulesContent.java b/src/main/java/com/reider745/behavior/spawnrules/SpawnRulesContent.java new file mode 100644 index 000000000..00aa790c7 --- /dev/null +++ b/src/main/java/com/reider745/behavior/spawnrules/SpawnRulesContent.java @@ -0,0 +1,34 @@ +package com.reider745.behavior.spawnrules; + +import com.reider745.behavior.BehaviorContent; +import com.reider745.behavior.spawnrules.version.SpawnRules18; +import org.json.JSONObject; + +import java.util.HashMap; + +public class SpawnRulesContent extends BehaviorContent { + private static final HashMap versions = new HashMap<>(); + + static { + versions.put("1.8.0", new SpawnRules18()); + } + + @Override + public String getTagName() { + return "minecraft:spawn_rules"; + } + + @Override + public String getDefaultDirectory() { + return "spawn_rules"; + } + + @Override + public void load(JSONObject json, String file) { + final String version_name = json.getString("format_version"); + final SpawnRulesVersion version = versions.get(version_name); + if(version == null) + throw new RuntimeException("Not support spawn rules version "+version_name); + version.load(json.getJSONObject(getTagName()), file); + } +} diff --git a/src/main/java/com/reider745/behavior/spawnrules/SpawnRulesVersion.java b/src/main/java/com/reider745/behavior/spawnrules/SpawnRulesVersion.java new file mode 100644 index 000000000..43eb77410 --- /dev/null +++ b/src/main/java/com/reider745/behavior/spawnrules/SpawnRulesVersion.java @@ -0,0 +1,7 @@ +package com.reider745.behavior.spawnrules; + +import org.json.JSONObject; + +public abstract class SpawnRulesVersion { + abstract public void load(JSONObject jsonObject, String file); +} diff --git a/src/main/java/com/reider745/behavior/spawnrules/version/SpawnRules18.java b/src/main/java/com/reider745/behavior/spawnrules/version/SpawnRules18.java new file mode 100644 index 000000000..fe09ef92e --- /dev/null +++ b/src/main/java/com/reider745/behavior/spawnrules/version/SpawnRules18.java @@ -0,0 +1,21 @@ +package com.reider745.behavior.spawnrules.version; + +import com.reider745.behavior.spawnrules.SpawnRulesVersion; +import com.zhekasmirnov.horizon.runtime.logger.Logger; +import org.json.JSONObject; + +public class SpawnRules18 extends SpawnRulesVersion { + @Override + public void load(JSONObject json, String file) { + final JSONObject description = json.getJSONObject("description"); + + final String identifier = description.getString("identifier"); + final String populationControl = description.getString("population_control"); + + for(String tag : json.keySet()) { + if(tag.contains("description")) continue; + + Logger.warning("Not support spawn rules tag: " + tag + ", file: "); + } + } +}