Skip to content

Commit

Permalink
Added support for 1.19.3
Browse files Browse the repository at this point in the history
  • Loading branch information
OmerBenGera committed Dec 10, 2022
1 parent 7728448 commit 0c994e0
Show file tree
Hide file tree
Showing 27 changed files with 3,383 additions and 1 deletion.
1 change: 1 addition & 0 deletions settings.gradle
Expand Up @@ -52,4 +52,5 @@ include 'v1182'
include 'v1191'
include 'v119'
include 'v1192'
include 'v1193'

Expand Up @@ -403,7 +403,8 @@ private boolean loadNMSAdapter() {
new Pair<>(2975, "v1182"),
new Pair<>(3105, "v119"),
new Pair<>(3117, "v1191"),
new Pair<>(3120, "v1192")
new Pair<>(3120, "v1192"),
new Pair<>(3218, "v1193")
);

for (Pair<Integer, String> versionData : versions) {
Expand Down
36 changes: 36 additions & 0 deletions v1193/build.gradle
@@ -0,0 +1,36 @@
plugins {
id("io.papermc.paperweight.userdev") version "1.3.8"
}

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

dependencies {
paperweightDevelopmentBundle("io.papermc.paper:dev-bundle:1.19.3-R0.1-SNAPSHOT")
compileOnly project(":NMS-Spigot")
compileOnly project(":NMS-Paper")
compileOnly project(":API")
compileOnly parent
}

shadowJar {
archiveFileName = "${project.name}-exclude.jar"
}

assemble {
dependsOn(reobfJar)
}

tasks {
reobfJar {
File outputFile = new File(rootProject.archiveFolder, "reobf/${project.name}.jar")
outputJar.set(layout.buildDirectory.file(outputFile.getPath()))
}
}

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,166 @@
package com.bgsoftware.superiorskyblock.nms.v1193;

import com.bgsoftware.superiorskyblock.SuperiorSkyblockPlugin;
import com.bgsoftware.superiorskyblock.api.key.Key;
import com.bgsoftware.superiorskyblock.core.key.KeyImpl;
import com.bgsoftware.superiorskyblock.nms.NMSAlgorithms;
import com.bgsoftware.superiorskyblock.nms.algorithms.PaperGlowEnchantment;
import com.bgsoftware.superiorskyblock.nms.algorithms.SpigotGlowEnchantment;
import com.bgsoftware.superiorskyblock.nms.v1193.menu.MenuBrewingStandBlockEntity;
import com.bgsoftware.superiorskyblock.nms.v1193.menu.MenuDispenserBlockEntity;
import com.bgsoftware.superiorskyblock.nms.v1193.menu.MenuFurnaceBlockEntity;
import com.bgsoftware.superiorskyblock.nms.v1193.menu.MenuHopperBlockEntity;
import net.minecraft.core.BlockPos;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.Container;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.command.defaults.BukkitCommand;
import org.bukkit.craftbukkit.v1_19_R2.CraftServer;
import org.bukkit.craftbukkit.v1_19_R2.CraftWorld;
import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftItemStack;
import org.bukkit.craftbukkit.v1_19_R2.util.CraftChatMessage;
import org.bukkit.craftbukkit.v1_19_R2.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.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.potion.PotionEffect;

import javax.annotation.Nullable;
import java.util.EnumMap;
import java.util.function.BiFunction;

public class NMSAlgorithmsImpl implements NMSAlgorithms {

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

static {
MENUS_HOLDER_CREATORS.put(InventoryType.DISPENSER, MenuDispenserBlockEntity::new);
MENUS_HOLDER_CREATORS.put(InventoryType.DROPPER, MenuDispenserBlockEntity::new);
MENUS_HOLDER_CREATORS.put(InventoryType.FURNACE, MenuFurnaceBlockEntity::new);
MENUS_HOLDER_CREATORS.put(InventoryType.BREWING, MenuBrewingStandBlockEntity::new);
MENUS_HOLDER_CREATORS.put(InventoryType.HOPPER, MenuHopperBlockEntity::new);
MENUS_HOLDER_CREATORS.put(InventoryType.BLAST_FURNACE, MenuFurnaceBlockEntity::new);
MENUS_HOLDER_CREATORS.put(InventoryType.SMOKER, MenuFurnaceBlockEntity::new);
}

private final SuperiorSkyblockPlugin plugin;

public NMSAlgorithmsImpl(SuperiorSkyblockPlugin plugin) {
this.plugin = plugin;
}

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

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

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

if (bukkitWorld == null)
return 0;

ServerLevel serverLevel = ((CraftWorld) bukkitWorld).getHandle();
BlockPos blockPos = new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ());
BlockState blockState = serverLevel.getBlockState(blockPos);
return Block.getId(blockState);
}

@Override
public int getCombinedId(Material material, byte data) {
BlockState blockState;

if (data == 0) {
Block block = CraftMagicNumbers.getBlock(material);
if (block == null)
return -1;
blockState = block.defaultBlockState();
} else {
blockState = CraftMagicNumbers.getBlock(material, data);
}

return blockState == null ? -1 : Block.getId(blockState);
}

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

@Override
public Key getBlockKey(int combinedId) {
Material material = CraftMagicNumbers.getMaterial(Block.stateById(combinedId).getBlock());
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(ItemStack itemStack) {
return BuiltInRegistries.ITEM.getKey(CraftItemStack.asNMSCopy(itemStack).getItem()).toString();
}

@Override
public Enchantment getGlowEnchant() {
try {
return new PaperGlowEnchantment("superior_glowing_enchant");
} catch (Throwable error) {
return new SpigotGlowEnchantment("superior_glowing_enchant");
}
}

@Nullable
@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);
}

@Override
public int getMaxWorldSize() {
return Bukkit.getMaxWorldSize();
}

private interface MenuCreator extends BiFunction<InventoryHolder, String, Container> {
}

}

0 comments on commit 0c994e0

Please sign in to comment.