diff --git a/FightSystem_18/pom.xml b/FightSystem_18/pom.xml
index d854f64..edd0bde 100644
--- a/FightSystem_18/pom.xml
+++ b/FightSystem_18/pom.xml
@@ -37,6 +37,12 @@
1.0
+
+ org.spigotmc
+ spigot-api
+ 1.18-R0.1-SNAPSHOT
+ provided
+
steamwar
Spigot
diff --git a/FightSystem_18/src/de/steamwar/fightsystem/utils/BlockIdWrapper18.java b/FightSystem_18/src/de/steamwar/fightsystem/utils/BlockIdWrapper18.java
new file mode 100644
index 0000000..83772aa
--- /dev/null
+++ b/FightSystem_18/src/de/steamwar/fightsystem/utils/BlockIdWrapper18.java
@@ -0,0 +1,86 @@
+/*
+ This file is a part of the SteamWar software.
+
+ Copyright (C) 2021 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.fightsystem.utils;
+
+import com.sk89q.worldedit.world.fluid.FluidTypes;
+import de.steamwar.fightsystem.Config;
+import net.minecraft.core.BlockPosition;
+import net.minecraft.core.IRegistry;
+import net.minecraft.resources.MinecraftKey;
+import net.minecraft.server.level.WorldServer;
+import net.minecraft.world.entity.EntityPose;
+import net.minecraft.world.level.block.state.IBlockData;
+import net.minecraft.world.level.material.Fluid;
+import org.bukkit.World;
+import org.bukkit.block.Block;
+import org.bukkit.craftbukkit.v1_18_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_18_R1.block.CraftBlock;
+
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
+
+public class BlockIdWrapper18 implements BlockIdWrapper.IBlockIdWrapper {
+ @Override
+ public int blockToId(Block block) {
+ return net.minecraft.world.level.block.Block.p.a(((CraftBlock)block).getNMS());
+ }
+
+ @Override
+ public void setBlock(World world, int x, int y, int z, int blockState) {
+ IBlockData blockData = Objects.requireNonNull(net.minecraft.world.level.block.Block.a(blockState));
+ WorldServer cworld = ((CraftWorld)world).getHandle();
+ BlockPosition pos = new BlockPosition(x, y, z);
+ cworld.removeTileEntity(pos);
+ cworld.setTypeAndData(pos, blockData, 1042);
+ cworld.getChunkProvider().flagDirty(pos);
+ }
+
+ @Override
+ public Set getHiddenBlockIds() {
+ Set hiddenBlockIds = new HashSet<>();
+ for(String tag : Config.HiddenBlocks){
+ for(IBlockData data : IRegistry.k.get(new MinecraftKey(tag)).getStates().a()){
+ hiddenBlockIds.add(net.minecraft.world.level.block.Block.getCombinedId(data));
+ }
+ }
+
+ if(Config.HiddenBlocks.contains("water")){
+ Fluid water = FluidTypes.WATER.a(false);
+ for(IBlockData data : net.minecraft.world.level.block.Block.p){
+ if(data.getFluid() == water){
+ hiddenBlockIds.add(net.minecraft.world.level.block.Block.getCombinedId(data));
+ }
+ }
+ }
+
+ return hiddenBlockIds;
+ }
+
+ @Override
+ public int getObfuscateWith() {
+ return net.minecraft.world.level.block.Block.i(IRegistry.k.get(new MinecraftKey(Config.ObfuscateWith)).getBlockData());
+ }
+
+ @Override
+ public Object getPose(boolean sneaking) {
+ return sneaking ? EntityPose.f : EntityPose.a;
+ }
+}
diff --git a/FightSystem_18/src/de/steamwar/fightsystem/utils/CraftbukkitWrapper18.java b/FightSystem_18/src/de/steamwar/fightsystem/utils/CraftbukkitWrapper18.java
new file mode 100644
index 0000000..8ca6b68
--- /dev/null
+++ b/FightSystem_18/src/de/steamwar/fightsystem/utils/CraftbukkitWrapper18.java
@@ -0,0 +1,72 @@
+/*
+ This file is a part of the SteamWar software.
+
+ Copyright (C) 2021 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.fightsystem.utils;
+
+import de.steamwar.fightsystem.fight.FightWorld;
+import net.minecraft.world.level.chunk.Chunk;
+import org.bukkit.World;
+import org.bukkit.craftbukkit.v1_18_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_18_R1.entity.CraftEntity;
+import org.bukkit.craftbukkit.v1_18_R1.entity.CraftPlayer;
+import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftItemStack;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class CraftbukkitWrapper18 implements CraftbukkitWrapper.ICraftbukkitWrapper {
+
+ @Override
+ public void resetChunk(World world, World backup, int x, int z) {
+ net.minecraft.world.level.World w = ((CraftWorld) world).getHandle();
+ Chunk chunk = w.d(x, z);
+ Chunk backupChunk = ((CraftWorld) backup).getHandle().getChunkAt(x, z);
+
+ System.arraycopy(backupChunk.getSections(), 0, chunk.getSections(), 0, chunk.getSections().length);
+ w.tileEntityListTick.removeAll(chunk.tileEntities.values());
+ if (!FightWorld.isPaper()) {
+ w.tileEntityList.removeAll(chunk.tileEntities.values());
+ }
+ chunk.tileEntities.clear();
+ chunk.tileEntities.putAll(backupChunk.tileEntities);
+ chunk.heightMap.clear();
+ chunk.heightMap.putAll(backupChunk.heightMap);
+ }
+
+ @Override
+ public void sendResourcePack(Player player, String pack, String sha1) {
+ ((CraftPlayer)player).getHandle().setResourcePack(pack, sha1);
+ }
+
+ @Override
+ public float headRotation(Entity e) {
+ return ((CraftEntity)e).getHandle().getHeadRotation();
+ }
+
+ @Override
+ public boolean hasItems(ItemStack stack) {
+ Set keys = new HashSet<>(CraftItemStack.asNMSCopy(stack).s().d());
+ keys.remove("Enchantments");
+ keys.remove("Damage");
+ return !keys.isEmpty();
+ }
+}