From 6c0c6a7ae13d264309f2e724e0ce0a94c4822f53 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Fri, 14 Jan 2022 18:58:00 +0100 Subject: [PATCH] First steps to 1.18 wrappers Signed-off-by: Lixfel --- FightSystem_18/pom.xml | 6 ++ .../fightsystem/utils/BlockIdWrapper18.java | 86 +++++++++++++++++++ .../utils/CraftbukkitWrapper18.java | 72 ++++++++++++++++ 3 files changed, 164 insertions(+) create mode 100644 FightSystem_18/src/de/steamwar/fightsystem/utils/BlockIdWrapper18.java create mode 100644 FightSystem_18/src/de/steamwar/fightsystem/utils/CraftbukkitWrapper18.java 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(); + } +}