Skip to content

Commit

Permalink
Added 1.19 support (#1194)
Browse files Browse the repository at this point in the history
* Implemented 1.19 nms support

* Added 1.19 as a valid server version

* Fixed issues with nms

* Changed dependencies of 1.19 to be from remote repository

* Fixed hologram names not working in 1.19

* Updated 1.19-spigot gradle
  • Loading branch information
OmerBenGera committed Jun 18, 2022
1 parent 61d3edf commit 8eb21a5
Show file tree
Hide file tree
Showing 62 changed files with 4,466 additions and 0 deletions.
2 changes: 2 additions & 0 deletions settings.gradle
Expand Up @@ -40,4 +40,6 @@ include 'v1_18_R1-Spigot'
include 'v1_16_R3-Spigot'
include 'v1_18_R2'
include 'v1_18_R2-Spigot'
include 'v1_19_R1'
include 'v1_19_R1-Spigot'

Expand Up @@ -17,6 +17,7 @@ public enum ServerVersion {
v1_16(116),
v1_17(117),
v1_18(118),
v1_19(119),

UNKONWN(-1);

Expand Down
26 changes: 26 additions & 0 deletions v1_19_R1-Spigot/build.gradle
@@ -0,0 +1,26 @@
group 'v1_19_R1-Spigot'

java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(17))
}
}

repositories {
maven { url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' }
// Repositories for libraries that the spigot api require
maven { url "https://papermc.io/repo/repository/maven-public/" }
maven { url "https://libraries.minecraft.net/" }
}

dependencies {
compileOnly 'io.papermc.paper:paper-api:1.18.2-R0.1-20220305.050345-9' // API is the same as in 1.18
compileOnly 'org.spigotmc:v1_19_R1:b3513'

compileOnly project(":API")
compileOnly parent
}

if (project.hasProperty('nms.compile_v1_19') && !Boolean.valueOf(project.findProperty("nms.compile_v1_19").toString())) {
project.tasks.all { task -> task.enabled = false }
}
@@ -0,0 +1,51 @@
package com.bgsoftware.superiorskyblock.nms.v1_19_R1.algorithms;

import org.bukkit.NamespacedKey;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.enchantments.EnchantmentTarget;

public class SpigotGlowEnchantment extends Enchantment {

public SpigotGlowEnchantment(String name) {
super(NamespacedKey.minecraft(name));
}

@Override
public String getName() {
return "SuperiorSkyblockGlow";
}

@Override
public int getMaxLevel() {
return 1;
}

@Override
public int getStartLevel() {
return 0;
}

@Override
public EnchantmentTarget getItemTarget() {
return null;
}

public boolean isTreasure() {
return false;
}

public boolean isCursed() {
return false;
}

@Override
public boolean conflictsWith(Enchantment enchantment) {
return false;
}

@Override
public boolean canEnchantItem(org.bukkit.inventory.ItemStack itemStack) {
return true;
}

}
36 changes: 36 additions & 0 deletions v1_19_R1/build.gradle
@@ -0,0 +1,36 @@
group 'v1_19_R1'

java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(17))
}
}

repositories {
maven { url "https://papermc.io/repo/repository/maven-public/" }
maven { url "https://libraries.minecraft.net/" }
}

dependencies {
compileOnly "org.spigotmc:v1_19_R1-Paper:git-02b5ec4"

compileOnly 'io.papermc.paper:paper-api:1.19-R0.1-SNAPSHOT'

compileOnly 'com.mojang:authlib:3.2.38'
compileOnly 'com.mojang:datafixerupper:4.0.26'
compileOnly 'com.mojang:brigadier:1.0.18'
compileOnly 'com.google.guava:guava:31.1-jre'
compileOnly 'com.google.code.gson:gson:2.9.0'
compileOnly 'net.kyori:adventure-key:4.10.1'
compileOnly 'net.kyori:examination-api:1.3.0'
compileOnly 'net.kyori:adventure-api:4.10.1'
compileOnly 'net.md-5:bungeecord-chat:1.16-R0.4'

compileOnly project(":v1_19_R1-Spigot")
compileOnly project(":API")
compileOnly parent
}

if (project.hasProperty('nms.compile_v1_19') && !Boolean.valueOf(project.findProperty("nms.compile_v1_19").toString())) {
project.tasks.all { task -> task.enabled = false }
}
@@ -0,0 +1,150 @@
package com.bgsoftware.superiorskyblock.nms.v1_19_R1;

import com.bgsoftware.superiorskyblock.SuperiorSkyblockPlugin;
import com.bgsoftware.superiorskyblock.api.key.Key;
import com.bgsoftware.superiorskyblock.key.KeyImpl;
import com.bgsoftware.superiorskyblock.nms.NMSAlgorithms;
import com.bgsoftware.superiorskyblock.nms.v1_19_R1.algorithms.GlowEnchantmentFactory;
import com.bgsoftware.superiorskyblock.nms.v1_19_R1.mapping.net.minecraft.core.BlockPosition;
import com.bgsoftware.superiorskyblock.nms.v1_19_R1.mapping.net.minecraft.core.RegistryBlocks;
import com.bgsoftware.superiorskyblock.nms.v1_19_R1.mapping.net.minecraft.server.level.WorldServer;
import com.bgsoftware.superiorskyblock.nms.v1_19_R1.mapping.net.minecraft.world.level.block.Block;
import com.bgsoftware.superiorskyblock.nms.v1_19_R1.mapping.net.minecraft.world.level.block.state.BlockData;
import com.bgsoftware.superiorskyblock.nms.v1_19_R1.mapping.net.minecraft.server.network.chat.ChatSerializer;
import com.bgsoftware.superiorskyblock.nms.v1_19_R1.mapping.net.minecraft.world.item.ItemStack;
import com.bgsoftware.superiorskyblock.nms.v1_19_R1.menu.MenuTileEntityBrewing;
import com.bgsoftware.superiorskyblock.nms.v1_19_R1.menu.MenuTileEntityDispenser;
import com.bgsoftware.superiorskyblock.nms.v1_19_R1.menu.MenuTileEntityFurnace;
import com.bgsoftware.superiorskyblock.nms.v1_19_R1.menu.MenuTileEntityHopper;
import net.minecraft.world.IInventory;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.command.defaults.BukkitCommand;
import org.bukkit.craftbukkit.v1_19_R1.CraftServer;
import org.bukkit.craftbukkit.v1_19_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack;
import org.bukkit.craftbukkit.v1_19_R1.util.CraftChatMessage;
import org.bukkit.craftbukkit.v1_19_R1.util.CraftMagicNumbers;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.FallingBlock;
import org.bukkit.entity.Minecart;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.potion.PotionEffect;

import java.util.EnumMap;
import java.util.function.BiFunction;

public final class NMSAlgorithmsImpl implements NMSAlgorithms {

private static final SuperiorSkyblockPlugin plugin = SuperiorSkyblockPlugin.getPlugin();
private static final EnumMap<InventoryType, MenuCreator> MENUS_HOLDER_CREATORS = new EnumMap<>(InventoryType.class);

static {
MENUS_HOLDER_CREATORS.put(InventoryType.DISPENSER, MenuTileEntityDispenser::new);
MENUS_HOLDER_CREATORS.put(InventoryType.DROPPER, MenuTileEntityDispenser::new);
MENUS_HOLDER_CREATORS.put(InventoryType.FURNACE, MenuTileEntityFurnace::new);
MENUS_HOLDER_CREATORS.put(InventoryType.BREWING, MenuTileEntityBrewing::new);
MENUS_HOLDER_CREATORS.put(InventoryType.HOPPER, MenuTileEntityHopper::new);
MENUS_HOLDER_CREATORS.put(InventoryType.BLAST_FURNACE, MenuTileEntityFurnace::new);
MENUS_HOLDER_CREATORS.put(InventoryType.SMOKER, MenuTileEntityFurnace::new);
}

@Override
public void registerCommand(BukkitCommand command) {
((CraftServer) plugin.getServer()).getCommandMap().register("superiorskyblock2", command);
}

@Override
public String parseSignLine(String original) {
return ChatSerializer.toJson(CraftChatMessage.fromString(original)[0]);
}

@Override
public int getCombinedId(Location location) {
org.bukkit.World bukkitWorld = location.getWorld();

if (bukkitWorld == null)
return 0;

WorldServer world = new WorldServer(((CraftWorld) bukkitWorld).getHandle());
BlockPosition blockPosition = new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ());
BlockData blockData = world.getType(blockPosition);
return Block.getCombinedId(blockData);
}

@Override
public int getCombinedId(Material material, byte data) {
BlockData blockData;

if (data == 0) {
Block block = Block.ofNullable(CraftMagicNumbers.getBlock(material));
if (block == null)
return -1;
blockData = block.getBlockData();
} else {
blockData = BlockData.ofNullable(CraftMagicNumbers.getBlock(material, data));
}

return blockData == null ? -1 : Block.getCombinedId(blockData);
}

@Override
public int compareMaterials(Material o1, Material o2) {
int firstMaterial = o1.isBlock() ? Block.getCombinedId(new Block(CraftMagicNumbers.getBlock(o1)).getBlockData()) : o1.ordinal();
int secondMaterial = o2.isBlock() ? Block.getCombinedId(new Block(CraftMagicNumbers.getBlock(o2)).getBlockData()) : o2.ordinal();
return Integer.compare(firstMaterial, secondMaterial);
}

@Override
public Key getBlockKey(int combinedId) {
Material material = CraftMagicNumbers.getMaterial(Block.getByCombinedId(combinedId).getBlock().getHandle());
return KeyImpl.of(material, (byte) 0);
}

@Override
public Key getMinecartBlock(Minecart minecart) {
return KeyImpl.of(minecart.getDisplayBlockData().getMaterial(), (byte) 0);
}

@Override
public Key getFallingBlockType(FallingBlock fallingBlock) {
return KeyImpl.of(fallingBlock.getBlockData().getMaterial(), (byte) 0);
}

@Override
public void setCustomModel(ItemMeta itemMeta, int customModel) {
itemMeta.setCustomModelData(customModel);
}

@Override
public void addPotion(PotionMeta potionMeta, PotionEffect potionEffect) {
if (!potionMeta.hasCustomEffects())
potionMeta.setColor(potionEffect.getType().getColor());
potionMeta.addCustomEffect(potionEffect, true);
}

@Override
public String getMinecraftKey(org.bukkit.inventory.ItemStack itemStack) {
return RegistryBlocks.getKey(RegistryBlocks.ITEM_REGISTRY,
new ItemStack(CraftItemStack.asNMSCopy(itemStack)).getItem()).toString();
}

@Override
public Enchantment getGlowEnchant() {
return GlowEnchantmentFactory.createEnchantment();
}

@Override
public Object createMenuInventoryHolder(InventoryType inventoryType, InventoryHolder defaultHolder, String title) {
MenuCreator menuCreator = MENUS_HOLDER_CREATORS.get(inventoryType);
return menuCreator == null ? null : menuCreator.apply(defaultHolder, title);
}

private interface MenuCreator extends BiFunction<InventoryHolder, String, IInventory> {

}

}
@@ -0,0 +1,24 @@
package com.bgsoftware.superiorskyblock.nms.v1_19_R1;

import com.bgsoftware.superiorskyblock.world.blocks.ICachedBlock;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.data.BlockData;

public final class NMSCachedBlock implements ICachedBlock {

private final BlockData blockData;

public NMSCachedBlock(Block block) {
this.blockData = block.getBlockData();
}

@Override
public void setBlock(Location location) {
World world = location.getWorld();
if (world != null)
world.getBlockAt(location).setBlockData(blockData);
}

}

0 comments on commit 8eb21a5

Please sign in to comment.