diff --git a/src/test/java/net/modificationstation/sltest/entity/EntityListener.java b/src/test/java/net/modificationstation/sltest/entity/EntityListener.java index b31922d27..6539ec096 100644 --- a/src/test/java/net/modificationstation/sltest/entity/EntityListener.java +++ b/src/test/java/net/modificationstation/sltest/entity/EntityListener.java @@ -14,6 +14,7 @@ public class EntityListener { public void registerEntities(EntityRegisterEvent event) { event.register(NAMESPACE.id("test"), TestEntity.class); event.register(NAMESPACE.id("gpoor"), PoorGuy.class); + event.register(NAMESPACE.id("stone"), StoneEntity.class); } @EventListener diff --git a/src/test/java/net/modificationstation/sltest/entity/StoneEntity.java b/src/test/java/net/modificationstation/sltest/entity/StoneEntity.java new file mode 100644 index 000000000..eb51a740a --- /dev/null +++ b/src/test/java/net/modificationstation/sltest/entity/StoneEntity.java @@ -0,0 +1,64 @@ +package net.modificationstation.sltest.entity; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.util.math.Box; +import net.minecraft.world.World; + +public class StoneEntity extends Entity { + public StoneEntity(World world) { + super(world); + setBoundingBoxSpacing(1, 1); + } + + @Override + public boolean interact(PlayerEntity player) { + this.setCobblestone(!this.isCobblestone()); + return true; + } + + @Override + public boolean damage(Entity damageSource, int amount) { + this.markDead(); + return true; + } + + @Override + public Box getCollisionAgainstShape(Entity other) { + return other.boundingBox; + } + + @Override + public Box getBoundingBox() { + return this.boundingBox; + } + + @Override + protected void initDataTracker() { + dataTracker.startTracking(16, 0); + } + + @Override + protected void readNbt(NbtCompound nbt) { + this.setCobblestone(nbt.getBoolean("cobblestone")); + } + + @Override + protected void writeNbt(NbtCompound nbt) { + nbt.putBoolean("cobblestone", this.isCobblestone()); + } + + @Override + public boolean isCollidable() { + return true; + } + + public boolean isCobblestone() { + return dataTracker.getInt(16) != 0; + } + + public void setCobblestone(boolean cobblestone) { + dataTracker.set(16, cobblestone ? 1 : 0); + } +} diff --git a/src/test/java/net/modificationstation/sltest/render/entity/EntityRendererListener.java b/src/test/java/net/modificationstation/sltest/render/entity/EntityRendererListener.java index a76480f8b..a3a77b9ab 100644 --- a/src/test/java/net/modificationstation/sltest/render/entity/EntityRendererListener.java +++ b/src/test/java/net/modificationstation/sltest/render/entity/EntityRendererListener.java @@ -4,6 +4,7 @@ import net.minecraft.client.render.entity.UndeadEntityRenderer; import net.minecraft.client.render.entity.model.BipedEntityModel; import net.modificationstation.sltest.entity.PoorGuy; +import net.modificationstation.sltest.entity.StoneEntity; import net.modificationstation.stationapi.api.client.event.render.entity.EntityRendererRegisterEvent; public class EntityRendererListener { @@ -11,5 +12,6 @@ public class EntityRendererListener { @EventListener public void registerEntityRenderers(EntityRendererRegisterEvent event) { event.register(PoorGuy.class, new UndeadEntityRenderer(new BipedEntityModel(), 0.5f)); + event.register(StoneEntity.class, new StoneEntityRenderer()); } } diff --git a/src/test/java/net/modificationstation/sltest/render/entity/StoneEntityRenderer.java b/src/test/java/net/modificationstation/sltest/render/entity/StoneEntityRenderer.java new file mode 100644 index 000000000..5c1ebc150 --- /dev/null +++ b/src/test/java/net/modificationstation/sltest/render/entity/StoneEntityRenderer.java @@ -0,0 +1,25 @@ +package net.modificationstation.sltest.render.entity; + +import net.minecraft.block.Block; +import net.minecraft.client.render.block.BlockRenderManager; +import net.modificationstation.sltest.entity.StoneEntity; +import net.modificationstation.stationapi.api.template.entityrenderer.TemplateEntityRenderer; +import org.lwjgl.opengl.GL11; + +public class StoneEntityRenderer extends TemplateEntityRenderer { + private static final BlockRenderManager blockRenderManager = new BlockRenderManager(); + + @Override + public void renderEntity(StoneEntity entity, double x, double y, double z, float yaw, float tickDelta) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)x, (float)y + 0.5F, (float)z); + this.bindTexture("/terrain.png"); + blockRenderManager.render(entity.isCobblestone() ? Block.COBBLESTONE : Block.STONE, 0, entity.getBrightnessAtEyes(tickDelta)); + GL11.glPopMatrix(); + } + + @Override + public void postRenderEntity(StoneEntity entity, double dx, double dy, double dz, float yaw, float tickDelta) { + + } +} diff --git a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/entityrenderer/EntityRendererTemplate.java b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/entityrenderer/EntityRendererTemplate.java new file mode 100644 index 000000000..e0a6f630f --- /dev/null +++ b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/entityrenderer/EntityRendererTemplate.java @@ -0,0 +1,9 @@ +package net.modificationstation.stationapi.api.template.entityrenderer; + +import net.minecraft.entity.Entity; + +public interface EntityRendererTemplate { + void renderEntity(T entity, double x, double y, double z, float yaw, float tickDelta); + + void postRenderEntity(T entity, double dx, double dy, double dz, float yaw, float tickDelta); +} diff --git a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/entityrenderer/TemplateEntityRenderer.java b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/entityrenderer/TemplateEntityRenderer.java new file mode 100644 index 000000000..5d77a97d1 --- /dev/null +++ b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/entityrenderer/TemplateEntityRenderer.java @@ -0,0 +1,23 @@ +package net.modificationstation.stationapi.api.template.entityrenderer; + +import net.minecraft.client.render.entity.EntityRenderer; +import net.minecraft.entity.Entity; + +@SuppressWarnings("unchecked") +public abstract class TemplateEntityRenderer extends EntityRenderer implements EntityRendererTemplate{ + @Override + public void render(Entity entity, double x, double y, double z, float yaw, float pitch) { + this.renderEntity((T)entity, x, y, z, yaw, pitch); + } + + @Override + public void postRender(Entity entity, double dx, double dy, double dz, float yaw, float tickDelta) { + this.postRenderEntity((T)entity, dx, dy, dz, yaw, tickDelta); + } + + @Override + public abstract void renderEntity(T entity, double x, double y, double z, float yaw, float tickDelta); + + @Override + public abstract void postRenderEntity(T entity, double dx, double dy, double dz, float yaw, float tickDelta); +}