Skip to content

Commit

Permalink
Думал что-то сделаю, потом понял что мне лень этим заниматься
Browse files Browse the repository at this point in the history
  • Loading branch information
Reider745 committed Dec 25, 2024
1 parent b0b8bc2 commit c69bfc6
Show file tree
Hide file tree
Showing 25 changed files with 217 additions and 38 deletions.
10 changes: 7 additions & 3 deletions src/main/java/com/reider745/InnerCoreServer.java
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/reider745/behavior/BehaviorContent.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
7 changes: 4 additions & 3 deletions src/main/java/com/reider745/behavior/BehaviorPack.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -16,6 +16,7 @@ public class BehaviorPack {

static {
contents_api.add(new EntitiesContent());
contents_api.add(new SpawnRulesContent());
}

private final String path;
Expand Down Expand Up @@ -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);
Expand Down
19 changes: 12 additions & 7 deletions src/main/java/com/reider745/behavior/entities/CustomEntity.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand All @@ -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();
}
}
}

Expand All @@ -158,7 +164,6 @@ public Vector3 updateMove(int tickDiff) {
tickJump = 0;
}
}else{

tickJump++;

final var xzLength = Math.sqrt(motionX * motionX + motionZ * motionZ);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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<String, EntityContentFactory> factoryMap = new HashMap<>();
public Vector3 liftForce = new Vector3(0, 0, 0);


public void addUpdate(IUpdateEntity tag){
Expand All @@ -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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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
Expand All @@ -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;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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
}
}
Original file line number Diff line number Diff line change
@@ -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");

}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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
}
}
Original file line number Diff line number Diff line change
@@ -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;

Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public String getDefaultDirectory() {
}

@Override
public void load(JSONObject json) {
public void load(JSONObject json, String file) {

}
}
Loading

0 comments on commit c69bfc6

Please sign in to comment.