diff --git a/BauSystem_19/src/de/steamwar/bausystem/features/simulator/Explosion.java b/BauSystem_19/src/de/steamwar/bausystem/features/simulator/Explosion.java
new file mode 100644
index 00000000..64d20126
--- /dev/null
+++ b/BauSystem_19/src/de/steamwar/bausystem/features/simulator/Explosion.java
@@ -0,0 +1,102 @@
+/*
+ * This file is a part of the SteamWar software.
+ *
+ * Copyright (C) 2023 SteamWar.de-Serverteam
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package de.steamwar.bausystem.features.simulator;
+
+import org.bukkit.block.data.BlockData;
+import org.bukkit.block.data.Waterlogged;
+import org.bukkit.util.Vector;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Random;
+import java.util.Set;
+
+public class Explosion {
+
+ private static final Random RANDOM = new Random();
+ private static final float POWER = 4.0F;
+
+ private final TNT tnt;
+ private final double x;
+ private final double y;
+ private final double z;
+
+ private final List entities;
+
+ public Explosion(TNT tnt, double x, double y, double z, List entities) {
+ this.tnt = tnt;
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ this.entities = entities;
+ }
+
+ public void calculate() {
+ Set affectedBlocks = new HashSet<>();
+ for (int i = 0; i < 16; ++i) {
+ for (int j = 0; j < 16; ++j) {
+ for (int k = 0; k < 16; ++k) {
+ if (i == 0 || i == 15 || j == 0 || j == 15 || k == 0 || k == 15) {
+ double d = i / 15.0F * 2.0F - 1.0F;
+ double e = j / 15.0F * 2.0F - 1.0F;
+ double f = k / 15.0F * 2.0F - 1.0F;
+ double g = Math.sqrt(d * d + e * e + f * f);
+ d /= g;
+ e /= g;
+ f /= g;
+
+ float h = POWER * (0.7F + RANDOM.nextFloat() * 0.6F);
+ double m = x;
+ double n = y;
+ double o = z;
+
+ for (; h > 0.0F; h -= 0.22500001F) {
+ int x = TNT.floor(m);
+ int y = TNT.floor(n);
+ int z = TNT.floor(o);
+
+ BlockData blockData = Simulator19.getBlockData(x, y, z);
+ if (blockData != null) {
+ h -= (blockData.getMaterial().getBlastResistance() + 0.3F) * 0.3F;
+ }
+ if (blockData instanceof Waterlogged) {
+ Waterlogged waterlogged = (Waterlogged) blockData;
+ if (waterlogged.isWaterlogged()) {
+ h = 0.0F;
+ }
+ }
+
+ if (h > 0.0F) {
+ affectedBlocks.add(new Vector(x, y, z));
+ }
+
+ m += d * 0.30000001192092896;
+ n += e * 0.30000001192092896;
+ o += f * 0.30000001192092896;
+ }
+ }
+ }
+ }
+ }
+
+ // TODO: Add velocity change of other tnt entities
+ // System.out.println(affectedBlocks.size());
+ }
+}
diff --git a/BauSystem_19/src/de/steamwar/bausystem/features/simulator/TNT.java b/BauSystem_19/src/de/steamwar/bausystem/features/simulator/TNT.java
index bbc9c137..bb8d70e6 100644
--- a/BauSystem_19/src/de/steamwar/bausystem/features/simulator/TNT.java
+++ b/BauSystem_19/src/de/steamwar/bausystem/features/simulator/TNT.java
@@ -81,7 +81,8 @@ public class TNT {
this.fuse--;
if (this.fuse <= 0) {
- // TODO: Add explosion
+ Explosion explosion = new Explosion(this, x, y + 0.98 * 0.0625, z);
+ explosion.calculate();
return true;
}
return false;