From 6791ed30b4d404637c8c21751597d9beb0d78b9f Mon Sep 17 00:00:00 2001
From: chylex <contact@chylex.com>
Date: Fri, 18 Jan 2019 05:00:35 +0100
Subject: [PATCH] Create reusable FX data and handler classes w/ common
 parameters

---
 src/main/java/chylex/hee/game/fx/FxBlockData.kt   | 11 +++++++++++
 .../java/chylex/hee/game/fx/FxBlockHandler.kt     | 15 +++++++++++++++
 src/main/java/chylex/hee/game/fx/FxEntityData.kt  | 10 ++++++++++
 .../java/chylex/hee/game/fx/FxEntityHandler.kt    | 14 ++++++++++++++
 src/main/java/chylex/hee/game/fx/IFxData.kt       |  6 ++++++
 src/main/java/chylex/hee/game/fx/IFxHandler.kt    |  9 +++++++++
 6 files changed, 65 insertions(+)
 create mode 100644 src/main/java/chylex/hee/game/fx/FxBlockData.kt
 create mode 100644 src/main/java/chylex/hee/game/fx/FxBlockHandler.kt
 create mode 100644 src/main/java/chylex/hee/game/fx/FxEntityData.kt
 create mode 100644 src/main/java/chylex/hee/game/fx/FxEntityHandler.kt
 create mode 100644 src/main/java/chylex/hee/game/fx/IFxData.kt
 create mode 100644 src/main/java/chylex/hee/game/fx/IFxHandler.kt

diff --git a/src/main/java/chylex/hee/game/fx/FxBlockData.kt b/src/main/java/chylex/hee/game/fx/FxBlockData.kt
new file mode 100644
index 00000000..95ee98ba
--- /dev/null
+++ b/src/main/java/chylex/hee/game/fx/FxBlockData.kt
@@ -0,0 +1,11 @@
+package chylex.hee.game.fx
+import chylex.hee.system.util.use
+import chylex.hee.system.util.writePos
+import io.netty.buffer.ByteBuf
+import net.minecraft.util.math.BlockPos
+
+class FxBlockData(private val pos: BlockPos) : IFxData{
+	override fun write(buffer: ByteBuf) = buffer.use {
+		writePos(pos)
+	}
+}
diff --git a/src/main/java/chylex/hee/game/fx/FxBlockHandler.kt b/src/main/java/chylex/hee/game/fx/FxBlockHandler.kt
new file mode 100644
index 00000000..ede0896c
--- /dev/null
+++ b/src/main/java/chylex/hee/game/fx/FxBlockHandler.kt
@@ -0,0 +1,15 @@
+package chylex.hee.game.fx
+import chylex.hee.system.util.readPos
+import chylex.hee.system.util.use
+import io.netty.buffer.ByteBuf
+import net.minecraft.util.math.BlockPos
+import net.minecraft.world.World
+import java.util.Random
+
+abstract class FxBlockHandler : IFxHandler<FxBlockData>{
+	final override fun handle(buffer: ByteBuf, world: World, rand: Random) = buffer.use {
+		handle(readPos(), world, rand)
+	}
+	
+	abstract fun handle(pos: BlockPos, world: World, rand: Random)
+}
diff --git a/src/main/java/chylex/hee/game/fx/FxEntityData.kt b/src/main/java/chylex/hee/game/fx/FxEntityData.kt
new file mode 100644
index 00000000..1c0fba6f
--- /dev/null
+++ b/src/main/java/chylex/hee/game/fx/FxEntityData.kt
@@ -0,0 +1,10 @@
+package chylex.hee.game.fx
+import chylex.hee.system.util.use
+import io.netty.buffer.ByteBuf
+import net.minecraft.entity.Entity
+
+class FxEntityData(private val entity: Entity) : IFxData{
+	override fun write(buffer: ByteBuf) = buffer.use {
+		writeInt(entity.entityId)
+	}
+}
diff --git a/src/main/java/chylex/hee/game/fx/FxEntityHandler.kt b/src/main/java/chylex/hee/game/fx/FxEntityHandler.kt
new file mode 100644
index 00000000..40b1cc3d
--- /dev/null
+++ b/src/main/java/chylex/hee/game/fx/FxEntityHandler.kt
@@ -0,0 +1,14 @@
+package chylex.hee.game.fx
+import chylex.hee.system.util.use
+import io.netty.buffer.ByteBuf
+import net.minecraft.entity.Entity
+import net.minecraft.world.World
+import java.util.Random
+
+abstract class FxEntityHandler : IFxHandler<FxEntityData>{
+	final override fun handle(buffer: ByteBuf, world: World, rand: Random) = buffer.use {
+		world.getEntityByID(readInt())?.let { handle(it, rand) }
+	}
+	
+	abstract fun handle(entity: Entity, rand: Random)
+}
diff --git a/src/main/java/chylex/hee/game/fx/IFxData.kt b/src/main/java/chylex/hee/game/fx/IFxData.kt
new file mode 100644
index 00000000..5d34fe71
--- /dev/null
+++ b/src/main/java/chylex/hee/game/fx/IFxData.kt
@@ -0,0 +1,6 @@
+package chylex.hee.game.fx
+import io.netty.buffer.ByteBuf
+
+interface IFxData{
+	fun write(buffer: ByteBuf)
+}
diff --git a/src/main/java/chylex/hee/game/fx/IFxHandler.kt b/src/main/java/chylex/hee/game/fx/IFxHandler.kt
new file mode 100644
index 00000000..c60672d5
--- /dev/null
+++ b/src/main/java/chylex/hee/game/fx/IFxHandler.kt
@@ -0,0 +1,9 @@
+package chylex.hee.game.fx
+import io.netty.buffer.ByteBuf
+import net.minecraft.world.World
+import java.util.Random
+
+@Suppress("unused")
+interface IFxHandler<T : IFxData>{
+	fun handle(buffer: ByteBuf, world: World, rand: Random)
+}