mirror of
https://github.com/songoda/SongodaCore.git
synced 2024-11-27 12:35:12 +01:00
1.17 Support
This commit is contained in:
parent
3d415d6da6
commit
7ab0c4d106
@ -0,0 +1,75 @@
|
|||||||
|
package com.songoda.core.compatibility;
|
||||||
|
|
||||||
|
public enum ClassMapping {
|
||||||
|
|
||||||
|
BIOME_BASE("world.level.biome", "BiomeBase"),
|
||||||
|
BIOME_STORAGE("world.level.chunk", "BiomeStorage"),
|
||||||
|
BLOCK("level.block", "BlockPosition"),
|
||||||
|
BLOCK_BASE("world.level.block.state", "BlockBase"),
|
||||||
|
BLOCK_BUTTON_ABSTRACT("world.level.block", "BlockButtonAbstract"),
|
||||||
|
BLOCK_PRESSURE_PLATE_ABSTRACT("world.level.block", "BlockPressurePlateAbstract"),
|
||||||
|
BLOCK_LEVER("world.level.block", "BlockLever"),
|
||||||
|
BLOCKS("world.level.block", "Blocks"),
|
||||||
|
BLOCK_POSITION("core", "BlockPosition"),
|
||||||
|
CHAT_MESSAGE_TYPE("network.chat", "ChatMessageType"),
|
||||||
|
CHUNK("world.level.chunk", "Chunk"),
|
||||||
|
ENTITY("world.entity", "Entity"),
|
||||||
|
ENTITY_INSENTIENT("world.entity", "EntityInsentient"),
|
||||||
|
ENTITY_PLAYER("server.level", "EntityPlayer"),
|
||||||
|
I_BLOCK_DATA("world.level.block.state", "IBlockData"),
|
||||||
|
I_CHAT_BASE_COMPONENT("network.chat", "IChatBaseComponent"),
|
||||||
|
I_REGISTRY("core", "IRegistry"),
|
||||||
|
ITEM("world.item", "Item"),
|
||||||
|
ITEM_STACK("world.item", "ItemStack"),
|
||||||
|
LEVEL_ENTITY_GETTER("level.entity", "LevelEntityGetter"),
|
||||||
|
MINECRAFT_SERVER("server", "MinecraftServer"),
|
||||||
|
NBT_TAG_COMPOUND("nbt", "NBTTagCompound"),
|
||||||
|
NBT_TAG_LIST("nbt", "NBTTagList"),
|
||||||
|
NBT_BASE("nbt", "NBTBase"),
|
||||||
|
PERSISTENT_ENTITY_SECTION_MANAGER("world.level.entity", "PersistentEntitySectionManager"),
|
||||||
|
PACKET("network.protocol", "Packet"),
|
||||||
|
PACKET_PLAY_OUT_CHAT("network.protocol.game", "PacketPlayOutChat"),
|
||||||
|
PACKET_PLAY_OUT_WORLD_BORDER("PacketPlayOutWorldBorder"), // Removed in 1.17
|
||||||
|
PLAYER_CONNECTION("server.network", "PlayerConnection"),
|
||||||
|
WORLD("world.level", "World"),
|
||||||
|
WORLD_BORDER("world.level.border", "WorldBorder"),
|
||||||
|
WORLD_SERVER("server.level", "WorldServer"),
|
||||||
|
|
||||||
|
CRAFT_BLOCK("block", "CraftBlock"),
|
||||||
|
CRAFT_BLOCK_DATA("block.data", "CraftBlockData"),
|
||||||
|
CRAFT_CHUNK("craftChunk"),
|
||||||
|
CRAFT_ENTITY("entity", "CraftEntity"),
|
||||||
|
CRAFT_PLAYER("entity", "CraftPlayer"),
|
||||||
|
CRAFT_WORLD("CraftWorld");
|
||||||
|
|
||||||
|
private final String packageName;
|
||||||
|
private final String className;
|
||||||
|
|
||||||
|
ClassMapping(String packageName) {
|
||||||
|
this(null, packageName);
|
||||||
|
}
|
||||||
|
|
||||||
|
ClassMapping(String packageName, String className) {
|
||||||
|
this.packageName = packageName;
|
||||||
|
this.className = className;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Class<?> getClazz() {
|
||||||
|
return getClazz(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Class<?> getClazz(String sub) {
|
||||||
|
try {
|
||||||
|
String name = sub == null ? className : className + "$" + sub;
|
||||||
|
if (className.startsWith("Craft"))
|
||||||
|
return Class.forName("org.bukkit.craftbukkit." + ServerVersion.getServerVersionString()
|
||||||
|
+ (packageName == null ? "" : "." + packageName) + "." + name);
|
||||||
|
return Class.forName("net.minecraft." + (
|
||||||
|
ServerVersion.isServerVersionAtLeast(ServerVersion.V1_17) && packageName != null
|
||||||
|
? packageName : "server." + ServerVersion.getServerVersionString()) + "." + name);
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -98,6 +98,8 @@ public class ClientVersion {
|
|||||||
case 753:
|
case 753:
|
||||||
case 754:
|
case 754:
|
||||||
return ServerVersion.V1_16;
|
return ServerVersion.V1_16;
|
||||||
|
case 755:
|
||||||
|
return ServerVersion.V1_17;
|
||||||
}
|
}
|
||||||
return version > 498 ? ServerVersion.getServerVersion() : ServerVersion.UNKNOWN;
|
return version > 498 ? ServerVersion.getServerVersion() : ServerVersion.UNKNOWN;
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,10 @@ import java.util.Set;
|
|||||||
*/
|
*/
|
||||||
public enum CompatibleBiome {
|
public enum CompatibleBiome {
|
||||||
|
|
||||||
|
/* 1.17 */
|
||||||
|
DRIPSTONE_CAVES(ServerVersion.V1_17),
|
||||||
|
LUSH_CAVES(ServerVersion.V1_17),
|
||||||
|
|
||||||
/* 1.16 */
|
/* 1.16 */
|
||||||
SOUL_SAND_VALLEY(ServerVersion.V1_16),
|
SOUL_SAND_VALLEY(ServerVersion.V1_16),
|
||||||
CRIMSON_FOREST(ServerVersion.V1_16),
|
CRIMSON_FOREST(ServerVersion.V1_16),
|
||||||
@ -127,12 +131,12 @@ public enum CompatibleBiome {
|
|||||||
|
|
||||||
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_15)) {
|
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_15)) {
|
||||||
try {
|
try {
|
||||||
Class<?> classBiomeBase = Class.forName("net.minecraft.server." + ServerVersion.getServerVersionString() + ".BiomeBase"),
|
Class<?> classBiomeBase = ClassMapping.BIOME_BASE.getClazz(),
|
||||||
classCraftChunk = Class.forName("org.bukkit.craftbukkit." + ServerVersion.getServerVersionString() + ".CraftChunk"),
|
classCraftChunk = ClassMapping.CRAFT_CHUNK.getClazz(),
|
||||||
classCraftBlock = Class.forName("org.bukkit.craftbukkit." + ServerVersion.getServerVersionString() + ".block.CraftBlock"),
|
classCraftBlock = ClassMapping.CRAFT_BLOCK.getClazz(),
|
||||||
classChunk = Class.forName("net.minecraft.server." + ServerVersion.getServerVersionString() + ".Chunk"),
|
classChunk = ClassMapping.CHUNK.getClazz(),
|
||||||
classBiomeStorage = Class.forName("net.minecraft.server." + ServerVersion.getServerVersionString() + ".BiomeStorage"),
|
classBiomeStorage = ClassMapping.BIOME_STORAGE.getClazz(),
|
||||||
classIRegistry = Class.forName("net.minecraft.server." + ServerVersion.getServerVersionString() + ".IRegistry");
|
classIRegistry = ClassMapping.I_REGISTRY.getClazz();
|
||||||
|
|
||||||
methodBiomeToBiomeBase = isAbove1_16_R1 ? classCraftBlock.getMethod("biomeToBiomeBase", classIRegistry, Biome.class)
|
methodBiomeToBiomeBase = isAbove1_16_R1 ? classCraftBlock.getMethod("biomeToBiomeBase", classIRegistry, Biome.class)
|
||||||
: classCraftBlock.getMethod("biomeToBiomeBase", Biome.class);
|
: classCraftBlock.getMethod("biomeToBiomeBase", Biome.class);
|
||||||
@ -149,7 +153,7 @@ public enum CompatibleBiome {
|
|||||||
fieldStorageRegistry = classBiomeStorage.getDeclaredField("g");
|
fieldStorageRegistry = classBiomeStorage.getDeclaredField("g");
|
||||||
}
|
}
|
||||||
fieldStorageRegistry.setAccessible(true);
|
fieldStorageRegistry.setAccessible(true);
|
||||||
} catch (NoSuchMethodException | NoSuchFieldException | ClassNotFoundException e) {
|
} catch (NoSuchMethodException | NoSuchFieldException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
package com.songoda.core.compatibility;
|
package com.songoda.core.compatibility;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.GameMode;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.player.PlayerItemBreakEvent;
|
|
||||||
import org.bukkit.inventory.EquipmentSlot;
|
import org.bukkit.inventory.EquipmentSlot;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
@ -99,56 +96,4 @@ public enum CompatibleHand {
|
|||||||
else
|
else
|
||||||
player.getInventory().setItemInOffHand(item);
|
player.getInventory().setItemInOffHand(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Class<?> cb_CraftPlayer;
|
|
||||||
private static Method getHandle, playBreak, asNMSCopy;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Damage the selected item
|
|
||||||
*
|
|
||||||
* @param player the player who's item you want to damage
|
|
||||||
* @param damage the amount of damage to apply to the item
|
|
||||||
*/
|
|
||||||
public void damageItem(Player player, short damage) {
|
|
||||||
if (player.getGameMode() == GameMode.CREATIVE) return;
|
|
||||||
|
|
||||||
if (cb_CraftPlayer == null) {
|
|
||||||
try {
|
|
||||||
cb_CraftPlayer = Class.forName("org.bukkit.craftbukkit." + ServerVersion.getServerVersionString() + ".entity.CraftPlayer");
|
|
||||||
Class<?> mc_EntityLiving = Class.forName("net.minecraft.server." + ServerVersion.getServerVersionString() + ".EntityLiving");
|
|
||||||
Class<?> cb_ItemStack = Class.forName("org.bukkit.craftbukkit." + ServerVersion.getServerVersionString() + ".inventory.CraftItemStack");
|
|
||||||
Class<?> mc_ItemStack = Class.forName("net.minecraft.server." + ServerVersion.getServerVersionString() + ".ItemStack");
|
|
||||||
getHandle = cb_CraftPlayer.getMethod("getHandle");
|
|
||||||
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13))
|
|
||||||
playBreak = mc_EntityLiving.getDeclaredMethod("a", mc_ItemStack, int.class); //Consistent from 1.16-1.13
|
|
||||||
else
|
|
||||||
playBreak = mc_EntityLiving.getDeclaredMethod("b", mc_ItemStack); //Consistent from 1.12-1.8
|
|
||||||
playBreak.setAccessible(true);
|
|
||||||
asNMSCopy = cb_ItemStack.getDeclaredMethod("asNMSCopy", ItemStack.class);
|
|
||||||
} catch (NoSuchMethodException | ClassNotFoundException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ItemStack item = getItem(player);
|
|
||||||
|
|
||||||
short newDurability = (short) (item.getDurability() + damage);
|
|
||||||
|
|
||||||
if (newDurability >= item.getType().getMaxDurability()) {
|
|
||||||
PlayerItemBreakEvent breakEvent = new PlayerItemBreakEvent(player, item);
|
|
||||||
Bukkit.getServer().getPluginManager().callEvent(breakEvent);
|
|
||||||
try {
|
|
||||||
if (playBreak.getParameterCount() == 2)
|
|
||||||
playBreak.invoke(getHandle.invoke(cb_CraftPlayer.cast(player)), asNMSCopy.invoke(null, item), 1);
|
|
||||||
else
|
|
||||||
playBreak.invoke(getHandle.invoke(cb_CraftPlayer.cast(player)), asNMSCopy.invoke(item));
|
|
||||||
} catch (IllegalAccessException | InvocationTargetException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
setItem(player, null);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
item.setDurability(newDurability);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -33,9 +33,160 @@ public enum CompatibleMaterial {
|
|||||||
JUNGLE_DOOR_ITEM(429),
|
JUNGLE_DOOR_ITEM(429),
|
||||||
ACACIA_DOOR_ITEM(430),
|
ACACIA_DOOR_ITEM(430),
|
||||||
DARK_OAK_DOOR_ITEM(431),
|
DARK_OAK_DOOR_ITEM(431),
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* 1.17 */
|
||||||
|
AMETHYST_BLOCK(),
|
||||||
|
AMETHYST_CLUSTER(),
|
||||||
|
AMETHYST_SHARD(),
|
||||||
|
AXOLOTL_BUCKET(),
|
||||||
|
AXOLOTL_SPAWN_EGG(),
|
||||||
|
AZALEA(),
|
||||||
|
AZALEA_LEAVES(),
|
||||||
|
BIG_DRIPLEAF(),
|
||||||
|
BIG_DRIPLEAF_STEM(),
|
||||||
|
BLACK_CANDLE(),
|
||||||
|
BLACK_CANDLE_CAKE(),
|
||||||
|
BLUE_CANDLE(),
|
||||||
|
BLUE_CANDLE_CAKE(),
|
||||||
|
BROWN_CANDLE(),
|
||||||
|
BROWN_CANDLE_CAKE(),
|
||||||
|
BUDDING_AMETHYST(),
|
||||||
|
BUNDLE(),
|
||||||
|
CALCITE(),
|
||||||
|
CANDLE(),
|
||||||
|
CANDLE_CAKE(),
|
||||||
|
CAVE_VINES(),
|
||||||
|
CAVE_VINES_PLANT(),
|
||||||
|
CHISELED_DEEPSLATE(),
|
||||||
|
COBBLED_DEEPSLATE(),
|
||||||
|
COBBLED_DEEPSLATE_SLAB(),
|
||||||
|
COBBLED_DEEPSLATE_STAIRS(),
|
||||||
|
COBBLED_DEEPSLATE_WALL(),
|
||||||
|
COPPER_BLOCK(),
|
||||||
|
COPPER_INGOT(),
|
||||||
|
COPPER_ORE(),
|
||||||
|
CRACKED_DEEPSLATE_BRICKS(),
|
||||||
|
CRACKED_DEEPSLATE_TILES(),
|
||||||
|
CUT_COPPER(),
|
||||||
|
CUT_COPPER_SLAB(),
|
||||||
|
CUT_COPPER_STAIRS(),
|
||||||
|
CYAN_CANDLE(),
|
||||||
|
CYAN_CANDLE_CAKE(),
|
||||||
|
DEEPSLATE(),
|
||||||
|
DEEPSLATE_BRICKS(),
|
||||||
|
DEEPSLATE_BRICK_SLAB(),
|
||||||
|
DEEPSLATE_BRICK_STAIRS(),
|
||||||
|
DEEPSLATE_BRICK_WALL(),
|
||||||
|
DEEPSLATE_COAL_ORE(),
|
||||||
|
DEEPSLATE_COPPER_ORE(),
|
||||||
|
DEEPSLATE_DIAMOND_ORE(),
|
||||||
|
DEEPSLATE_EMERALD_ORE(),
|
||||||
|
DEEPSLATE_GOLD_ORE(),
|
||||||
|
DEEPSLATE_IRON_ORE(),
|
||||||
|
DEEPSLATE_LAPIS_ORE(),
|
||||||
|
DEEPSLATE_REDSTONE_ORE(),
|
||||||
|
DEEPSLATE_TILES(),
|
||||||
|
DEEPSLATE_TILE_SLAB(),
|
||||||
|
DEEPSLATE_TILE_STAIRS(),
|
||||||
|
DEEPSLATE_TILE_WALL(),
|
||||||
|
DRIPSTONE_BLOCK(),
|
||||||
|
EXPOSED_COPPER(),
|
||||||
|
EXPOSED_CUT_COPPER(),
|
||||||
|
EXPOSED_CUT_COPPER_SLAB(),
|
||||||
|
EXPOSED_CUT_COPPER_STAIRS(),
|
||||||
|
FLOWERING_AZALEA(),
|
||||||
|
FLOWERING_AZALEA_LEAVES(),
|
||||||
|
GLOW_BERRIES(),
|
||||||
|
GLOW_INK_SAC(),
|
||||||
|
GLOW_ITEM_FRAME(),
|
||||||
|
GLOW_LICHEN(),
|
||||||
|
GLOW_SQUID_SPAWN_EGG(),
|
||||||
|
GOAT_SPAWN_EGG(),
|
||||||
|
GRAY_CANDLE(),
|
||||||
|
GRAY_CANDLE_CAKE(),
|
||||||
|
GREEN_CANDLE(),
|
||||||
|
GREEN_CANDLE_CAKE(),
|
||||||
|
HANGING_ROOTS(),
|
||||||
|
INFESTED_DEEPSLATE(),
|
||||||
|
LARGE_AMETHYST_BUD(),
|
||||||
|
LAVA_CAULDRON(),
|
||||||
|
LIGHT(),
|
||||||
|
LIGHTNING_ROD(),
|
||||||
|
LIGHT_BLUE_CANDLE(),
|
||||||
|
LIGHT_BLUE_CANDLE_CAKE(),
|
||||||
|
LIGHT_GRAY_CANDLE(),
|
||||||
|
LIGHT_GRAY_CANDLE_CAKE(),
|
||||||
|
LIME_CANDLE(),
|
||||||
|
LIME_CANDLE_CAKE(),
|
||||||
|
MAGENTA_CANDLE(),
|
||||||
|
MAGENTA_CANDLE_CAKE(),
|
||||||
|
MEDIUM_AMETHYST_BUD(),
|
||||||
|
MOSS_BLOCK(),
|
||||||
|
MOSS_CARPET(),
|
||||||
|
ORANGE_CANDLE(),
|
||||||
|
ORANGE_CANDLE_CAKE(),
|
||||||
|
OXIDIZED_COPPER(),
|
||||||
|
OXIDIZED_CUT_COPPER(),
|
||||||
|
OXIDIZED_CUT_COPPER_SLAB(),
|
||||||
|
OXIDIZED_CUT_COPPER_STAIRS(),
|
||||||
|
PINK_CANDLE(),
|
||||||
|
PINK_CANDLE_CAKE(),
|
||||||
|
POINTED_DRIPSTONE(),
|
||||||
|
POLISHED_DEEPSLATE(),
|
||||||
|
POLISHED_DEEPSLATE_SLAB(),
|
||||||
|
POLISHED_DEEPSLATE_STAIRS(),
|
||||||
|
POLISHED_DEEPSLATE_WALL(),
|
||||||
|
POTTED_AZALEA_BUSH(),
|
||||||
|
POTTED_FLOWERING_AZALEA_BUSH(),
|
||||||
|
POWDER_SNOW(),
|
||||||
|
POWDER_SNOW_BUCKET(),
|
||||||
|
POWDER_SNOW_CAULDRON(),
|
||||||
|
PURPLE_CANDLE(),
|
||||||
|
PURPLE_CANDLE_CAKE(),
|
||||||
|
RAW_COPPER(),
|
||||||
|
RAW_COPPER_BLOCK(),
|
||||||
|
RAW_GOLD(),
|
||||||
|
RAW_GOLD_BLOCK(),
|
||||||
|
RAW_IRON(),
|
||||||
|
RAW_IRON_BLOCK(),
|
||||||
|
RED_CANDLE(),
|
||||||
|
RED_CANDLE_CAKE(),
|
||||||
|
ROOTED_DIRT(),
|
||||||
|
SCULK_SENSOR(),
|
||||||
|
SMALL_AMETHYST_BUD(),
|
||||||
|
SMALL_DRIPLEAF(),
|
||||||
|
SMOOTH_BASALT(),
|
||||||
|
SPORE_BLOSSOM(),
|
||||||
|
SPYGLASS(),
|
||||||
|
TINTED_GLASS(),
|
||||||
|
TUFF(),
|
||||||
|
WATER_CAULDRON(),
|
||||||
|
WAXED_COPPER_BLOCK(),
|
||||||
|
WAXED_CUT_COPPER(),
|
||||||
|
WAXED_CUT_COPPER_SLAB(),
|
||||||
|
WAXED_CUT_COPPER_STAIRS(),
|
||||||
|
WAXED_EXPOSED_COPPER(),
|
||||||
|
WAXED_EXPOSED_CUT_COPPER(),
|
||||||
|
WAXED_EXPOSED_CUT_COPPER_SLAB(),
|
||||||
|
WAXED_EXPOSED_CUT_COPPER_STAIRS(),
|
||||||
|
WAXED_OXIDIZED_COPPER(),
|
||||||
|
WAXED_OXIDIZED_CUT_COPPER(),
|
||||||
|
WAXED_OXIDIZED_CUT_COPPER_SLAB(),
|
||||||
|
WAXED_OXIDIZED_CUT_COPPER_STAIRS(),
|
||||||
|
WAXED_WEATHERED_COPPER(),
|
||||||
|
WAXED_WEATHERED_CUT_COPPER(),
|
||||||
|
WAXED_WEATHERED_CUT_COPPER_SLAB(),
|
||||||
|
WAXED_WEATHERED_CUT_COPPER_STAIRS(),
|
||||||
|
WEATHERED_COPPER(),
|
||||||
|
WEATHERED_CUT_COPPER(),
|
||||||
|
WEATHERED_CUT_COPPER_SLAB(),
|
||||||
|
WEATHERED_CUT_COPPER_STAIRS(),
|
||||||
|
WHITE_CANDLE(),
|
||||||
|
WHITE_CANDLE_CAKE(),
|
||||||
|
YELLOW_CANDLE(),
|
||||||
|
YELLOW_CANDLE_CAKE(),
|
||||||
|
|
||||||
/* 1.16 */
|
/* 1.16 */
|
||||||
ANCIENT_DEBRIS(),
|
ANCIENT_DEBRIS(),
|
||||||
BASALT(),
|
BASALT(),
|
||||||
@ -527,7 +678,7 @@ public enum CompatibleMaterial {
|
|||||||
GRANITE_WALL,
|
GRANITE_WALL,
|
||||||
GRASS("LONG_GRASS", (byte) 1),
|
GRASS("LONG_GRASS", (byte) 1),
|
||||||
GRASS_BLOCK("GRASS"),
|
GRASS_BLOCK("GRASS"),
|
||||||
GRASS_PATH,
|
GRASS_PATH("GRASS_PATH"),
|
||||||
GRAVEL,
|
GRAVEL,
|
||||||
GRAY_BANNER("BANNER", (byte) 8),
|
GRAY_BANNER("BANNER", (byte) 8),
|
||||||
GRAY_BED("BED", (byte) 7),
|
GRAY_BED("BED", (byte) 7),
|
||||||
@ -1940,21 +2091,31 @@ public enum CompatibleMaterial {
|
|||||||
case KELP:
|
case KELP:
|
||||||
return DRIED_KELP;
|
return DRIED_KELP;
|
||||||
case IRON_ORE:
|
case IRON_ORE:
|
||||||
|
case DEEPSLATE_IRON_ORE:
|
||||||
return IRON_INGOT;
|
return IRON_INGOT;
|
||||||
case GOLD_ORE:
|
case GOLD_ORE:
|
||||||
|
case DEEPSLATE_GOLD_ORE:
|
||||||
return GOLD_INGOT;
|
return GOLD_INGOT;
|
||||||
case DIAMOND_ORE:
|
case DIAMOND_ORE:
|
||||||
|
case DEEPSLATE_DIAMOND_ORE:
|
||||||
return DIAMOND;
|
return DIAMOND;
|
||||||
case LAPIS_ORE:
|
case LAPIS_ORE:
|
||||||
|
case DEEPSLATE_LAPIS_ORE:
|
||||||
return LAPIS_LAZULI;
|
return LAPIS_LAZULI;
|
||||||
case REDSTONE_ORE:
|
case REDSTONE_ORE:
|
||||||
|
case DEEPSLATE_REDSTONE_ORE:
|
||||||
return REDSTONE;
|
return REDSTONE;
|
||||||
case COAL_ORE:
|
case COAL_ORE:
|
||||||
|
case DEEPSLATE_COAL_ORE:
|
||||||
return COAL;
|
return COAL;
|
||||||
case EMERALD_ORE:
|
case EMERALD_ORE:
|
||||||
|
case DEEPSLATE_EMERALD_ORE:
|
||||||
return EMERALD;
|
return EMERALD;
|
||||||
case NETHER_QUARTZ_ORE:
|
case NETHER_QUARTZ_ORE:
|
||||||
return QUARTZ;
|
return QUARTZ;
|
||||||
|
case COPPER_ORE:
|
||||||
|
case DEEPSLATE_COPPER_ORE:
|
||||||
|
return COPPER_INGOT;
|
||||||
case SAND:
|
case SAND:
|
||||||
case RED_SAND:
|
case RED_SAND:
|
||||||
return GLASS;
|
return GLASS;
|
||||||
|
@ -15,7 +15,7 @@ import java.util.stream.Stream;
|
|||||||
public class CompatibleParticleHandler {
|
public class CompatibleParticleHandler {
|
||||||
|
|
||||||
public static enum ParticleType {
|
public static enum ParticleType {
|
||||||
EXPLOSION_NORMAL(),
|
EXPLOSION_NORMAL,
|
||||||
EXPLOSION_LARGE,
|
EXPLOSION_LARGE,
|
||||||
EXPLOSION_HUGE,
|
EXPLOSION_HUGE,
|
||||||
FIREWORKS_SPARK,
|
FIREWORKS_SPARK,
|
||||||
@ -100,6 +100,25 @@ public class CompatibleParticleHandler {
|
|||||||
REVERSE_PORTAL(ServerVersion.V1_16, "DRIP_WATER"),
|
REVERSE_PORTAL(ServerVersion.V1_16, "DRIP_WATER"),
|
||||||
WHITE_ASH(ServerVersion.V1_16, "DRIP_WATER"),
|
WHITE_ASH(ServerVersion.V1_16, "DRIP_WATER"),
|
||||||
/// End 1.16 ///
|
/// End 1.16 ///
|
||||||
|
// ToDo: Someone needs to make better compatible fall backs.
|
||||||
|
LIGHT(ServerVersion.V1_17, "DRIP_WATER"),
|
||||||
|
DUST_COLOR_TRANSITION(ServerVersion.V1_17, "DRIP_WATER"),
|
||||||
|
VIBRATION(ServerVersion.V1_17, "DRIP_WATER"),
|
||||||
|
FALLING_SPORE_BLOSSOM(ServerVersion.V1_17, "DRIP_WATER"),
|
||||||
|
SPORE_BLOSSOM_AIR(ServerVersion.V1_17, "DRIP_WATER"),
|
||||||
|
SMALL_FLAME(ServerVersion.V1_17, "DRIP_WATER"),
|
||||||
|
SNOWFLAKE(ServerVersion.V1_17, "DRIP_WATER"),
|
||||||
|
DRIPPING_DRIPSTONE_LAVA(ServerVersion.V1_17, "DRIP_WATER"),
|
||||||
|
FALLING_DRIPSTONE_LAVA(ServerVersion.V1_17, "DRIP_WATER"),
|
||||||
|
DRIPPING_DRIPSTONE_WATER(ServerVersion.V1_17, "DRIP_WATER"),
|
||||||
|
FALLING_DRIPSTONE_WATER(ServerVersion.V1_17, "DRIP_WATER"),
|
||||||
|
GLOW_SQUID_INK(ServerVersion.V1_17, "DRIP_WATER"),
|
||||||
|
GLOW(ServerVersion.V1_17, "DRIP_WATER"),
|
||||||
|
WAX_ON(ServerVersion.V1_17, "DRIP_WATER"),
|
||||||
|
WAX_OFF(ServerVersion.V1_17, "DRIP_WATER"),
|
||||||
|
ELECTRIC_SPARK(ServerVersion.V1_17, "DRIP_WATER"),
|
||||||
|
SCRAPE(ServerVersion.V1_17, "DRIP_WATER"),
|
||||||
|
/// End 1.17 ///
|
||||||
;
|
;
|
||||||
|
|
||||||
final boolean compatibilityMode;
|
final boolean compatibilityMode;
|
||||||
|
@ -24,6 +24,215 @@ public enum CompatibleSound {
|
|||||||
// 1.8 list:
|
// 1.8 list:
|
||||||
// https://www.minecraftforum.net/forums/mapping-and-modding-java-edition/mapping-and-modding-tutorials/2213619-1-8-all-playsound-sound-arguments
|
// https://www.minecraftforum.net/forums/mapping-and-modding-java-edition/mapping-and-modding-tutorials/2213619-1-8-all-playsound-sound-arguments
|
||||||
|
|
||||||
|
/* 1.17 */
|
||||||
|
// TODO: add similar sounds for older versions
|
||||||
|
BLOCK_AMETHYST_BLOCK_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_AMETHYST_BLOCK_CHIME(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_AMETHYST_BLOCK_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_AMETHYST_BLOCK_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_AMETHYST_BLOCK_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_AMETHYST_BLOCK_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_AMETHYST_CLUSTER_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_AMETHYST_CLUSTER_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_AMETHYST_CLUSTER_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_AMETHYST_CLUSTER_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_AMETHYST_CLUSTER_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_AZALEA_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_AZALEA_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_AZALEA_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_AZALEA_LEAVES_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_AZALEA_LEAVES_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_AZALEA_LEAVES_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_AZALEA_LEAVES_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_AZALEA_LEAVES_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_AZALEA_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_AZALEA_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_BIG_DRIPLEAF_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_BIG_DRIPLEAF_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_BIG_DRIPLEAF_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_BIG_DRIPLEAF_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_BIG_DRIPLEAF_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_BIG_DRIPLEAF_TILT_DOWN(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_BIG_DRIPLEAF_TILT_UP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_CAKE_ADD_CANDLE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_CALCITE_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_CALCITE_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_CALCITE_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_CALCITE_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_CALCITE_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_CANDLE_AMBIENT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_CANDLE_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_CANDLE_EXTINGUISH(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_CANDLE_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_CANDLE_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_CANDLE_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_CANDLE_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_CAVE_VINES_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_CAVE_VINES_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_CAVE_VINES_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_CAVE_VINES_PICK_BERRIES(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_CAVE_VINES_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_CAVE_VINES_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_COPPER_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_COPPER_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_COPPER_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_COPPER_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_COPPER_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_DEEPSLATE_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_DEEPSLATE_BRICKS_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_DEEPSLATE_BRICKS_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_DEEPSLATE_BRICKS_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_DEEPSLATE_BRICKS_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_DEEPSLATE_BRICKS_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_DEEPSLATE_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_DEEPSLATE_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_DEEPSLATE_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_DEEPSLATE_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_DEEPSLATE_TILES_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_DEEPSLATE_TILES_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_DEEPSLATE_TILES_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_DEEPSLATE_TILES_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_DEEPSLATE_TILES_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_DRIPSTONE_BLOCK_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_DRIPSTONE_BLOCK_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_DRIPSTONE_BLOCK_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_DRIPSTONE_BLOCK_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_DRIPSTONE_BLOCK_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_FLOWERING_AZALEA_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_FLOWERING_AZALEA_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_FLOWERING_AZALEA_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_FLOWERING_AZALEA_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_FLOWERING_AZALEA_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_HANGING_ROOTS_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_HANGING_ROOTS_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_HANGING_ROOTS_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_HANGING_ROOTS_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_HANGING_ROOTS_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_LARGE_AMETHYST_BUD_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_LARGE_AMETHYST_BUD_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_MEDIUM_AMETHYST_BUD_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_MEDIUM_AMETHYST_BUD_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_MOSS_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_MOSS_CARPET_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_MOSS_CARPET_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_MOSS_CARPET_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_MOSS_CARPET_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_MOSS_CARPET_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_MOSS_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_MOSS_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_MOSS_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_MOSS_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_POINTED_DRIPSTONE_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_POINTED_DRIPSTONE_DRIP_LAVA(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_POINTED_DRIPSTONE_DRIP_LAVA_INTO_CAULDRON(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_POINTED_DRIPSTONE_DRIP_WATER(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_POINTED_DRIPSTONE_DRIP_WATER_INTO_CAULDRON(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_POINTED_DRIPSTONE_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_POINTED_DRIPSTONE_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_POINTED_DRIPSTONE_LAND(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_POINTED_DRIPSTONE_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_POINTED_DRIPSTONE_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_POLISHED_DEEPSLATE_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_POLISHED_DEEPSLATE_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_POLISHED_DEEPSLATE_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_POLISHED_DEEPSLATE_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_POLISHED_DEEPSLATE_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_POWDER_SNOW_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_POWDER_SNOW_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_POWDER_SNOW_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_POWDER_SNOW_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_POWDER_SNOW_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_ROOTED_DIRT_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_ROOTED_DIRT_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_ROOTED_DIRT_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_ROOTED_DIRT_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_ROOTED_DIRT_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_SCULK_SENSOR_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_SCULK_SENSOR_CLICKING(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_SCULK_SENSOR_CLICKING_STOP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_SCULK_SENSOR_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_SCULK_SENSOR_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_SCULK_SENSOR_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_SCULK_SENSOR_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_SMALL_AMETHYST_BUD_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_SMALL_AMETHYST_BUD_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_SMALL_DRIPLEAF_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_SMALL_DRIPLEAF_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_SMALL_DRIPLEAF_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_SMALL_DRIPLEAF_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_SMALL_DRIPLEAF_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_SPORE_BLOSSOM_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_SPORE_BLOSSOM_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_SPORE_BLOSSOM_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_SPORE_BLOSSOM_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_SPORE_BLOSSOM_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_SWEET_BERRY_BUSH_PICK_BERRIES(ServerVersion.V1_17, v("ITEM_SWEET_BERRIES_PICK_FROM_BUSH")),
|
||||||
|
BLOCK_TUFF_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_TUFF_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_TUFF_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_TUFF_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_TUFF_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_VINE_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_VINE_FALL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_VINE_HIT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
BLOCK_VINE_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_AXOLOTL_ATTACK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_AXOLOTL_DEATH(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_AXOLOTL_HURT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_AXOLOTL_IDLE_AIR(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_AXOLOTL_IDLE_WATER(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_AXOLOTL_SPLASH(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_AXOLOTL_SWIM(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GLOW_ITEM_FRAME_ADD_ITEM(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GLOW_ITEM_FRAME_BREAK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GLOW_ITEM_FRAME_PLACE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GLOW_ITEM_FRAME_REMOVE_ITEM(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GLOW_ITEM_FRAME_ROTATE_ITEM(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GLOW_SQUID_AMBIENT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GLOW_SQUID_DEATH(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GLOW_SQUID_HURT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GLOW_SQUID_SQUIRT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GOAT_AMBIENT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GOAT_DEATH(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GOAT_EAT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GOAT_HURT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GOAT_LONG_JUMP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GOAT_MILK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GOAT_PREPARE_RAM(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GOAT_RAM_IMPACT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GOAT_SCREAMING_AMBIENT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GOAT_SCREAMING_DEATH(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GOAT_SCREAMING_EAT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GOAT_SCREAMING_HURT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GOAT_SCREAMING_LONG_JUMP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GOAT_SCREAMING_MILK(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GOAT_SCREAMING_PREPARE_RAM(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GOAT_SCREAMING_RAM_IMPACT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_GOAT_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_MINECART_INSIDE_UNDERWATER(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_PARROT_IMITATE_PIGLIN_BRUTE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_PIGLIN_BRUTE_AMBIENT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_PIGLIN_BRUTE_ANGRY(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_PIGLIN_BRUTE_CONVERTED_TO_ZOMBIFIED(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_PIGLIN_BRUTE_DEATH(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_PIGLIN_BRUTE_HURT(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_PIGLIN_BRUTE_STEP(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_PLAYER_HURT_FREEZE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ENTITY_SKELETON_CONVERTED_TO_STRAY(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ITEM_AXE_SCRAPE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ITEM_AXE_WAX_OFF(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ITEM_BONE_MEAL_USE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ITEM_BUCKET_EMPTY_AXOLOTL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ITEM_BUCKET_EMPTY_POWDER_SNOW(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ITEM_BUCKET_FILL_AXOLOTL(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ITEM_BUCKET_FILL_POWDER_SNOW(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ITEM_GLOW_INK_SAC_USE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ITEM_HONEYCOMB_WAX_ON(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ITEM_INK_SAC_USE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ITEM_SPYGLASS_STOP_USING(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ITEM_SPYGLASS_USE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
ITEM_DYE_USE(ServerVersion.V1_17, v(null, true)),
|
||||||
|
|
||||||
/* 1.16 */
|
/* 1.16 */
|
||||||
// TODO: add similar sounds for older versions
|
// TODO: add similar sounds for older versions
|
||||||
AMBIENT_BASALT_DELTAS_ADDITIONS(ServerVersion.V1_16, v(null, true)),
|
AMBIENT_BASALT_DELTAS_ADDITIONS(ServerVersion.V1_16, v(null, true)),
|
||||||
@ -972,7 +1181,6 @@ public enum CompatibleSound {
|
|||||||
ITEM_SHIELD_BLOCK,
|
ITEM_SHIELD_BLOCK,
|
||||||
ITEM_SHIELD_BREAK,
|
ITEM_SHIELD_BREAK,
|
||||||
ITEM_SHOVEL_FLATTEN,
|
ITEM_SHOVEL_FLATTEN,
|
||||||
ITEM_SWEET_BERRIES_PICK_FROM_BUSH,
|
|
||||||
ITEM_TOTEM_USE,
|
ITEM_TOTEM_USE,
|
||||||
ITEM_TRIDENT_HIT,
|
ITEM_TRIDENT_HIT,
|
||||||
ITEM_TRIDENT_HIT_GROUND,
|
ITEM_TRIDENT_HIT_GROUND,
|
||||||
|
@ -45,7 +45,6 @@ public class EntityNamespace {
|
|||||||
put("witherboss", "wither");
|
put("witherboss", "wither");
|
||||||
put("mushroomcow", "mooshroom");
|
put("mushroomcow", "mooshroom");
|
||||||
put("snowman", "snow_golem");
|
put("snowman", "snow_golem");
|
||||||
put("snowman", "snow_golem");
|
|
||||||
put("ozelot", "ocelot");
|
put("ozelot", "ocelot");
|
||||||
put("villagergolem", "iron_golem");
|
put("villagergolem", "iron_golem");
|
||||||
put("villager_golem", "iron_golem");
|
put("villager_golem", "iron_golem");
|
||||||
|
@ -14,110 +14,263 @@ import java.util.Map;
|
|||||||
*/
|
*/
|
||||||
public enum LegacyMaterialAnalouge {
|
public enum LegacyMaterialAnalouge {
|
||||||
|
|
||||||
|
/* 1.17 */
|
||||||
|
// ToDo: Improve legal materials.
|
||||||
|
AMETHYST_BLOCK(ServerVersion.V1_17, "STONE"),
|
||||||
|
AMETHYST_CLUSTER(ServerVersion.V1_17, "STONE"),
|
||||||
|
AMETHYST_SHARD(ServerVersion.V1_17, "STONE"),
|
||||||
|
AXOLOTL_BUCKET(ServerVersion.V1_17, "STONE"),
|
||||||
|
AXOLOTL_SPAWN_EGG(ServerVersion.V1_17, "STONE"),
|
||||||
|
AZALEA(ServerVersion.V1_17, "STONE"),
|
||||||
|
AZALEA_LEAVES(ServerVersion.V1_17, "STONE"),
|
||||||
|
BIG_DRIPLEAF(ServerVersion.V1_17, "STONE"),
|
||||||
|
BIG_DRIPLEAF_STEM(ServerVersion.V1_17, "STONE"),
|
||||||
|
BLACK_CANDLE(ServerVersion.V1_17, "STONE"),
|
||||||
|
BLACK_CANDLE_CAKE(ServerVersion.V1_17, "STONE"),
|
||||||
|
BLUE_CANDLE(ServerVersion.V1_17, "STONE"),
|
||||||
|
BLUE_CANDLE_CAKE(ServerVersion.V1_17, "STONE"),
|
||||||
|
BROWN_CANDLE(ServerVersion.V1_17, "STONE"),
|
||||||
|
BROWN_CANDLE_CAKE(ServerVersion.V1_17, "STONE"),
|
||||||
|
BUDDING_AMETHYST(ServerVersion.V1_17, "STONE"),
|
||||||
|
BUNDLE(ServerVersion.V1_17, "STONE"),
|
||||||
|
CALCITE(ServerVersion.V1_17, "STONE"),
|
||||||
|
CANDLE(ServerVersion.V1_17, "STONE"),
|
||||||
|
CANDLE_CAKE(ServerVersion.V1_17, "STONE"),
|
||||||
|
CAVE_VINES(ServerVersion.V1_17, "STONE"),
|
||||||
|
CAVE_VINES_PLANT(ServerVersion.V1_17, "STONE"),
|
||||||
|
CHISELED_DEEPSLATE(ServerVersion.V1_17, "STONE"),
|
||||||
|
COBBLED_DEEPSLATE(ServerVersion.V1_17, "STONE"),
|
||||||
|
COBBLED_DEEPSLATE_SLAB(ServerVersion.V1_17, "STONE"),
|
||||||
|
COBBLED_DEEPSLATE_STAIRS(ServerVersion.V1_17, "STONE"),
|
||||||
|
COBBLED_DEEPSLATE_WALL(ServerVersion.V1_17, "STONE"),
|
||||||
|
COPPER_BLOCK(ServerVersion.V1_17, "STONE"),
|
||||||
|
COPPER_INGOT(ServerVersion.V1_17, "STONE"),
|
||||||
|
COPPER_ORE(ServerVersion.V1_17, "STONE"),
|
||||||
|
CRACKED_DEEPSLATE_BRICKS(ServerVersion.V1_17, "STONE"),
|
||||||
|
CRACKED_DEEPSLATE_TILES(ServerVersion.V1_17, "STONE"),
|
||||||
|
CUT_COPPER(ServerVersion.V1_17, "STONE"),
|
||||||
|
CUT_COPPER_SLAB(ServerVersion.V1_17, "STONE"),
|
||||||
|
CUT_COPPER_STAIRS(ServerVersion.V1_17, "STONE"),
|
||||||
|
CYAN_CANDLE(ServerVersion.V1_17, "STONE"),
|
||||||
|
CYAN_CANDLE_CAKE(ServerVersion.V1_17, "STONE"),
|
||||||
|
DEEPSLATE(ServerVersion.V1_17, "STONE"),
|
||||||
|
DEEPSLATE_BRICKS(ServerVersion.V1_17, "STONE"),
|
||||||
|
DEEPSLATE_BRICK_SLAB(ServerVersion.V1_17, "STONE"),
|
||||||
|
DEEPSLATE_BRICK_STAIRS(ServerVersion.V1_17, "STONE"),
|
||||||
|
DEEPSLATE_BRICK_WALL(ServerVersion.V1_17, "STONE"),
|
||||||
|
DEEPSLATE_COAL_ORE(ServerVersion.V1_17, "STONE"),
|
||||||
|
DEEPSLATE_COPPER_ORE(ServerVersion.V1_17, "STONE"),
|
||||||
|
DEEPSLATE_DIAMOND_ORE(ServerVersion.V1_17, "STONE"),
|
||||||
|
DEEPSLATE_EMERALD_ORE(ServerVersion.V1_17, "STONE"),
|
||||||
|
DEEPSLATE_GOLD_ORE(ServerVersion.V1_17, "STONE"),
|
||||||
|
DEEPSLATE_IRON_ORE(ServerVersion.V1_17, "STONE"),
|
||||||
|
DEEPSLATE_LAPIS_ORE(ServerVersion.V1_17, "STONE"),
|
||||||
|
DEEPSLATE_REDSTONE_ORE(ServerVersion.V1_17, "STONE"),
|
||||||
|
DEEPSLATE_TILES(ServerVersion.V1_17, "STONE"),
|
||||||
|
DEEPSLATE_TILE_SLAB(ServerVersion.V1_17, "STONE"),
|
||||||
|
DEEPSLATE_TILE_STAIRS(ServerVersion.V1_17, "STONE"),
|
||||||
|
DEEPSLATE_TILE_WALL(ServerVersion.V1_17, "STONE"),
|
||||||
|
DRIPSTONE_BLOCK(ServerVersion.V1_17, "STONE"),
|
||||||
|
EXPOSED_COPPER(ServerVersion.V1_17, "STONE"),
|
||||||
|
EXPOSED_CUT_COPPER(ServerVersion.V1_17, "STONE"),
|
||||||
|
EXPOSED_CUT_COPPER_SLAB(ServerVersion.V1_17, "STONE"),
|
||||||
|
EXPOSED_CUT_COPPER_STAIRS(ServerVersion.V1_17, "STONE"),
|
||||||
|
FLOWERING_AZALEA(ServerVersion.V1_17, "STONE"),
|
||||||
|
FLOWERING_AZALEA_LEAVES(ServerVersion.V1_17, "STONE"),
|
||||||
|
GLOW_BERRIES(ServerVersion.V1_17, "STONE"),
|
||||||
|
GLOW_INK_SAC(ServerVersion.V1_17, "STONE"),
|
||||||
|
GLOW_ITEM_FRAME(ServerVersion.V1_17, "STONE"),
|
||||||
|
GLOW_LICHEN(ServerVersion.V1_17, "STONE"),
|
||||||
|
GLOW_SQUID_SPAWN_EGG(ServerVersion.V1_17, "STONE"),
|
||||||
|
GOAT_SPAWN_EGG(ServerVersion.V1_17, "STONE"),
|
||||||
|
GRAY_CANDLE(ServerVersion.V1_17, "STONE"),
|
||||||
|
GRAY_CANDLE_CAKE(ServerVersion.V1_17, "STONE"),
|
||||||
|
GREEN_CANDLE(ServerVersion.V1_17, "STONE"),
|
||||||
|
GREEN_CANDLE_CAKE(ServerVersion.V1_17, "STONE"),
|
||||||
|
HANGING_ROOTS(ServerVersion.V1_17, "STONE"),
|
||||||
|
INFESTED_DEEPSLATE(ServerVersion.V1_17, "STONE"),
|
||||||
|
LARGE_AMETHYST_BUD(ServerVersion.V1_17, "STONE"),
|
||||||
|
LAVA_CAULDRON(ServerVersion.V1_17, "STONE"),
|
||||||
|
LIGHT(ServerVersion.V1_17, "STONE"),
|
||||||
|
LIGHTNING_ROD(ServerVersion.V1_17, "STONE"),
|
||||||
|
LIGHT_BLUE_CANDLE(ServerVersion.V1_17, "STONE"),
|
||||||
|
LIGHT_BLUE_CANDLE_CAKE(ServerVersion.V1_17, "STONE"),
|
||||||
|
LIGHT_GRAY_CANDLE(ServerVersion.V1_17, "STONE"),
|
||||||
|
LIGHT_GRAY_CANDLE_CAKE(ServerVersion.V1_17, "STONE"),
|
||||||
|
LIME_CANDLE(ServerVersion.V1_17, "STONE"),
|
||||||
|
LIME_CANDLE_CAKE(ServerVersion.V1_17, "STONE"),
|
||||||
|
MAGENTA_CANDLE(ServerVersion.V1_17, "STONE"),
|
||||||
|
MAGENTA_CANDLE_CAKE(ServerVersion.V1_17, "STONE"),
|
||||||
|
MEDIUM_AMETHYST_BUD(ServerVersion.V1_17, "STONE"),
|
||||||
|
MOSS_BLOCK(ServerVersion.V1_17, "STONE"),
|
||||||
|
MOSS_CARPET(ServerVersion.V1_17, "STONE"),
|
||||||
|
ORANGE_CANDLE(ServerVersion.V1_17, "STONE"),
|
||||||
|
ORANGE_CANDLE_CAKE(ServerVersion.V1_17, "STONE"),
|
||||||
|
OXIDIZED_COPPER(ServerVersion.V1_17, "STONE"),
|
||||||
|
OXIDIZED_CUT_COPPER(ServerVersion.V1_17, "STONE"),
|
||||||
|
OXIDIZED_CUT_COPPER_SLAB(ServerVersion.V1_17, "STONE"),
|
||||||
|
OXIDIZED_CUT_COPPER_STAIRS(ServerVersion.V1_17, "STONE"),
|
||||||
|
PINK_CANDLE(ServerVersion.V1_17, "STONE"),
|
||||||
|
PINK_CANDLE_CAKE(ServerVersion.V1_17, "STONE"),
|
||||||
|
POINTED_DRIPSTONE(ServerVersion.V1_17, "STONE"),
|
||||||
|
POLISHED_DEEPSLATE(ServerVersion.V1_17, "STONE"),
|
||||||
|
POLISHED_DEEPSLATE_SLAB(ServerVersion.V1_17, "STONE"),
|
||||||
|
POLISHED_DEEPSLATE_STAIRS(ServerVersion.V1_17, "STONE"),
|
||||||
|
POLISHED_DEEPSLATE_WALL(ServerVersion.V1_17, "STONE"),
|
||||||
|
POTTED_AZALEA_BUSH(ServerVersion.V1_17, "STONE"),
|
||||||
|
POTTED_FLOWERING_AZALEA_BUSH(ServerVersion.V1_17, "STONE"),
|
||||||
|
POWDER_SNOW(ServerVersion.V1_17, "STONE"),
|
||||||
|
POWDER_SNOW_BUCKET(ServerVersion.V1_17, "STONE"),
|
||||||
|
POWDER_SNOW_CAULDRON(ServerVersion.V1_17, "STONE"),
|
||||||
|
PURPLE_CANDLE(ServerVersion.V1_17, "STONE"),
|
||||||
|
PURPLE_CANDLE_CAKE(ServerVersion.V1_17, "STONE"),
|
||||||
|
RAW_COPPER(ServerVersion.V1_17, "STONE"),
|
||||||
|
RAW_COPPER_BLOCK(ServerVersion.V1_17, "STONE"),
|
||||||
|
RAW_GOLD(ServerVersion.V1_17, "STONE"),
|
||||||
|
RAW_GOLD_BLOCK(ServerVersion.V1_17, "STONE"),
|
||||||
|
RAW_IRON(ServerVersion.V1_17, "STONE"),
|
||||||
|
RAW_IRON_BLOCK(ServerVersion.V1_17, "STONE"),
|
||||||
|
RED_CANDLE(ServerVersion.V1_17, "STONE"),
|
||||||
|
RED_CANDLE_CAKE(ServerVersion.V1_17, "STONE"),
|
||||||
|
ROOTED_DIRT(ServerVersion.V1_17, "STONE"),
|
||||||
|
SCULK_SENSOR(ServerVersion.V1_17, "STONE"),
|
||||||
|
SMALL_AMETHYST_BUD(ServerVersion.V1_17, "STONE"),
|
||||||
|
SMALL_DRIPLEAF(ServerVersion.V1_17, "STONE"),
|
||||||
|
SMOOTH_BASALT(ServerVersion.V1_17, "STONE"),
|
||||||
|
SPORE_BLOSSOM(ServerVersion.V1_17, "STONE"),
|
||||||
|
SPYGLASS(ServerVersion.V1_17, "STONE"),
|
||||||
|
TINTED_GLASS(ServerVersion.V1_17, "STONE"),
|
||||||
|
TUFF(ServerVersion.V1_17, "STONE"),
|
||||||
|
WATER_CAULDRON(ServerVersion.V1_17, "STONE"),
|
||||||
|
WAXED_COPPER_BLOCK(ServerVersion.V1_17, "STONE"),
|
||||||
|
WAXED_CUT_COPPER(ServerVersion.V1_17, "STONE"),
|
||||||
|
WAXED_CUT_COPPER_SLAB(ServerVersion.V1_17, "STONE"),
|
||||||
|
WAXED_CUT_COPPER_STAIRS(ServerVersion.V1_17, "STONE"),
|
||||||
|
WAXED_EXPOSED_COPPER(ServerVersion.V1_17, "STONE"),
|
||||||
|
WAXED_EXPOSED_CUT_COPPER(ServerVersion.V1_17, "STONE"),
|
||||||
|
WAXED_EXPOSED_CUT_COPPER_SLAB(ServerVersion.V1_17, "STONE"),
|
||||||
|
WAXED_EXPOSED_CUT_COPPER_STAIRS(ServerVersion.V1_17, "STONE"),
|
||||||
|
WAXED_OXIDIZED_COPPER(ServerVersion.V1_17, "STONE"),
|
||||||
|
WAXED_OXIDIZED_CUT_COPPER(ServerVersion.V1_17, "STONE"),
|
||||||
|
WAXED_OXIDIZED_CUT_COPPER_SLAB(ServerVersion.V1_17, "STONE"),
|
||||||
|
WAXED_OXIDIZED_CUT_COPPER_STAIRS(ServerVersion.V1_17, "STONE"),
|
||||||
|
WAXED_WEATHERED_COPPER(ServerVersion.V1_17, "STONE"),
|
||||||
|
WAXED_WEATHERED_CUT_COPPER(ServerVersion.V1_17, "STONE"),
|
||||||
|
WAXED_WEATHERED_CUT_COPPER_SLAB(ServerVersion.V1_17, "STONE"),
|
||||||
|
WAXED_WEATHERED_CUT_COPPER_STAIRS(ServerVersion.V1_17, "STONE"),
|
||||||
|
WEATHERED_COPPER(ServerVersion.V1_17, "STONE"),
|
||||||
|
WEATHERED_CUT_COPPER(ServerVersion.V1_17, "STONE"),
|
||||||
|
WEATHERED_CUT_COPPER_SLAB(ServerVersion.V1_17, "STONE"),
|
||||||
|
WEATHERED_CUT_COPPER_STAIRS(ServerVersion.V1_17, "STONE"),
|
||||||
|
WHITE_CANDLE(ServerVersion.V1_17, "STONE"),
|
||||||
|
WHITE_CANDLE_CAKE(ServerVersion.V1_17, "STONE"),
|
||||||
|
YELLOW_CANDLE(ServerVersion.V1_17, "STONE"),
|
||||||
|
YELLOW_CANDLE_CAKE(ServerVersion.V1_17, "STONE"),
|
||||||
|
|
||||||
/* 1.16 */
|
/* 1.16 */
|
||||||
// ToDo: Improve legal materials.
|
// ToDo: Improve legal materials.
|
||||||
ANCIENT_DEBRIES(ServerVersion.V1_15, "STONE"),
|
ANCIENT_DEBRIES(ServerVersion.V1_16, "STONE"),
|
||||||
BASALT(ServerVersion.V1_15, "STONE"),
|
BASALT(ServerVersion.V1_16, "STONE"),
|
||||||
BLACKSTONE(ServerVersion.V1_15, "STONE"),
|
BLACKSTONE(ServerVersion.V1_16, "STONE"),
|
||||||
BLACKSTONE_STAIRS(ServerVersion.V1_15, "STONE"),
|
BLACKSTONE_STAIRS(ServerVersion.V1_16, "STONE"),
|
||||||
BLACKSTONE_WALL(ServerVersion.V1_15, "STONE"),
|
BLACKSTONE_WALL(ServerVersion.V1_16, "STONE"),
|
||||||
BLASTSTONE_SLAB(ServerVersion.V1_15, "STONE"),
|
BLASTSTONE_SLAB(ServerVersion.V1_16, "STONE"),
|
||||||
CHAIN(ServerVersion.V1_15, "STONE"),
|
CHAIN(ServerVersion.V1_16, "STONE"),
|
||||||
CHISELED_NETHER_BRICKS(ServerVersion.V1_15, "STONE"),
|
CHISELED_NETHER_BRICKS(ServerVersion.V1_16, "STONE"),
|
||||||
CHISELED_POLISHED_BLACKSTONE(ServerVersion.V1_15, "STONE"),
|
CHISELED_POLISHED_BLACKSTONE(ServerVersion.V1_16, "STONE"),
|
||||||
CRACKED_NETHER_BRICKS(ServerVersion.V1_15, "STONE"),
|
CRACKED_NETHER_BRICKS(ServerVersion.V1_16, "STONE"),
|
||||||
CRACKED_POLISHED_BLACKSTONE_BRICKS(ServerVersion.V1_15, "STONE"),
|
CRACKED_POLISHED_BLACKSTONE_BRICKS(ServerVersion.V1_16, "STONE"),
|
||||||
CRIMSON_BUTTON(ServerVersion.V1_15, "STONE"),
|
CRIMSON_BUTTON(ServerVersion.V1_16, "STONE"),
|
||||||
CRIMSON_DOOR(ServerVersion.V1_15, "STONE"),
|
CRIMSON_DOOR(ServerVersion.V1_16, "STONE"),
|
||||||
CRIMSON_FENCE(ServerVersion.V1_15, "STONE"),
|
CRIMSON_FENCE(ServerVersion.V1_16, "STONE"),
|
||||||
CRIMSON_FENCE_GATE(ServerVersion.V1_15, "STONE"),
|
CRIMSON_FENCE_GATE(ServerVersion.V1_16, "STONE"),
|
||||||
CRIMSON_FUNGUS(ServerVersion.V1_15, "STONE"),
|
CRIMSON_FUNGUS(ServerVersion.V1_16, "STONE"),
|
||||||
CRIMSON_HYPHAE(ServerVersion.V1_15, "STONE"),
|
CRIMSON_HYPHAE(ServerVersion.V1_16, "STONE"),
|
||||||
CRIMSON_NYLIUM(ServerVersion.V1_15, "STONE"),
|
CRIMSON_NYLIUM(ServerVersion.V1_16, "STONE"),
|
||||||
CRIMSON_PLANKS(ServerVersion.V1_15, "STONE"),
|
CRIMSON_PLANKS(ServerVersion.V1_16, "STONE"),
|
||||||
CRIMSON_PRESSURE_PLATE(ServerVersion.V1_15, "STONE"),
|
CRIMSON_PRESSURE_PLATE(ServerVersion.V1_16, "STONE"),
|
||||||
CRIMSON_ROOTS(ServerVersion.V1_15, "STONE"),
|
CRIMSON_ROOTS(ServerVersion.V1_16, "STONE"),
|
||||||
CRIMSON_SIGN(ServerVersion.V1_15, "STONE"),
|
CRIMSON_SIGN(ServerVersion.V1_16, "STONE"),
|
||||||
CRIMSON_SLAB(ServerVersion.V1_15, "STONE"),
|
CRIMSON_SLAB(ServerVersion.V1_16, "STONE"),
|
||||||
CRIMSON_STAIRS(ServerVersion.V1_15, "STONE"),
|
CRIMSON_STAIRS(ServerVersion.V1_16, "STONE"),
|
||||||
CRIMSON_STEM(ServerVersion.V1_15, "STONE"),
|
CRIMSON_STEM(ServerVersion.V1_16, "STONE"),
|
||||||
CRIMSON_TRAPDOOR(ServerVersion.V1_15, "STONE"),
|
CRIMSON_TRAPDOOR(ServerVersion.V1_16, "STONE"),
|
||||||
CRIMSON_WALL_SIGN(ServerVersion.V1_15, "STONE"),
|
CRIMSON_WALL_SIGN(ServerVersion.V1_16, "STONE"),
|
||||||
CRYING_OBSIDIAN(ServerVersion.V1_15, "STONE"),
|
CRYING_OBSIDIAN(ServerVersion.V1_16, "STONE"),
|
||||||
GILDED_BLACKSTONE(ServerVersion.V1_15, "STONE"),
|
GILDED_BLACKSTONE(ServerVersion.V1_16, "STONE"),
|
||||||
HOGLIN_SPAWN_EGG(ServerVersion.V1_15, "STONE"),
|
HOGLIN_SPAWN_EGG(ServerVersion.V1_16, "STONE"),
|
||||||
LODESTONE(ServerVersion.V1_15, "STONE"),
|
LODESTONE(ServerVersion.V1_16, "STONE"),
|
||||||
MUSIC_DISC_PIGSTEP(ServerVersion.V1_15, "STONE"),
|
MUSIC_DISC_PIGSTEP(ServerVersion.V1_16, "STONE"),
|
||||||
NETHERITE_AXE(ServerVersion.V1_15, "STONE"),
|
NETHERITE_AXE(ServerVersion.V1_16, "STONE"),
|
||||||
NETHERITE_BLOCK(ServerVersion.V1_15, "STONE"),
|
NETHERITE_BLOCK(ServerVersion.V1_16, "STONE"),
|
||||||
NETHERITE_BOOTS(ServerVersion.V1_15, "STONE"),
|
NETHERITE_BOOTS(ServerVersion.V1_16, "STONE"),
|
||||||
NETHERITE_CHESTPLATE(ServerVersion.V1_15, "STONE"),
|
NETHERITE_CHESTPLATE(ServerVersion.V1_16, "STONE"),
|
||||||
NETHERITE_HELMET(ServerVersion.V1_15, "STONE"),
|
NETHERITE_HELMET(ServerVersion.V1_16, "STONE"),
|
||||||
NETHERITE_HOE(ServerVersion.V1_15, "STONE"),
|
NETHERITE_HOE(ServerVersion.V1_16, "STONE"),
|
||||||
NETHERITE_INGOT(ServerVersion.V1_15, "STONE"),
|
NETHERITE_INGOT(ServerVersion.V1_16, "STONE"),
|
||||||
NETHERITE_LEGGINGS(ServerVersion.V1_15, "STONE"),
|
NETHERITE_LEGGINGS(ServerVersion.V1_16, "STONE"),
|
||||||
NETHERITE_PICKAXE(ServerVersion.V1_15, "STONE"),
|
NETHERITE_PICKAXE(ServerVersion.V1_16, "STONE"),
|
||||||
NETHERITE_SCRAP(ServerVersion.V1_15, "STONE"),
|
NETHERITE_SCRAP(ServerVersion.V1_16, "STONE"),
|
||||||
NETHERITE_SHOVEL(ServerVersion.V1_15, "STONE"),
|
NETHERITE_SHOVEL(ServerVersion.V1_16, "STONE"),
|
||||||
NETHERITE_SWORD(ServerVersion.V1_15, "STONE"),
|
NETHERITE_SWORD(ServerVersion.V1_16, "STONE"),
|
||||||
NETHER_GOLD_ORE(ServerVersion.V1_15, "STONE"),
|
NETHER_GOLD_ORE(ServerVersion.V1_16, "STONE"),
|
||||||
NETHER_SPROUTS(ServerVersion.V1_15, "STONE"),
|
NETHER_SPROUTS(ServerVersion.V1_16, "STONE"),
|
||||||
PIGLIN_BANNER_PATTERN(ServerVersion.V1_15, "STONE"),
|
PIGLIN_BANNER_PATTERN(ServerVersion.V1_16, "STONE"),
|
||||||
PIGLIN_SPAWN_EGG(ServerVersion.V1_15, "STONE"),
|
PIGLIN_SPAWN_EGG(ServerVersion.V1_16, "STONE"),
|
||||||
POLISHED_BASALT(ServerVersion.V1_15, "STONE"),
|
POLISHED_BASALT(ServerVersion.V1_16, "STONE"),
|
||||||
POLISHED_BLACKSTONE(ServerVersion.V1_15, "STONE"),
|
POLISHED_BLACKSTONE(ServerVersion.V1_16, "STONE"),
|
||||||
POLISHED_BLACKSTONE_BRICKS(ServerVersion.V1_15, "STONE"),
|
POLISHED_BLACKSTONE_BRICKS(ServerVersion.V1_16, "STONE"),
|
||||||
POLISHED_BLACKSTONE_BRICK_SLAB(ServerVersion.V1_15, "STONE"),
|
POLISHED_BLACKSTONE_BRICK_SLAB(ServerVersion.V1_16, "STONE"),
|
||||||
POLISHED_BLACKSTONE_BRICK_STAIRS(ServerVersion.V1_15, "STONE"),
|
POLISHED_BLACKSTONE_BRICK_STAIRS(ServerVersion.V1_16, "STONE"),
|
||||||
POLISHED_BLACKSTONE_BRICK_WALL(ServerVersion.V1_15, "STONE"),
|
POLISHED_BLACKSTONE_BRICK_WALL(ServerVersion.V1_16, "STONE"),
|
||||||
POLISHED_BLACKSTONE_BUTTON(ServerVersion.V1_15, "STONE"),
|
POLISHED_BLACKSTONE_BUTTON(ServerVersion.V1_16, "STONE"),
|
||||||
POLISHED_BLACKSTONE_PRESSURE_PLATE(ServerVersion.V1_15, "STONE"),
|
POLISHED_BLACKSTONE_PRESSURE_PLATE(ServerVersion.V1_16, "STONE"),
|
||||||
POLISHED_BLACKSTONE_SLAB(ServerVersion.V1_15, "STONE"),
|
POLISHED_BLACKSTONE_SLAB(ServerVersion.V1_16, "STONE"),
|
||||||
POLISHED_BLACKSTONE_STAIRS(ServerVersion.V1_15, "STONE"),
|
POLISHED_BLACKSTONE_STAIRS(ServerVersion.V1_16, "STONE"),
|
||||||
POLISHED_BLACKSTONE_WALL(ServerVersion.V1_15, "STONE"),
|
POLISHED_BLACKSTONE_WALL(ServerVersion.V1_16, "STONE"),
|
||||||
POTTED_CRIMSON_FUNGUS(ServerVersion.V1_15, "STONE"),
|
POTTED_CRIMSON_FUNGUS(ServerVersion.V1_16, "STONE"),
|
||||||
POTTED_CRIMSON_ROOTS(ServerVersion.V1_15, "STONE"),
|
POTTED_CRIMSON_ROOTS(ServerVersion.V1_16, "STONE"),
|
||||||
POTTED_WARPED_FUNGUS(ServerVersion.V1_15, "STONE"),
|
POTTED_WARPED_FUNGUS(ServerVersion.V1_16, "STONE"),
|
||||||
POTTED_WARPED_ROOTS(ServerVersion.V1_15, "STONE"),
|
POTTED_WARPED_ROOTS(ServerVersion.V1_16, "STONE"),
|
||||||
QUARTZ_BRICKS(ServerVersion.V1_15, "STONE"),
|
QUARTZ_BRICKS(ServerVersion.V1_16, "STONE"),
|
||||||
RESPAWN_ANCHOR(ServerVersion.V1_15, "STONE"),
|
RESPAWN_ANCHOR(ServerVersion.V1_16, "STONE"),
|
||||||
SHROOMLIGHT(ServerVersion.V1_15, "STONE"),
|
SHROOMLIGHT(ServerVersion.V1_16, "STONE"),
|
||||||
SOUL_CAMPFIRE(ServerVersion.V1_15, "STONE"),
|
SOUL_CAMPFIRE(ServerVersion.V1_16, "STONE"),
|
||||||
SOUL_FIRE(ServerVersion.V1_15, "STONE"),
|
SOUL_FIRE(ServerVersion.V1_16, "STONE"),
|
||||||
SOUL_LANTERN(ServerVersion.V1_15, "STONE"),
|
SOUL_LANTERN(ServerVersion.V1_16, "STONE"),
|
||||||
SOUL_SOIL(ServerVersion.V1_15, "STONE"),
|
SOUL_SOIL(ServerVersion.V1_16, "STONE"),
|
||||||
SOUL_TORCH(ServerVersion.V1_15, "STONE"),
|
SOUL_TORCH(ServerVersion.V1_16, "STONE"),
|
||||||
SOUL_WALL_TORCH(ServerVersion.V1_15, "STONE"),
|
SOUL_WALL_TORCH(ServerVersion.V1_16, "STONE"),
|
||||||
STRIDER_SPAWN_EGG(ServerVersion.V1_15, "STONE"),
|
STRIDER_SPAWN_EGG(ServerVersion.V1_16, "STONE"),
|
||||||
STRIPPED_CRIMSON_HYPHAE(ServerVersion.V1_15, "STONE"),
|
STRIPPED_CRIMSON_HYPHAE(ServerVersion.V1_16, "STONE"),
|
||||||
STRIPPED_CRIMSON_STEM(ServerVersion.V1_15, "STONE"),
|
STRIPPED_CRIMSON_STEM(ServerVersion.V1_16, "STONE"),
|
||||||
STRIPPED_WARPED_HYPHAE(ServerVersion.V1_15, "STONE"),
|
STRIPPED_WARPED_HYPHAE(ServerVersion.V1_16, "STONE"),
|
||||||
STRIPPED_WARPED_STEM(ServerVersion.V1_15, "STONE"),
|
STRIPPED_WARPED_STEM(ServerVersion.V1_16, "STONE"),
|
||||||
TARGET(ServerVersion.V1_15, "STONE"),
|
TARGET(ServerVersion.V1_16, "STONE"),
|
||||||
TWISTING_VINES(ServerVersion.V1_15, "STONE"),
|
TWISTING_VINES(ServerVersion.V1_16, "STONE"),
|
||||||
TWISTING_VINES_PLANT(ServerVersion.V1_15, "STONE"),
|
TWISTING_VINES_PLANT(ServerVersion.V1_16, "STONE"),
|
||||||
WARPED_BUTTON(ServerVersion.V1_15, "STONE"),
|
WARPED_BUTTON(ServerVersion.V1_16, "STONE"),
|
||||||
WARPED_DOOR(ServerVersion.V1_15, "STONE"),
|
WARPED_DOOR(ServerVersion.V1_16, "STONE"),
|
||||||
WARPED_FENCE(ServerVersion.V1_15, "STONE"),
|
WARPED_FENCE(ServerVersion.V1_16, "STONE"),
|
||||||
WARPED_FENCE_GATE(ServerVersion.V1_15, "STONE"),
|
WARPED_FENCE_GATE(ServerVersion.V1_16, "STONE"),
|
||||||
WARPED_FUNGUS(ServerVersion.V1_15, "STONE"),
|
WARPED_FUNGUS(ServerVersion.V1_16, "STONE"),
|
||||||
WARPED_FUNGUS_ON_A_STICK(ServerVersion.V1_15, "STONE"),
|
WARPED_FUNGUS_ON_A_STICK(ServerVersion.V1_16, "STONE"),
|
||||||
WARPED_HYPHAE(ServerVersion.V1_15, "STONE"),
|
WARPED_HYPHAE(ServerVersion.V1_16, "STONE"),
|
||||||
WARPED_NYLIUM(ServerVersion.V1_15, "STONE"),
|
WARPED_NYLIUM(ServerVersion.V1_16, "STONE"),
|
||||||
WARPED_PLANKS(ServerVersion.V1_15, "STONE"),
|
WARPED_PLANKS(ServerVersion.V1_16, "STONE"),
|
||||||
WARPED_PRESSURE_PLATE(ServerVersion.V1_15, "STONE"),
|
WARPED_PRESSURE_PLATE(ServerVersion.V1_16, "STONE"),
|
||||||
WARPED_ROOTS(ServerVersion.V1_15, "STONE"),
|
WARPED_ROOTS(ServerVersion.V1_16, "STONE"),
|
||||||
WARPED_SIGN(ServerVersion.V1_15, "STONE"),
|
WARPED_SIGN(ServerVersion.V1_16, "STONE"),
|
||||||
WARPED_SLAB(ServerVersion.V1_15, "STONE"),
|
WARPED_SLAB(ServerVersion.V1_16, "STONE"),
|
||||||
WARPED_STAIRS(ServerVersion.V1_15, "STONE"),
|
WARPED_STAIRS(ServerVersion.V1_16, "STONE"),
|
||||||
WARPED_STEM(ServerVersion.V1_15, "STONE"),
|
WARPED_STEM(ServerVersion.V1_16, "STONE"),
|
||||||
WARPED_TRAPDOOR(ServerVersion.V1_15, "STONE"),
|
WARPED_TRAPDOOR(ServerVersion.V1_16, "STONE"),
|
||||||
WARPED_WALL_SIGN(ServerVersion.V1_15, "STONE"),
|
WARPED_WALL_SIGN(ServerVersion.V1_16, "STONE"),
|
||||||
WARPED_WART_BLOCK(ServerVersion.V1_15, "STONE"),
|
WARPED_WART_BLOCK(ServerVersion.V1_16, "STONE"),
|
||||||
WEEPING_VINES(ServerVersion.V1_15, "STONE"),
|
WEEPING_VINES(ServerVersion.V1_16, "STONE"),
|
||||||
WEEPING_VINES_PLANT(ServerVersion.V1_15, "STONE"),
|
WEEPING_VINES_PLANT(ServerVersion.V1_16, "STONE"),
|
||||||
ZOGLIN_SPAWN_EGG(ServerVersion.V1_15, "STONE"),
|
ZOGLIN_SPAWN_EGG(ServerVersion.V1_16, "STONE"),
|
||||||
ZOMBIFIED_PIGLIN_SPAWN_EGG(ServerVersion.V1_15, "STONE"),
|
ZOMBIFIED_PIGLIN_SPAWN_EGG(ServerVersion.V1_16, "STONE"),
|
||||||
|
|
||||||
/* 1.15 */
|
/* 1.15 */
|
||||||
BEE_SPAWN_EGG(ServerVersion.V1_15, "PARROT_SPAWN_EGG", ServerVersion.V1_12, "MONSTER_EGG", (byte) 65),
|
BEE_SPAWN_EGG(ServerVersion.V1_15, "PARROT_SPAWN_EGG", ServerVersion.V1_12, "MONSTER_EGG", (byte) 65),
|
||||||
|
@ -5,7 +5,7 @@ import org.bukkit.Bukkit;
|
|||||||
|
|
||||||
public enum ServerVersion {
|
public enum ServerVersion {
|
||||||
|
|
||||||
UNKNOWN, V1_7, V1_8, V1_9, V1_10, V1_11, V1_12, V1_13, V1_14, V1_15, V1_16, V1_17, V1_18, V1_19, V1_20;
|
UNKNOWN, V1_7, V1_8, V1_9, V1_10, V1_11, V1_12, V1_13, V1_14, V1_15, V1_16, V1_17, V1_18, V1_19, V1_20, V1_21;
|
||||||
|
|
||||||
private final static String serverPackagePath = Bukkit.getServer().getClass().getPackage().getName();
|
private final static String serverPackagePath = Bukkit.getServer().getClass().getPackage().getName();
|
||||||
private final static String serverPackageVersion = serverPackagePath.substring(serverPackagePath.lastIndexOf('.') + 1);
|
private final static String serverPackageVersion = serverPackagePath.substring(serverPackagePath.lastIndexOf('.') + 1);
|
||||||
|
28
Core/pom.xml
28
Core/pom.xml
@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.songoda</groupId>
|
<groupId>com.songoda</groupId>
|
||||||
<artifactId>SongodaCore-Modules</artifactId>
|
<artifactId>SongodaCore-Modules</artifactId>
|
||||||
<version>2.4.57</version>
|
<version>2.4.59</version>
|
||||||
<relativePath>../</relativePath>
|
<relativePath>../</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@ -40,23 +40,6 @@
|
|||||||
</execution>
|
</execution>
|
||||||
</executions>
|
</executions>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-javadoc-plugin</artifactId>
|
|
||||||
<version>3.2.0</version>
|
|
||||||
<configuration>
|
|
||||||
<doclint>none</doclint>
|
|
||||||
<source>1.8</source>
|
|
||||||
</configuration>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<id>attach-javadocs</id>
|
|
||||||
<goals>
|
|
||||||
<goal>jar</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-shade-plugin</artifactId>
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
@ -119,7 +102,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>org.spigotmc</groupId>
|
||||||
<artifactId>spigot</artifactId>
|
<artifactId>spigot</artifactId>
|
||||||
<version>1.16.5</version>
|
<version>1.17</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@ -243,6 +226,13 @@
|
|||||||
<type>jar</type>
|
<type>jar</type>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>${project.groupId}</groupId>
|
||||||
|
<artifactId>SongodaCore-NMS-v1_17_R1</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<type>jar</type>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
<!-- End NMS -->
|
<!-- End NMS -->
|
||||||
<!-- Start Plugin Hooks -->
|
<!-- Start Plugin Hooks -->
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -4,7 +4,9 @@ import com.google.gson.Gson;
|
|||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.songoda.core.compatibility.ServerVersion;
|
import com.songoda.core.compatibility.ServerVersion;
|
||||||
|
import com.songoda.core.compatibility.ClassMapping;
|
||||||
import com.songoda.core.utils.TextUtils;
|
import com.songoda.core.utils.TextUtils;
|
||||||
|
import net.minecraft.network.chat.IChatBaseComponent;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -24,7 +26,7 @@ import java.util.regex.Pattern;
|
|||||||
public class ChatMessage {
|
public class ChatMessage {
|
||||||
|
|
||||||
private static final Gson gson = new GsonBuilder().create();
|
private static final Gson gson = new GsonBuilder().create();
|
||||||
private List<JsonObject> textList = new ArrayList<>();
|
private final List<JsonObject> textList = new ArrayList<>();
|
||||||
|
|
||||||
public void clear() {
|
public void clear() {
|
||||||
textList.clear();
|
textList.clear();
|
||||||
@ -234,21 +236,21 @@ public class ChatMessage {
|
|||||||
Class<?> cb_craftPlayerClazz, mc_entityPlayerClazz, mc_playerConnectionClazz, mc_PacketInterface,
|
Class<?> cb_craftPlayerClazz, mc_entityPlayerClazz, mc_playerConnectionClazz, mc_PacketInterface,
|
||||||
mc_IChatBaseComponent, mc_IChatBaseComponent_ChatSerializer, mc_PacketPlayOutChat;
|
mc_IChatBaseComponent, mc_IChatBaseComponent_ChatSerializer, mc_PacketPlayOutChat;
|
||||||
|
|
||||||
cb_craftPlayerClazz = Class.forName("org.bukkit.craftbukkit." + version + ".entity.CraftPlayer");
|
cb_craftPlayerClazz = ClassMapping.CRAFT_PLAYER.getClazz();
|
||||||
cb_craftPlayer_getHandle = cb_craftPlayerClazz.getDeclaredMethod("getHandle");
|
cb_craftPlayer_getHandle = cb_craftPlayerClazz.getDeclaredMethod("getHandle");
|
||||||
mc_entityPlayerClazz = Class.forName("net.minecraft.server." + version + ".EntityPlayer");
|
mc_entityPlayerClazz = ClassMapping.ENTITY_PLAYER.getClazz();
|
||||||
mc_entityPlayer_playerConnection = mc_entityPlayerClazz.getDeclaredField("playerConnection");
|
mc_entityPlayer_playerConnection = mc_entityPlayerClazz.getDeclaredField(ServerVersion.isServerVersionAtLeast(ServerVersion.V1_17) ? "b" : "playerConnection");
|
||||||
mc_playerConnectionClazz = Class.forName("net.minecraft.server." + version + ".PlayerConnection");
|
mc_playerConnectionClazz = ClassMapping.PLAYER_CONNECTION.getClazz();
|
||||||
mc_PacketInterface = Class.forName("net.minecraft.server." + version + ".Packet");
|
mc_PacketInterface = ClassMapping.PACKET.getClazz();
|
||||||
mc_playerConnection_sendPacket = mc_playerConnectionClazz.getDeclaredMethod("sendPacket", mc_PacketInterface);
|
mc_playerConnection_sendPacket = mc_playerConnectionClazz.getDeclaredMethod("sendPacket", mc_PacketInterface);
|
||||||
mc_IChatBaseComponent = Class.forName("net.minecraft.server." + version + ".IChatBaseComponent");
|
mc_IChatBaseComponent = ClassMapping.I_CHAT_BASE_COMPONENT.getClazz();
|
||||||
mc_IChatBaseComponent_ChatSerializer = Class.forName("net.minecraft.server." + version + ".IChatBaseComponent$ChatSerializer");
|
mc_IChatBaseComponent_ChatSerializer = ClassMapping.I_CHAT_BASE_COMPONENT.getClazz("ChatSerializer");
|
||||||
mc_IChatBaseComponent_ChatSerializer_a = mc_IChatBaseComponent_ChatSerializer.getMethod("a", String.class);
|
mc_IChatBaseComponent_ChatSerializer_a = mc_IChatBaseComponent_ChatSerializer.getMethod("a", String.class);
|
||||||
mc_PacketPlayOutChat = Class.forName("net.minecraft.server." + version + ".PacketPlayOutChat");
|
mc_PacketPlayOutChat = ClassMapping.PACKET_PLAY_OUT_CHAT.getClazz();
|
||||||
|
|
||||||
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_16)) {
|
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_16)) {
|
||||||
mc_ChatMessageType = Class.forName("net.minecraft.server." + version + ".ChatMessageType");
|
mc_ChatMessageType = ClassMapping.CHAT_MESSAGE_TYPE.getClazz();
|
||||||
mc_chatMessageType_Chat = mc_ChatMessageType.getField("CHAT");
|
mc_chatMessageType_Chat = mc_ChatMessageType.getField(ServerVersion.isServerVersionAtLeast(ServerVersion.V1_17) ? "a" : "CHAT");
|
||||||
mc_PacketPlayOutChat_new = mc_PacketPlayOutChat.getConstructor(mc_IChatBaseComponent, mc_ChatMessageType, UUID.class);
|
mc_PacketPlayOutChat_new = mc_PacketPlayOutChat.getConstructor(mc_IChatBaseComponent, mc_ChatMessageType, UUID.class);
|
||||||
} else {
|
} else {
|
||||||
mc_PacketPlayOutChat_new = mc_PacketPlayOutChat.getConstructor(mc_IChatBaseComponent);
|
mc_PacketPlayOutChat_new = mc_PacketPlayOutChat.getConstructor(mc_IChatBaseComponent);
|
||||||
|
@ -10,9 +10,11 @@ import org.bukkit.command.CommandSender;
|
|||||||
import org.bukkit.command.PluginCommand;
|
import org.bukkit.command.PluginCommand;
|
||||||
import org.bukkit.command.SimpleCommandMap;
|
import org.bukkit.command.SimpleCommandMap;
|
||||||
import org.bukkit.command.TabCompleter;
|
import org.bukkit.command.TabCompleter;
|
||||||
|
import org.bukkit.command.defaults.BukkitCommand;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
@ -304,11 +306,12 @@ public class CommandManager implements CommandExecutor, TabCompleter {
|
|||||||
|
|
||||||
public static void registerCommandDynamically(Plugin plugin, String command, CommandExecutor executor, TabCompleter tabManager) {
|
public static void registerCommandDynamically(Plugin plugin, String command, CommandExecutor executor, TabCompleter tabManager) {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
// Retrieve the SimpleCommandMap from the server
|
// Retrieve the SimpleCommandMap from the server
|
||||||
Class<?> classCraftServer = Bukkit.getServer().getClass();
|
Class<?> clazzCraftServer = Bukkit.getServer().getClass();
|
||||||
Field fieldCommandMap = classCraftServer.getDeclaredField("commandMap");
|
Object craftServer = clazzCraftServer.cast(Bukkit.getServer());
|
||||||
fieldCommandMap.setAccessible(true);
|
SimpleCommandMap commandMap = (SimpleCommandMap) craftServer.getClass()
|
||||||
SimpleCommandMap commandMap = (SimpleCommandMap) fieldCommandMap.get(Bukkit.getServer());
|
.getDeclaredMethod("getCommandMap").invoke(craftServer);
|
||||||
|
|
||||||
// Construct a new Command object
|
// Construct a new Command object
|
||||||
Constructor<PluginCommand> constructorPluginCommand = PluginCommand.class.getDeclaredConstructor(String.class, Plugin.class);
|
Constructor<PluginCommand> constructorPluginCommand = PluginCommand.class.getDeclaredConstructor(String.class, Plugin.class);
|
||||||
@ -340,4 +343,12 @@ public class CommandManager implements CommandExecutor, TabCompleter {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
private class DCommand extends PluginCommand {
|
||||||
|
|
||||||
|
protected DCommand(@NotNull String name, @NotNull Plugin owner) {
|
||||||
|
super(name, owner);
|
||||||
|
}
|
||||||
|
} */
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ import com.songoda.core.SongodaCore;
|
|||||||
import com.songoda.core.commands.AbstractCommand;
|
import com.songoda.core.commands.AbstractCommand;
|
||||||
import com.songoda.core.compatibility.ServerProject;
|
import com.songoda.core.compatibility.ServerProject;
|
||||||
import com.songoda.core.compatibility.ServerVersion;
|
import com.songoda.core.compatibility.ServerVersion;
|
||||||
import com.songoda.core.utils.NMSUtils;
|
import com.songoda.core.compatibility.ClassMapping;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
@ -24,7 +24,7 @@ public class SongodaCoreDiagCommand extends AbstractCommand {
|
|||||||
super(false, "diag");
|
super(false, "diag");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
serverInstance = NMSUtils.getNMSClass("MinecraftServer").getMethod("getServer").invoke(null);
|
serverInstance = ClassMapping.MINECRAFT_SERVER.getClazz().getMethod("getServer").invoke(null);
|
||||||
tpsField = serverInstance.getClass().getField("recentTps");
|
tpsField = serverInstance.getClass().getField("recentTps");
|
||||||
} catch (NoSuchFieldException | SecurityException | IllegalAccessException | IllegalArgumentException
|
} catch (NoSuchFieldException | SecurityException | IllegalAccessException | IllegalArgumentException
|
||||||
| InvocationTargetException | NoSuchMethodException e) {
|
| InvocationTargetException | NoSuchMethodException e) {
|
||||||
|
@ -164,14 +164,14 @@ public class WorldGuardFlagHandler {
|
|||||||
|
|
||||||
private static Object getPrivateField(Class<?> c, Object handle, String fieldName) throws Exception {
|
private static Object getPrivateField(Class<?> c, Object handle, String fieldName) throws Exception {
|
||||||
Field field = c.getDeclaredField(fieldName);
|
Field field = c.getDeclaredField(fieldName);
|
||||||
field.setAccessible(true);
|
field.setAccessible(true); // This should be okay since it only runs on older versions.
|
||||||
return field.get(handle);
|
return field.get(handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void setStaticField(Field field, Object value) throws Exception {
|
private static void setStaticField(Field field, Object value) throws Exception {
|
||||||
field.setAccessible(true);
|
field.setAccessible(true); // This should be okay since it only runs on older versions.
|
||||||
Field modifier = Field.class.getDeclaredField("modifiers");
|
Field modifier = Field.class.getDeclaredField("modifiers");
|
||||||
modifier.setAccessible(true);
|
modifier.setAccessible(true); // This should be okay since it only runs on older versions.
|
||||||
modifier.setInt(field, field.getModifiers() & ~Modifier.FINAL);
|
modifier.setInt(field, field.getModifiers() & ~Modifier.FINAL);
|
||||||
field.set(null, value);
|
field.set(null, value);
|
||||||
}
|
}
|
||||||
|
@ -93,6 +93,11 @@ public class NmsManager {
|
|||||||
nbt = new com.songoda.core.nms.v1_16_R3.nbt.NBTCoreImpl();
|
nbt = new com.songoda.core.nms.v1_16_R3.nbt.NBTCoreImpl();
|
||||||
world = new com.songoda.core.nms.v1_16_R3.world.WorldCoreImpl();
|
world = new com.songoda.core.nms.v1_16_R3.world.WorldCoreImpl();
|
||||||
break;
|
break;
|
||||||
|
case "v1_17_R1":
|
||||||
|
anvil = new com.songoda.core.nms.v1_17_R1.anvil.AnvilCore();
|
||||||
|
nbt = new com.songoda.core.nms.v1_17_R1.nbt.NBTCoreImpl();
|
||||||
|
world = new com.songoda.core.nms.v1_17_R1.world.WorldCoreImpl();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
Logger.getLogger(NmsManager.class.getName()).log(Level.SEVERE, "Failed to load NMS for this server version: version {0} not found", serverPackageVersion);
|
Logger.getLogger(NmsManager.class.getName()).log(Level.SEVERE, "Failed to load NMS for this server version: version {0} not found", serverPackageVersion);
|
||||||
anvil = null;
|
anvil = null;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.songoda.core.utils;
|
package com.songoda.core.utils;
|
||||||
|
|
||||||
|
import com.songoda.core.compatibility.ClassMapping;
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.core.compatibility.ServerVersion;
|
import com.songoda.core.compatibility.ServerVersion;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@ -321,19 +322,17 @@ public class BlockUtils {
|
|||||||
try {
|
try {
|
||||||
// Cache reflection.
|
// Cache reflection.
|
||||||
if (clazzCraftWorld == null) {
|
if (clazzCraftWorld == null) {
|
||||||
String serverPackagePath = Bukkit.getServer().getClass().getPackage().getName();
|
clazzCraftWorld = ClassMapping.CRAFT_WORLD.getClazz();
|
||||||
String ver = serverPackagePath.substring(serverPackagePath.lastIndexOf('.') + 1);
|
clazzCraftBlock = ClassMapping.CRAFT_BLOCK.getClazz();
|
||||||
clazzCraftWorld = Class.forName("org.bukkit.craftbukkit." + ver + ".CraftWorld");
|
clazzBlockPosition = ClassMapping.BLOCK_POSITION.getClazz();
|
||||||
clazzCraftBlock = Class.forName("org.bukkit.craftbukkit." + ver + ".block.CraftBlock");
|
Class<?> clazzWorld = ClassMapping.WORLD.getClazz();
|
||||||
clazzBlockPosition = Class.forName("net.minecraft.server." + ver + ".BlockPosition");
|
Class<?> clazzBlock = ClassMapping.BLOCK.getClazz();
|
||||||
Class<?> clazzWorld = Class.forName("net.minecraft.server." + ver + ".World");
|
|
||||||
Class<?> clazzBlock = Class.forName("net.minecraft.server." + ver + ".Block");
|
|
||||||
|
|
||||||
getHandle = clazzCraftWorld.getMethod("getHandle");
|
getHandle = clazzCraftWorld.getMethod("getHandle");
|
||||||
updateAdjacentComparators = clazzWorld.getMethod("updateAdjacentComparators", clazzBlockPosition, clazzBlock);
|
updateAdjacentComparators = clazzWorld.getMethod("updateAdjacentComparators", clazzBlockPosition, clazzBlock);
|
||||||
|
|
||||||
craftBlock_getNMS = clazzCraftBlock.getDeclaredMethod("getNMS");
|
craftBlock_getNMS = clazzCraftBlock.getDeclaredMethod("getNMS");
|
||||||
Class<?> clazzBlockData = Class.forName("net.minecraft.server." + ver + ".BlockBase$BlockData");
|
Class<?> clazzBlockData = ClassMapping.BLOCK_BASE.getClazz("BlockData");
|
||||||
nmsBlockData_getBlock = clazzBlockData.getDeclaredMethod("getBlock");
|
nmsBlockData_getBlock = clazzBlockData.getDeclaredMethod("getBlock");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -374,14 +373,13 @@ public class BlockUtils {
|
|||||||
try {
|
try {
|
||||||
// Cache reflection
|
// Cache reflection
|
||||||
if (clazzIBlockData == null) {
|
if (clazzIBlockData == null) {
|
||||||
String ver = Bukkit.getServer().getClass().getPackage().getName().substring(23);
|
clazzIBlockData = ClassMapping.I_BLOCK_DATA.getClazz();
|
||||||
clazzIBlockData = Class.forName("net.minecraft.server." + ver + ".IBlockData");
|
clazzBlockPosition = ClassMapping.BLOCK_POSITION.getClazz();
|
||||||
clazzBlockPosition = Class.forName("net.minecraft.server." + ver + ".BlockPosition");
|
clazzCraftWorld = ClassMapping.CRAFT_WORLD.getClazz();
|
||||||
clazzCraftWorld = Class.forName("org.bukkit.craftbukkit." + ver + ".CraftWorld");
|
clazzBlocks = ClassMapping.BLOCKS.getClazz();
|
||||||
clazzBlocks = Class.forName("net.minecraft.server." + ver + ".Blocks");
|
Class<?> clazzBlock = ClassMapping.BLOCK.getClazz();
|
||||||
Class<?> clazzBlock = Class.forName("net.minecraft.server." + ver + ".Block");
|
Class<?> clazzWorld = ClassMapping.WORLD.getClazz();
|
||||||
Class<?> clazzWorld = Class.forName("net.minecraft.server." + ver + ".World");
|
Class<?> clazzChunk = ClassMapping.CHUNK.getClazz();
|
||||||
Class<?> clazzChunk = Class.forName("net.minecraft.server." + ver + ".Chunk");
|
|
||||||
|
|
||||||
getHandle = clazzCraftWorld.getMethod("getHandle");
|
getHandle = clazzCraftWorld.getMethod("getHandle");
|
||||||
getChunkAt = clazzWorld.getMethod("getChunkAt", int.class, int.class);
|
getChunkAt = clazzWorld.getMethod("getChunkAt", int.class, int.class);
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.songoda.core.utils;
|
package com.songoda.core.utils;
|
||||||
|
|
||||||
|
import com.songoda.core.compatibility.ClassMapping;
|
||||||
import com.songoda.core.compatibility.ServerVersion;
|
import com.songoda.core.compatibility.ServerVersion;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Effect;
|
import org.bukkit.Effect;
|
||||||
@ -86,27 +87,25 @@ public class BlockUtilsModern {
|
|||||||
try {
|
try {
|
||||||
// Cache reflection.
|
// Cache reflection.
|
||||||
|
|
||||||
String ver = Bukkit.getServer().getClass().getPackage().getName().substring(23);
|
clazzCraftWorld = ClassMapping.CRAFT_WORLD.getClazz();
|
||||||
clazzCraftWorld = Class.forName("org.bukkit.craftbukkit." + ver + ".CraftWorld");
|
clazzCraftBlock = ClassMapping.CRAFT_BLOCK.getClazz();
|
||||||
clazzCraftBlock = Class.forName("org.bukkit.craftbukkit." + ver + ".block.CraftBlock");
|
|
||||||
//clazzBlockPosition = Class.forName("net.minecraft.server." + ver + ".BlockPosition");
|
|
||||||
|
|
||||||
craftWorld_getHandle = clazzCraftWorld.getMethod("getHandle");
|
craftWorld_getHandle = clazzCraftWorld.getMethod("getHandle");
|
||||||
craftBlock_getPostition = clazzCraftBlock.getDeclaredMethod("getPosition");
|
craftBlock_getPostition = clazzCraftBlock.getDeclaredMethod("getPosition");
|
||||||
|
|
||||||
craftBlock_getNMS = clazzCraftBlock.getDeclaredMethod("getNMS");
|
craftBlock_getNMS = clazzCraftBlock.getDeclaredMethod("getNMS");
|
||||||
Class<?> clazzBlockData = Class.forName("net.minecraft.server." + ver + ".BlockBase$BlockData");
|
Class<?> clazzBlockData = ClassMapping.BLOCK_BASE.getClazz("BlockData");
|
||||||
nmsBlockData_getBlock = clazzBlockData.getDeclaredMethod("getBlock");
|
nmsBlockData_getBlock = clazzBlockData.getDeclaredMethod("getBlock");
|
||||||
|
|
||||||
Class<?> clazzCraftBlockData = Class.forName("org.bukkit.craftbukkit." + ver + ".block.data.CraftBlockData");
|
Class<?> clazzCraftBlockData = ClassMapping.CRAFT_BLOCK_DATA.getClazz();
|
||||||
craftBlockData_getState = clazzCraftBlockData.getDeclaredMethod("getState");
|
craftBlockData_getState = clazzCraftBlockData.getDeclaredMethod("getState");
|
||||||
|
|
||||||
Class<?> clazzWorld = Class.forName("net.minecraft.server." + ver + ".World");
|
Class<?> clazzWorld = ClassMapping.WORLD.getClazz();
|
||||||
Class<?> clazzBlockState = Class.forName("net.minecraft.server." + ver + ".IBlockData");
|
Class<?> clazzBlockState = ClassMapping.I_BLOCK_DATA.getClazz();
|
||||||
Class<?> clazzBlockPos = Class.forName("net.minecraft.server." + ver + ".BlockPosition");
|
Class<?> clazzBlockPos = ClassMapping.BLOCK_POSITION.getClazz();
|
||||||
clazzLeverBlock = Class.forName("net.minecraft.server." + ver + ".BlockLever");
|
clazzLeverBlock = ClassMapping.BLOCK_LEVER.getClazz();
|
||||||
clazzButtonBlock = Class.forName("net.minecraft.server." + ver + ".BlockButtonAbstract");
|
clazzButtonBlock = ClassMapping.BLOCK_BUTTON_ABSTRACT.getClazz();
|
||||||
clazzPressurePlateBlock = Class.forName("net.minecraft.server." + ver + ".BlockPressurePlateAbstract");
|
clazzPressurePlateBlock = ClassMapping.BLOCK_PRESSURE_PLATE_ABSTRACT.getClazz();
|
||||||
|
|
||||||
// nmsLever_updateNeighbours, nmsButton_updateNeighbours, nmsPlate_updateNeighbours
|
// nmsLever_updateNeighbours, nmsButton_updateNeighbours, nmsPlate_updateNeighbours
|
||||||
nmsLever_updateNeighbours = clazzLeverBlock.getDeclaredMethod(ServerVersion.isServerVersionAbove(ServerVersion.V1_13)
|
nmsLever_updateNeighbours = clazzLeverBlock.getDeclaredMethod(ServerVersion.isServerVersionAbove(ServerVersion.V1_13)
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
package com.songoda.core.utils;
|
package com.songoda.core.utils;
|
||||||
|
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import org.apache.commons.lang.WordUtils;
|
import com.songoda.core.compatibility.ClassMapping;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
@ -24,12 +23,11 @@ public class EntityUtils {
|
|||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
String ver = Bukkit.getServer().getClass().getPackage().getName().substring(23);
|
clazzEntityInsentient = ClassMapping.ENTITY_INSENTIENT.getClazz();
|
||||||
clazzEntityInsentient = Class.forName("net.minecraft.server." + ver + ".EntityInsentient");
|
clazzEntity = ClassMapping.ENTITY.getClazz();
|
||||||
clazzEntity = Class.forName("net.minecraft.server." + ver + ".Entity");
|
clazzCraftEntity = ClassMapping.CRAFT_ENTITY.getClazz();
|
||||||
clazzCraftEntity = Class.forName("org.bukkit.craftbukkit." + ver + ".entity.CraftEntity");
|
|
||||||
methodGetHandle = clazzCraftEntity.getDeclaredMethod("getHandle");
|
methodGetHandle = clazzCraftEntity.getDeclaredMethod("getHandle");
|
||||||
} catch (ClassNotFoundException | NoSuchMethodException e) {
|
} catch (NoSuchMethodException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,9 +7,8 @@ import com.mojang.authlib.GameProfile;
|
|||||||
import com.mojang.authlib.properties.Property;
|
import com.mojang.authlib.properties.Property;
|
||||||
import com.songoda.core.compatibility.CompatibleHand;
|
import com.songoda.core.compatibility.CompatibleHand;
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.core.compatibility.CompatibleSound;
|
|
||||||
import com.songoda.core.compatibility.ServerVersion;
|
import com.songoda.core.compatibility.ServerVersion;
|
||||||
import com.songoda.core.nms.NmsManager;
|
import com.songoda.core.compatibility.ClassMapping;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -120,43 +119,6 @@ public class ItemUtils {
|
|||||||
return clone;
|
return clone;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ItemStack addDamage(ItemStack item, int damage) {
|
|
||||||
return addDamage(null, item, damage);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ItemStack addDamage(Player player, ItemStack item, int damage) {
|
|
||||||
if (item == null)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
int maxDurability = item.getType().getMaxDurability();
|
|
||||||
int durability;
|
|
||||||
|
|
||||||
if (ServerVersion.isServerVersionBelow(ServerVersion.V1_11)
|
|
||||||
? NmsManager.getNbt().of(item).has("Unbreakable")
|
|
||||||
: item.getItemMeta().isUnbreakable()) {
|
|
||||||
return item;
|
|
||||||
} else if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) {
|
|
||||||
// ItemStack.setDurability(short) still works in 1.13-1.14, but use these methods now
|
|
||||||
ItemMeta meta = item.getItemMeta();
|
|
||||||
if (meta instanceof Damageable) {
|
|
||||||
Damageable damageable = ((Damageable) meta);
|
|
||||||
damageable.setDamage(((Damageable) meta).getDamage() + damage);
|
|
||||||
item.setItemMeta(meta);
|
|
||||||
durability = damageable.getDamage();
|
|
||||||
} else {
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
item.setDurability((short) Math.max(0, item.getDurability() + damage));
|
|
||||||
durability = item.getDurability();
|
|
||||||
}
|
|
||||||
if (durability >= maxDurability && player != null) {
|
|
||||||
player.getInventory().removeItem(item);
|
|
||||||
CompatibleSound.ENTITY_ITEM_BREAK.play(player);
|
|
||||||
}
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean hasEnoughDurability(ItemStack tool, int requiredAmount) {
|
public static boolean hasEnoughDurability(ItemStack tool, int requiredAmount) {
|
||||||
if (tool.getType().getMaxDurability() <= 1)
|
if (tool.getType().getMaxDurability() <= 1)
|
||||||
return true;
|
return true;
|
||||||
@ -173,10 +135,10 @@ public class ItemUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static Class cb_ItemStack = NMSUtils.getCraftClass("inventory.CraftItemStack");
|
static Class cb_ItemStack = NMSUtils.getCraftClass("inventory.CraftItemStack");
|
||||||
static Class mc_ItemStack = NMSUtils.getNMSClass("ItemStack");
|
static Class mc_ItemStack = ClassMapping.ITEM_STACK.getClazz();
|
||||||
static Class mc_NBTTagCompound = NMSUtils.getNMSClass("NBTTagCompound");
|
static Class mc_NBTTagCompound = ClassMapping.NBT_TAG_COMPOUND.getClazz();
|
||||||
static Class mc_NBTTagList = NMSUtils.getNMSClass("NBTTagList");
|
static Class mc_NBTTagList = ClassMapping.NBT_TAG_LIST.getClazz();
|
||||||
static Class mc_NBTBase = NMSUtils.getNMSClass("NBTBase");
|
static Class mc_NBTBase = ClassMapping.NBT_BASE.getClazz();
|
||||||
static Method mc_ItemStack_getTag;
|
static Method mc_ItemStack_getTag;
|
||||||
static Method mc_ItemStack_setTag;
|
static Method mc_ItemStack_setTag;
|
||||||
static Method mc_NBTTagCompound_set;
|
static Method mc_NBTTagCompound_set;
|
||||||
@ -292,7 +254,7 @@ public class ItemUtils {
|
|||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Class mc_Item = NMSUtils.getNMSClass("Item");
|
private static Class<?> mc_Item = ClassMapping.ITEM.getClazz();
|
||||||
private static Method mc_Item_getItem;
|
private static Method mc_Item_getItem;
|
||||||
private static Field mc_Item_maxStackSize;
|
private static Field mc_Item_maxStackSize;
|
||||||
|
|
||||||
@ -348,15 +310,22 @@ public class ItemUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static ItemStack getCustomHead(String texture) {
|
public static ItemStack getCustomHead(String texture) {
|
||||||
ItemStack skullItem = CompatibleMaterial.PLAYER_HEAD.getItem();
|
return getCustomHead(null, texture);
|
||||||
if (ServerVersion.isServerVersionBelow(ServerVersion.V1_8)) {
|
|
||||||
return skullItem;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ItemStack getCustomHead(String signature, String texture) {
|
||||||
|
ItemStack skullItem = CompatibleMaterial.PLAYER_HEAD.getItem();
|
||||||
|
if (ServerVersion.isServerVersionBelow(ServerVersion.V1_8))
|
||||||
|
return skullItem;
|
||||||
|
|
||||||
SkullMeta sm = (SkullMeta) skullItem.getItemMeta();
|
SkullMeta sm = (SkullMeta) skullItem.getItemMeta();
|
||||||
GameProfile gm;
|
GameProfile gm;
|
||||||
if (texture.endsWith("=")) {
|
if (texture.endsWith("=")) {
|
||||||
gm = new GameProfile(UUID.nameUUIDFromBytes(texture.getBytes()), "CustomHead");
|
gm = new GameProfile(UUID.nameUUIDFromBytes(texture.getBytes()), "CustomHead");
|
||||||
|
if (signature == null)
|
||||||
gm.getProperties().put("textures", new Property("texture", texture.replaceAll("=", "")));
|
gm.getProperties().put("textures", new Property("texture", texture.replaceAll("=", "")));
|
||||||
|
else
|
||||||
|
gm.getProperties().put("textures", new Property("textures", texture, signature));
|
||||||
} else {
|
} else {
|
||||||
gm = new GameProfile(UUID.nameUUIDFromBytes(texture.getBytes()), "CustomHead");
|
gm = new GameProfile(UUID.nameUUIDFromBytes(texture.getBytes()), "CustomHead");
|
||||||
byte[] encodedData = Base64.getEncoder().encode(String.format("{textures:{SKIN:{url:\"http://textures.minecraft.net/texture/%s\"}}}", texture).getBytes());
|
byte[] encodedData = Base64.getEncoder().encode(String.format("{textures:{SKIN:{url:\"http://textures.minecraft.net/texture/%s\"}}}", texture).getBytes());
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.songoda.core.utils;
|
package com.songoda.core.utils;
|
||||||
|
|
||||||
import com.songoda.core.compatibility.ServerVersion;
|
import com.songoda.core.compatibility.ServerVersion;
|
||||||
|
import com.songoda.core.compatibility.ClassMapping;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
@ -8,17 +9,6 @@ import java.lang.reflect.Method;
|
|||||||
|
|
||||||
public class NMSUtils {
|
public class NMSUtils {
|
||||||
|
|
||||||
public static Class<?> getNMSClass(String className) {
|
|
||||||
try {
|
|
||||||
String fullName = "net.minecraft.server." + ServerVersion.getServerVersionString() + "." + className;
|
|
||||||
Class<?> clazz = Class.forName(fullName);
|
|
||||||
return clazz;
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Class<?> getCraftClass(String className) {
|
public static Class<?> getCraftClass(String className) {
|
||||||
try {
|
try {
|
||||||
String fullName = "org.bukkit.craftbukkit." + ServerVersion.getServerVersionString() + "." + className;
|
String fullName = "org.bukkit.craftbukkit." + ServerVersion.getServerVersionString() + "." + className;
|
||||||
@ -65,14 +55,7 @@ public class NMSUtils {
|
|||||||
|
|
||||||
public static void setField(Object object, String fieldName, Object fieldValue, boolean declared) {
|
public static void setField(Object object, String fieldName, Object fieldValue, boolean declared) {
|
||||||
try {
|
try {
|
||||||
Field field;
|
Field field = declared ? object.getClass().getDeclaredField(fieldName) : object.getClass().getField(fieldName);
|
||||||
|
|
||||||
if (declared) {
|
|
||||||
field = object.getClass().getDeclaredField(fieldName);
|
|
||||||
} else {
|
|
||||||
field = object.getClass().getField(fieldName);
|
|
||||||
}
|
|
||||||
|
|
||||||
field.setAccessible(true);
|
field.setAccessible(true);
|
||||||
field.set(object, fieldValue);
|
field.set(object, fieldValue);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -84,7 +67,7 @@ public class NMSUtils {
|
|||||||
try {
|
try {
|
||||||
Object handle = player.getClass().getMethod("getHandle").invoke(player);
|
Object handle = player.getClass().getMethod("getHandle").invoke(player);
|
||||||
Object playerConnection = handle.getClass().getField("playerConnection").get(handle);
|
Object playerConnection = handle.getClass().getField("playerConnection").get(handle);
|
||||||
playerConnection.getClass().getMethod("sendPacket", getNMSClass("Packet")).invoke(playerConnection, packet);
|
playerConnection.getClass().getMethod("sendPacket", ClassMapping.PACKET.getClazz()).invoke(playerConnection, packet);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
75
Core/src/main/java/com/songoda/core/world/SItemStack.java
Normal file
75
Core/src/main/java/com/songoda/core/world/SItemStack.java
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
package com.songoda.core.world;
|
||||||
|
|
||||||
|
import com.songoda.core.compatibility.CompatibleSound;
|
||||||
|
import com.songoda.core.compatibility.ServerVersion;
|
||||||
|
import com.songoda.core.nms.NmsManager;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.player.PlayerItemBreakEvent;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.Damageable;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
|
public class SItemStack {
|
||||||
|
|
||||||
|
protected final com.songoda.core.nms.world.SItemStack sItem;
|
||||||
|
protected final ItemStack item;
|
||||||
|
|
||||||
|
public SItemStack(ItemStack item) {
|
||||||
|
this.item = item;
|
||||||
|
this.sItem = NmsManager.getWorld().getItemStack(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage the selected item
|
||||||
|
*
|
||||||
|
* @param player the player who's item you want to damage
|
||||||
|
* @param damage the amount of damage to apply to the item
|
||||||
|
*/
|
||||||
|
public ItemStack addDamage(Player player, int damage) {
|
||||||
|
if (item == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
int maxDurability = item.getType().getMaxDurability();
|
||||||
|
int durability;
|
||||||
|
|
||||||
|
if (ServerVersion.isServerVersionBelow(ServerVersion.V1_11)
|
||||||
|
? NmsManager.getNbt().of(item).has("Unbreakable")
|
||||||
|
: item.getItemMeta().isUnbreakable()) {
|
||||||
|
return item;
|
||||||
|
} else if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) {
|
||||||
|
// ItemStack.setDurability(short) still works in 1.13-1.14, but use these methods now
|
||||||
|
ItemMeta meta = item.getItemMeta();
|
||||||
|
if (meta instanceof Damageable) {
|
||||||
|
Damageable damageable = ((Damageable) meta);
|
||||||
|
damageable.setDamage(((Damageable) meta).getDamage() + damage);
|
||||||
|
item.setItemMeta(meta);
|
||||||
|
durability = damageable.getDamage();
|
||||||
|
} else {
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
item.setDurability((short) Math.max(0, item.getDurability() + damage));
|
||||||
|
durability = item.getDurability();
|
||||||
|
}
|
||||||
|
if (durability >= maxDurability && player != null)
|
||||||
|
destroy(player);
|
||||||
|
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void destroy(Player player) {
|
||||||
|
destroy(player, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void destroy(Player player, int amount) {
|
||||||
|
PlayerItemBreakEvent breakEvent = new PlayerItemBreakEvent(player, item);
|
||||||
|
Bukkit.getServer().getPluginManager().callEvent(breakEvent);
|
||||||
|
sItem.breakItem(player, amount);
|
||||||
|
CompatibleSound.ENTITY_ITEM_BREAK.play(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack getItem() {
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
}
|
@ -17,12 +17,12 @@ import java.util.concurrent.ThreadLocalRandom;
|
|||||||
|
|
||||||
public class SSpawner {
|
public class SSpawner {
|
||||||
|
|
||||||
private static final WorldCore worldCore = NmsManager.getWorld();
|
protected final com.songoda.core.nms.world.SSpawner sSpawner;
|
||||||
|
|
||||||
protected final Location location;
|
protected final Location location;
|
||||||
|
|
||||||
public SSpawner(Location location) {
|
public SSpawner(Location location) {
|
||||||
this.location = location;
|
this.location = location;
|
||||||
|
this.sSpawner = NmsManager.getWorld().getSpawner(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SSpawner(CreatureSpawner spawner) {
|
public SSpawner(CreatureSpawner spawner) {
|
||||||
@ -60,7 +60,7 @@ public class SSpawner {
|
|||||||
int amountSpawned = 0;
|
int amountSpawned = 0;
|
||||||
while (spawnCountUsed-- > 0) {
|
while (spawnCountUsed-- > 0) {
|
||||||
EntityType type = types[ThreadLocalRandom.current().nextInt(types.length)];
|
EntityType type = types[ThreadLocalRandom.current().nextInt(types.length)];
|
||||||
LivingEntity entity = worldCore.getSpawner(location).spawnEntity(type, particle, spawned, canSpawnOn);
|
LivingEntity entity = sSpawner.spawnEntity(type, particle, spawned, canSpawnOn);
|
||||||
if (entity != null) {
|
if (entity != null) {
|
||||||
// If this entity is indeed stackable then spawn a single stack with the desired stack size.
|
// If this entity is indeed stackable then spawn a single stack with the desired stack size.
|
||||||
if (useStackPlugin && amountToSpawn >= EntityStackerManager.getMinStackSize(type)) {
|
if (useStackPlugin && amountToSpawn >= EntityStackerManager.getMinStackSize(type)) {
|
||||||
@ -73,4 +73,8 @@ public class SSpawner {
|
|||||||
}
|
}
|
||||||
return amountSpawned;
|
return amountSpawned;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Location getLocation() {
|
||||||
|
return location;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
39
Core/src/main/java/com/songoda/core/world/SWorld.java
Normal file
39
Core/src/main/java/com/songoda/core/world/SWorld.java
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
package com.songoda.core.world;
|
||||||
|
|
||||||
|
import com.songoda.core.compatibility.ServerVersion;
|
||||||
|
import com.songoda.core.nms.NmsManager;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SWorld {
|
||||||
|
|
||||||
|
protected final com.songoda.core.nms.world.SWorld sWorld;
|
||||||
|
protected final World world;
|
||||||
|
|
||||||
|
public SWorld(World world) {
|
||||||
|
this.world = world;
|
||||||
|
this.sWorld = NmsManager.getWorld().getWorld(world);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Entity[] getEntitiesFromChunk(int x, int z) {
|
||||||
|
Location location = new Location(null, 0.0D, 0.0D, 0.0D);
|
||||||
|
return getLivingEntities().stream().filter((entity) -> {
|
||||||
|
entity.getLocation(location);
|
||||||
|
return location.getBlockX() >> 4 == x && location.getBlockZ() >> 4 == z;
|
||||||
|
}).toArray(Entity[]::new);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<LivingEntity> getLivingEntities() {
|
||||||
|
if (ServerVersion.isServerVersionBelow(ServerVersion.V1_17))
|
||||||
|
return world.getLivingEntities();
|
||||||
|
return sWorld.getLivingEntities();
|
||||||
|
}
|
||||||
|
|
||||||
|
public World getWorld() {
|
||||||
|
return world;
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
package com.songoda.core.world;
|
package com.songoda.core.world;
|
||||||
|
|
||||||
import com.songoda.core.compatibility.ServerVersion;
|
import com.songoda.core.compatibility.ServerVersion;
|
||||||
|
import com.songoda.core.compatibility.ClassMapping;
|
||||||
import com.songoda.core.utils.NMSUtils;
|
import com.songoda.core.utils.NMSUtils;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -9,7 +10,7 @@ import java.lang.reflect.Constructor;
|
|||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
public class WorldBorder {
|
public class SWorldBorder {
|
||||||
|
|
||||||
private static Class<?> packetPlayOutWorldBorderEnumClass;
|
private static Class<?> packetPlayOutWorldBorderEnumClass;
|
||||||
private static Class<?> worldBorderClass;
|
private static Class<?> worldBorderClass;
|
||||||
@ -18,7 +19,7 @@ public class WorldBorder {
|
|||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
Class<?> packetPlayOutWorldBorder = NMSUtils.getNMSClass("PacketPlayOutWorldBorder");
|
Class<?> packetPlayOutWorldBorder = ClassMapping.PACKET_PLAY_OUT_WORLD_BORDER.getClazz();
|
||||||
|
|
||||||
if(packetPlayOutWorldBorder != null) {
|
if(packetPlayOutWorldBorder != null) {
|
||||||
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11))
|
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11))
|
||||||
@ -26,7 +27,7 @@ public class WorldBorder {
|
|||||||
else
|
else
|
||||||
packetPlayOutWorldBorderEnumClass = packetPlayOutWorldBorder.getDeclaredClasses()[1];
|
packetPlayOutWorldBorderEnumClass = packetPlayOutWorldBorder.getDeclaredClasses()[1];
|
||||||
|
|
||||||
worldBorderClass = NMSUtils.getNMSClass("WorldBorder");
|
worldBorderClass = ClassMapping.WORLD_BORDER.getClazz();
|
||||||
craftWorldClass = NMSUtils.getCraftClass("CraftWorld");
|
craftWorldClass = NMSUtils.getCraftClass("CraftWorld");
|
||||||
|
|
||||||
packetPlayOutWorldBorderConstructor = packetPlayOutWorldBorder.getConstructor(worldBorderClass,
|
packetPlayOutWorldBorderConstructor = packetPlayOutWorldBorder.getConstructor(worldBorderClass,
|
13
NMS/NMS-API/src/com/songoda/core/nms/world/SItemStack.java
Normal file
13
NMS/NMS-API/src/com/songoda/core/nms/world/SItemStack.java
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
package com.songoda.core.nms.world;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
public interface SItemStack {
|
||||||
|
|
||||||
|
Random random = new Random();
|
||||||
|
|
||||||
|
void breakItem(Player player, int amount);
|
||||||
|
|
||||||
|
}
|
10
NMS/NMS-API/src/com/songoda/core/nms/world/SWorld.java
Normal file
10
NMS/NMS-API/src/com/songoda/core/nms/world/SWorld.java
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
package com.songoda.core.nms.world;
|
||||||
|
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface SWorld {
|
||||||
|
|
||||||
|
List<LivingEntity> getLivingEntities();
|
||||||
|
}
|
@ -1,11 +1,17 @@
|
|||||||
package com.songoda.core.nms.world;
|
package com.songoda.core.nms.world;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.CreatureSpawner;
|
import org.bukkit.block.CreatureSpawner;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public interface WorldCore {
|
public interface WorldCore {
|
||||||
|
|
||||||
SSpawner getSpawner(CreatureSpawner spawner);
|
SSpawner getSpawner(CreatureSpawner spawner);
|
||||||
|
|
||||||
SSpawner getSpawner(Location location);
|
SSpawner getSpawner(Location location);
|
||||||
|
|
||||||
|
SItemStack getItemStack(ItemStack item);
|
||||||
|
|
||||||
|
SWorld getWorld(World world);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.songoda.core.nms.v1_10_R1.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
|
import net.minecraft.server.v1_10_R1.EntityPlayer;
|
||||||
|
import net.minecraft.server.v1_10_R1.EnumParticle;
|
||||||
|
import net.minecraft.server.v1_10_R1.Item;
|
||||||
|
import net.minecraft.server.v1_10_R1.Vec3D;
|
||||||
|
import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer;
|
||||||
|
import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class SItemStackImpl implements SItemStack {
|
||||||
|
|
||||||
|
private final ItemStack item;
|
||||||
|
|
||||||
|
public SItemStackImpl(ItemStack item) {
|
||||||
|
this.item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void breakItem(Player player, int amount) {
|
||||||
|
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
|
||||||
|
for (int i = 0; i < 5; ++i) {
|
||||||
|
Vec3D vec3d = new Vec3D(((double) random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D);
|
||||||
|
vec3d = vec3d.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d = vec3d.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
double d0 = (double) (-random.nextFloat()) * 0.6D - 0.3D;
|
||||||
|
Vec3D vec3d1 = new Vec3D(((double) random.nextFloat() - 0.5D) * 0.3D, d0, 0.6D);
|
||||||
|
vec3d1 = vec3d1.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.add(entityPlayer.locX, entityPlayer.locY + (double) entityPlayer.getHeadHeight(), entityPlayer.locZ);
|
||||||
|
entityPlayer.world.addParticle(EnumParticle.ITEM_CRACK, vec3d1.x, vec3d1.y, vec3d1.z, vec3d.x, vec3d.y + 0.05D, vec3d.z, new int[]{Item.getId(CraftItemStack.asNMSCopy(item).getItem())});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package com.songoda.core.nms.v1_10_R1.world.spawner;
|
package com.songoda.core.nms.v1_10_R1.world;
|
||||||
|
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.songoda.core.nms.v1_10_R1.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SWorldImpl implements SWorld {
|
||||||
|
|
||||||
|
public SWorldImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<LivingEntity> getLivingEntities() {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,13 @@
|
|||||||
package com.songoda.core.nms.v1_10_R1.world;
|
package com.songoda.core.nms.v1_10_R1.world;
|
||||||
|
|
||||||
import com.songoda.core.nms.v1_10_R1.world.spawner.SSpawnerImpl;
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
import com.songoda.core.nms.world.SSpawner;
|
import com.songoda.core.nms.world.SSpawner;
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
import com.songoda.core.nms.world.WorldCore;
|
import com.songoda.core.nms.world.WorldCore;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.CreatureSpawner;
|
import org.bukkit.block.CreatureSpawner;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class WorldCoreImpl implements WorldCore {
|
public class WorldCoreImpl implements WorldCore {
|
||||||
|
|
||||||
@ -17,4 +20,14 @@ public class WorldCoreImpl implements WorldCore {
|
|||||||
public SSpawner getSpawner(Location location) {
|
public SSpawner getSpawner(Location location) {
|
||||||
return new SSpawnerImpl(location);
|
return new SSpawnerImpl(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SItemStack getItemStack(ItemStack item) {
|
||||||
|
return new SItemStackImpl(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SWorld getWorld(World world) {
|
||||||
|
return new SWorldImpl();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.songoda.core.nms.v1_11_R1.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
|
import net.minecraft.server.v1_11_R1.EntityPlayer;
|
||||||
|
import net.minecraft.server.v1_11_R1.EnumParticle;
|
||||||
|
import net.minecraft.server.v1_11_R1.Item;
|
||||||
|
import net.minecraft.server.v1_11_R1.Vec3D;
|
||||||
|
import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer;
|
||||||
|
import org.bukkit.craftbukkit.v1_11_R1.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class SItemStackImpl implements SItemStack {
|
||||||
|
|
||||||
|
private final ItemStack item;
|
||||||
|
|
||||||
|
public SItemStackImpl(ItemStack item) {
|
||||||
|
this.item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void breakItem(Player player, int amount) {
|
||||||
|
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
|
||||||
|
for (int i = 0; i < 5; ++i) {
|
||||||
|
Vec3D vec3d = new Vec3D(((double) random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D);
|
||||||
|
vec3d = vec3d.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d = vec3d.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
double d0 = (double) (-random.nextFloat()) * 0.6D - 0.3D;
|
||||||
|
Vec3D vec3d1 = new Vec3D(((double) random.nextFloat() - 0.5D) * 0.3D, d0, 0.6D);
|
||||||
|
vec3d1 = vec3d1.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.add(entityPlayer.locX, entityPlayer.locY + (double) entityPlayer.getHeadHeight(), entityPlayer.locZ);
|
||||||
|
entityPlayer.world.addParticle(EnumParticle.ITEM_CRACK, vec3d1.x, vec3d1.y, vec3d1.z, vec3d.x, vec3d.y + 0.05D, vec3d.z, new int[]{Item.getId(CraftItemStack.asNMSCopy(item).getItem())});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package com.songoda.core.nms.v1_11_R1.world.spawner;
|
package com.songoda.core.nms.v1_11_R1.world;
|
||||||
|
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.songoda.core.nms.v1_11_R1.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SWorldImpl implements SWorld {
|
||||||
|
|
||||||
|
public SWorldImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<LivingEntity> getLivingEntities() {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,13 @@
|
|||||||
package com.songoda.core.nms.v1_11_R1.world;
|
package com.songoda.core.nms.v1_11_R1.world;
|
||||||
|
|
||||||
import com.songoda.core.nms.v1_11_R1.world.spawner.SSpawnerImpl;
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
import com.songoda.core.nms.world.SSpawner;
|
import com.songoda.core.nms.world.SSpawner;
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
import com.songoda.core.nms.world.WorldCore;
|
import com.songoda.core.nms.world.WorldCore;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.CreatureSpawner;
|
import org.bukkit.block.CreatureSpawner;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class WorldCoreImpl implements WorldCore {
|
public class WorldCoreImpl implements WorldCore {
|
||||||
|
|
||||||
@ -17,4 +20,14 @@ public class WorldCoreImpl implements WorldCore {
|
|||||||
public SSpawner getSpawner(Location location) {
|
public SSpawner getSpawner(Location location) {
|
||||||
return new SSpawnerImpl(location);
|
return new SSpawnerImpl(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SItemStack getItemStack(ItemStack item) {
|
||||||
|
return new SItemStackImpl(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SWorld getWorld(World world) {
|
||||||
|
return new SWorldImpl();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.songoda.core.nms.v1_12_R1.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
|
import net.minecraft.server.v1_12_R1.EntityPlayer;
|
||||||
|
import net.minecraft.server.v1_12_R1.EnumParticle;
|
||||||
|
import net.minecraft.server.v1_12_R1.Item;
|
||||||
|
import net.minecraft.server.v1_12_R1.Vec3D;
|
||||||
|
import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer;
|
||||||
|
import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class SItemStackImpl implements SItemStack {
|
||||||
|
|
||||||
|
private final ItemStack item;
|
||||||
|
|
||||||
|
public SItemStackImpl(ItemStack item) {
|
||||||
|
this.item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void breakItem(Player player, int amount) {
|
||||||
|
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
|
||||||
|
for (int i = 0; i < 5; ++i) {
|
||||||
|
Vec3D vec3d = new Vec3D(((double) random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D);
|
||||||
|
vec3d = vec3d.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d = vec3d.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
double d0 = (double) (-random.nextFloat()) * 0.6D - 0.3D;
|
||||||
|
Vec3D vec3d1 = new Vec3D(((double) random.nextFloat() - 0.5D) * 0.3D, d0, 0.6D);
|
||||||
|
vec3d1 = vec3d1.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.add(entityPlayer.locX, entityPlayer.locY + (double) entityPlayer.getHeadHeight(), entityPlayer.locZ);
|
||||||
|
entityPlayer.world.addParticle(EnumParticle.ITEM_CRACK, vec3d1.x, vec3d1.y, vec3d1.z, vec3d.x, vec3d.y + 0.05D, vec3d.z, new int[]{Item.getId(CraftItemStack.asNMSCopy(item).getItem())});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package com.songoda.core.nms.v1_12_R1.world.spawner;
|
package com.songoda.core.nms.v1_12_R1.world;
|
||||||
|
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.songoda.core.nms.v1_12_R1.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SWorldImpl implements SWorld {
|
||||||
|
|
||||||
|
public SWorldImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<LivingEntity> getLivingEntities() {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,13 @@
|
|||||||
package com.songoda.core.nms.v1_12_R1.world;
|
package com.songoda.core.nms.v1_12_R1.world;
|
||||||
|
|
||||||
import com.songoda.core.nms.v1_12_R1.world.spawner.SSpawnerImpl;
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
import com.songoda.core.nms.world.SSpawner;
|
import com.songoda.core.nms.world.SSpawner;
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
import com.songoda.core.nms.world.WorldCore;
|
import com.songoda.core.nms.world.WorldCore;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.CreatureSpawner;
|
import org.bukkit.block.CreatureSpawner;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class WorldCoreImpl implements WorldCore {
|
public class WorldCoreImpl implements WorldCore {
|
||||||
|
|
||||||
@ -17,4 +20,14 @@ public class WorldCoreImpl implements WorldCore {
|
|||||||
public SSpawner getSpawner(Location location) {
|
public SSpawner getSpawner(Location location) {
|
||||||
return new SSpawnerImpl(location);
|
return new SSpawnerImpl(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SItemStack getItemStack(ItemStack item) {
|
||||||
|
return new SItemStackImpl(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SWorld getWorld(World world) {
|
||||||
|
return new SWorldImpl();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.songoda.core.nms.v1_13_R1.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
|
import net.minecraft.server.v1_13_R1.EntityPlayer;
|
||||||
|
import net.minecraft.server.v1_13_R1.ParticleParamItem;
|
||||||
|
import net.minecraft.server.v1_13_R1.Particles;
|
||||||
|
import net.minecraft.server.v1_13_R1.Vec3D;
|
||||||
|
import org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer;
|
||||||
|
import org.bukkit.craftbukkit.v1_13_R1.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class SItemStackImpl implements SItemStack {
|
||||||
|
|
||||||
|
private final ItemStack item;
|
||||||
|
|
||||||
|
public SItemStackImpl(ItemStack item) {
|
||||||
|
this.item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void breakItem(Player player, int amount) {
|
||||||
|
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
|
||||||
|
for (int i = 0; i < amount; ++i) {
|
||||||
|
Vec3D vec3d = new Vec3D(((double) this.random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D);
|
||||||
|
vec3d = vec3d.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d = vec3d.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
double d0 = (double) (-this.random.nextFloat()) * 0.6D - 0.3D;
|
||||||
|
Vec3D vec3d1 = new Vec3D(((double) this.random.nextFloat() - 0.5D) * 0.3D, d0, 0.6D);
|
||||||
|
vec3d1 = vec3d1.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.add(entityPlayer.locX, entityPlayer.locY + (double)entityPlayer.getHeadHeight(), entityPlayer.locZ);
|
||||||
|
entityPlayer.world.addParticle(new ParticleParamItem(Particles.C, CraftItemStack.asNMSCopy(item)), vec3d1.x, vec3d1.y, vec3d1.z, vec3d.x, vec3d.y + 0.05D, vec3d.z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package com.songoda.core.nms.v1_13_R1.world.spawner;
|
package com.songoda.core.nms.v1_13_R1.world;
|
||||||
|
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.songoda.core.nms.v1_13_R1.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SWorldImpl implements SWorld {
|
||||||
|
|
||||||
|
public SWorldImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<LivingEntity> getLivingEntities() {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,13 @@
|
|||||||
package com.songoda.core.nms.v1_13_R1.world;
|
package com.songoda.core.nms.v1_13_R1.world;
|
||||||
|
|
||||||
import com.songoda.core.nms.v1_13_R1.world.spawner.SSpawnerImpl;
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
import com.songoda.core.nms.world.SSpawner;
|
import com.songoda.core.nms.world.SSpawner;
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
import com.songoda.core.nms.world.WorldCore;
|
import com.songoda.core.nms.world.WorldCore;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.CreatureSpawner;
|
import org.bukkit.block.CreatureSpawner;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class WorldCoreImpl implements WorldCore {
|
public class WorldCoreImpl implements WorldCore {
|
||||||
|
|
||||||
@ -17,4 +20,14 @@ public class WorldCoreImpl implements WorldCore {
|
|||||||
public SSpawner getSpawner(Location location) {
|
public SSpawner getSpawner(Location location) {
|
||||||
return new SSpawnerImpl(location);
|
return new SSpawnerImpl(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SItemStack getItemStack(ItemStack item) {
|
||||||
|
return new SItemStackImpl(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SWorld getWorld(World world) {
|
||||||
|
return new SWorldImpl();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.songoda.core.nms.v1_13_R2.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
|
import net.minecraft.server.v1_13_R2.EntityPlayer;
|
||||||
|
import net.minecraft.server.v1_13_R2.ParticleParamItem;
|
||||||
|
import net.minecraft.server.v1_13_R2.Particles;
|
||||||
|
import net.minecraft.server.v1_13_R2.Vec3D;
|
||||||
|
import org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer;
|
||||||
|
import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class SItemStackImpl implements SItemStack {
|
||||||
|
|
||||||
|
private final ItemStack item;
|
||||||
|
|
||||||
|
public SItemStackImpl(ItemStack item) {
|
||||||
|
this.item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void breakItem(Player player, int amount) {
|
||||||
|
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
|
||||||
|
for (int i = 0; i < amount; ++i) {
|
||||||
|
Vec3D vec3d = new Vec3D(((double) this.random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D);
|
||||||
|
vec3d = vec3d.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d = vec3d.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
double d0 = (double) (-this.random.nextFloat()) * 0.6D - 0.3D;
|
||||||
|
Vec3D vec3d1 = new Vec3D(((double) this.random.nextFloat() - 0.5D) * 0.3D, d0, 0.6D);
|
||||||
|
vec3d1 = vec3d1.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.add(entityPlayer.locX, entityPlayer.locY + (double)entityPlayer.getHeadHeight(), entityPlayer.locZ);
|
||||||
|
entityPlayer.world.addParticle(new ParticleParamItem(Particles.C, CraftItemStack.asNMSCopy(item)), vec3d1.x, vec3d1.y, vec3d1.z, vec3d.x, vec3d.y + 0.05D, vec3d.z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package com.songoda.core.nms.v1_13_R2.world.spawner;
|
package com.songoda.core.nms.v1_13_R2.world;
|
||||||
|
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.songoda.core.nms.v1_13_R2.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SWorldImpl implements SWorld {
|
||||||
|
|
||||||
|
public SWorldImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<LivingEntity> getLivingEntities() {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,13 @@
|
|||||||
package com.songoda.core.nms.v1_13_R2.world;
|
package com.songoda.core.nms.v1_13_R2.world;
|
||||||
|
|
||||||
import com.songoda.core.nms.v1_13_R2.world.spawner.SSpawnerImpl;
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
import com.songoda.core.nms.world.SSpawner;
|
import com.songoda.core.nms.world.SSpawner;
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
import com.songoda.core.nms.world.WorldCore;
|
import com.songoda.core.nms.world.WorldCore;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.CreatureSpawner;
|
import org.bukkit.block.CreatureSpawner;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class WorldCoreImpl implements WorldCore {
|
public class WorldCoreImpl implements WorldCore {
|
||||||
|
|
||||||
@ -17,4 +20,14 @@ public class WorldCoreImpl implements WorldCore {
|
|||||||
public SSpawner getSpawner(Location location) {
|
public SSpawner getSpawner(Location location) {
|
||||||
return new SSpawnerImpl(location);
|
return new SSpawnerImpl(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SItemStack getItemStack(ItemStack item) {
|
||||||
|
return new SItemStackImpl(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SWorld getWorld(World world) {
|
||||||
|
return new SWorldImpl();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.songoda.core.nms.v1_14_R1.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
|
import net.minecraft.server.v1_14_R1.EntityPlayer;
|
||||||
|
import net.minecraft.server.v1_14_R1.ParticleParamItem;
|
||||||
|
import net.minecraft.server.v1_14_R1.Particles;
|
||||||
|
import net.minecraft.server.v1_14_R1.Vec3D;
|
||||||
|
import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer;
|
||||||
|
import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class SItemStackImpl implements SItemStack {
|
||||||
|
|
||||||
|
private final ItemStack item;
|
||||||
|
|
||||||
|
public SItemStackImpl(ItemStack item) {
|
||||||
|
this.item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void breakItem(Player player, int amount) {
|
||||||
|
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
|
||||||
|
for (int i = 0; i < amount; ++i) {
|
||||||
|
Vec3D vec3d = new Vec3D(((double) this.random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D);
|
||||||
|
vec3d = vec3d.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d = vec3d.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
double d0 = (double) (-this.random.nextFloat()) * 0.6D - 0.3D;
|
||||||
|
Vec3D vec3d1 = new Vec3D(((double) this.random.nextFloat() - 0.5D) * 0.3D, d0, 0.6D);
|
||||||
|
vec3d1 = vec3d1.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.add(entityPlayer.locX, entityPlayer.locY + (double)entityPlayer.getHeadHeight(), entityPlayer.locZ);
|
||||||
|
entityPlayer.world.addParticle(new ParticleParamItem(Particles.ITEM, CraftItemStack.asNMSCopy(item)), vec3d1.x, vec3d1.y, vec3d1.z, vec3d.x, vec3d.y + 0.05D, vec3d.z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package com.songoda.core.nms.v1_14_R1.world.spawner;
|
package com.songoda.core.nms.v1_14_R1.world;
|
||||||
|
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.songoda.core.nms.v1_14_R1.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SWorldImpl implements SWorld {
|
||||||
|
|
||||||
|
public SWorldImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<LivingEntity> getLivingEntities() {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,13 @@
|
|||||||
package com.songoda.core.nms.v1_14_R1.world;
|
package com.songoda.core.nms.v1_14_R1.world;
|
||||||
|
|
||||||
import com.songoda.core.nms.v1_14_R1.world.spawner.SSpawnerImpl;
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
import com.songoda.core.nms.world.SSpawner;
|
import com.songoda.core.nms.world.SSpawner;
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
import com.songoda.core.nms.world.WorldCore;
|
import com.songoda.core.nms.world.WorldCore;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.CreatureSpawner;
|
import org.bukkit.block.CreatureSpawner;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class WorldCoreImpl implements WorldCore {
|
public class WorldCoreImpl implements WorldCore {
|
||||||
|
|
||||||
@ -17,4 +20,14 @@ public class WorldCoreImpl implements WorldCore {
|
|||||||
public SSpawner getSpawner(Location location) {
|
public SSpawner getSpawner(Location location) {
|
||||||
return new SSpawnerImpl(location);
|
return new SSpawnerImpl(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SItemStack getItemStack(ItemStack item) {
|
||||||
|
return new SItemStackImpl(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SWorld getWorld(World world) {
|
||||||
|
return new SWorldImpl();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.songoda.core.nms.v1_15_R1.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
|
import net.minecraft.server.v1_15_R1.EntityPlayer;
|
||||||
|
import net.minecraft.server.v1_15_R1.ParticleParamItem;
|
||||||
|
import net.minecraft.server.v1_15_R1.Particles;
|
||||||
|
import net.minecraft.server.v1_15_R1.Vec3D;
|
||||||
|
import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer;
|
||||||
|
import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class SItemStackImpl implements SItemStack {
|
||||||
|
|
||||||
|
private final ItemStack item;
|
||||||
|
|
||||||
|
public SItemStackImpl(ItemStack item) {
|
||||||
|
this.item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void breakItem(Player player, int amount) {
|
||||||
|
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
|
||||||
|
for (int i = 0; i < amount; ++i) {
|
||||||
|
Vec3D vec3d = new Vec3D(((double) this.random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D);
|
||||||
|
vec3d = vec3d.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d = vec3d.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
double d0 = (double) (-this.random.nextFloat()) * 0.6D - 0.3D;
|
||||||
|
Vec3D vec3d1 = new Vec3D(((double) this.random.nextFloat() - 0.5D) * 0.3D, d0, 0.6D);
|
||||||
|
vec3d1 = vec3d1.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.add(entityPlayer.locX(), entityPlayer.getHeadY(), entityPlayer.locZ());
|
||||||
|
entityPlayer.world.addParticle(new ParticleParamItem(Particles.ITEM, CraftItemStack.asNMSCopy(item)), vec3d1.x, vec3d1.y, vec3d1.z, vec3d.x, vec3d.y + 0.05D, vec3d.z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package com.songoda.core.nms.v1_15_R1.world.spawner;
|
package com.songoda.core.nms.v1_15_R1.world;
|
||||||
|
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.songoda.core.nms.v1_15_R1.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SWorldImpl implements SWorld {
|
||||||
|
|
||||||
|
public SWorldImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<LivingEntity> getLivingEntities() {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,13 @@
|
|||||||
package com.songoda.core.nms.v1_15_R1.world;
|
package com.songoda.core.nms.v1_15_R1.world;
|
||||||
|
|
||||||
import com.songoda.core.nms.v1_15_R1.world.spawner.SSpawnerImpl;
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
import com.songoda.core.nms.world.SSpawner;
|
import com.songoda.core.nms.world.SSpawner;
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
import com.songoda.core.nms.world.WorldCore;
|
import com.songoda.core.nms.world.WorldCore;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.CreatureSpawner;
|
import org.bukkit.block.CreatureSpawner;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class WorldCoreImpl implements WorldCore {
|
public class WorldCoreImpl implements WorldCore {
|
||||||
|
|
||||||
@ -17,4 +20,14 @@ public class WorldCoreImpl implements WorldCore {
|
|||||||
public SSpawner getSpawner(Location location) {
|
public SSpawner getSpawner(Location location) {
|
||||||
return new SSpawnerImpl(location);
|
return new SSpawnerImpl(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SItemStack getItemStack(ItemStack item) {
|
||||||
|
return new SItemStackImpl(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SWorld getWorld(World world) {
|
||||||
|
return new SWorldImpl();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.songoda.core.nms.v1_16_R1.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
|
import net.minecraft.server.v1_16_R1.EntityPlayer;
|
||||||
|
import net.minecraft.server.v1_16_R1.ParticleParamItem;
|
||||||
|
import net.minecraft.server.v1_16_R1.Particles;
|
||||||
|
import net.minecraft.server.v1_16_R1.Vec3D;
|
||||||
|
import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer;
|
||||||
|
import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class SItemStackImpl implements SItemStack {
|
||||||
|
|
||||||
|
private final ItemStack item;
|
||||||
|
|
||||||
|
public SItemStackImpl(ItemStack item) {
|
||||||
|
this.item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void breakItem(Player player, int amount) {
|
||||||
|
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
|
||||||
|
for (int i = 0; i < amount; ++i) {
|
||||||
|
Vec3D vec3d = new Vec3D(((double) this.random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D);
|
||||||
|
vec3d = vec3d.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d = vec3d.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
double d0 = (double) (-this.random.nextFloat()) * 0.6D - 0.3D;
|
||||||
|
Vec3D vec3d1 = new Vec3D(((double) this.random.nextFloat() - 0.5D) * 0.3D, d0, 0.6D);
|
||||||
|
vec3d1 = vec3d1.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.add(entityPlayer.locX(), entityPlayer.getHeadY(), entityPlayer.locZ());
|
||||||
|
entityPlayer.world.addParticle(new ParticleParamItem(Particles.ITEM, CraftItemStack.asNMSCopy(item)), vec3d1.x, vec3d1.y, vec3d1.z, vec3d.x, vec3d.y + 0.05D, vec3d.z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package com.songoda.core.nms.v1_16_R1.world.spawner;
|
package com.songoda.core.nms.v1_16_R1.world;
|
||||||
|
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.songoda.core.nms.v1_16_R1.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SWorldImpl implements SWorld {
|
||||||
|
|
||||||
|
public SWorldImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<LivingEntity> getLivingEntities() {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,13 @@
|
|||||||
package com.songoda.core.nms.v1_16_R1.world;
|
package com.songoda.core.nms.v1_16_R1.world;
|
||||||
|
|
||||||
import com.songoda.core.nms.v1_16_R1.world.spawner.SSpawnerImpl;
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
import com.songoda.core.nms.world.SSpawner;
|
import com.songoda.core.nms.world.SSpawner;
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
import com.songoda.core.nms.world.WorldCore;
|
import com.songoda.core.nms.world.WorldCore;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.CreatureSpawner;
|
import org.bukkit.block.CreatureSpawner;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class WorldCoreImpl implements WorldCore {
|
public class WorldCoreImpl implements WorldCore {
|
||||||
|
|
||||||
@ -17,4 +20,14 @@ public class WorldCoreImpl implements WorldCore {
|
|||||||
public SSpawner getSpawner(Location location) {
|
public SSpawner getSpawner(Location location) {
|
||||||
return new SSpawnerImpl(location);
|
return new SSpawnerImpl(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SItemStack getItemStack(ItemStack item) {
|
||||||
|
return new SItemStackImpl(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SWorld getWorld(World world) {
|
||||||
|
return new SWorldImpl();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.songoda.core.nms.v1_16_R2.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
|
import net.minecraft.server.v1_16_R2.EntityPlayer;
|
||||||
|
import net.minecraft.server.v1_16_R2.ParticleParamItem;
|
||||||
|
import net.minecraft.server.v1_16_R2.Particles;
|
||||||
|
import net.minecraft.server.v1_16_R2.Vec3D;
|
||||||
|
import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer;
|
||||||
|
import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class SItemStackImpl implements SItemStack {
|
||||||
|
|
||||||
|
private final ItemStack item;
|
||||||
|
|
||||||
|
public SItemStackImpl(ItemStack item) {
|
||||||
|
this.item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void breakItem(Player player, int amount) {
|
||||||
|
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
|
||||||
|
for (int i = 0; i < amount; ++i) {
|
||||||
|
Vec3D vec3d = new Vec3D(((double) this.random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D);
|
||||||
|
vec3d = vec3d.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d = vec3d.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
double d0 = (double) (-this.random.nextFloat()) * 0.6D - 0.3D;
|
||||||
|
Vec3D vec3d1 = new Vec3D(((double) this.random.nextFloat() - 0.5D) * 0.3D, d0, 0.6D);
|
||||||
|
vec3d1 = vec3d1.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.add(entityPlayer.locX(), entityPlayer.getHeadY(), entityPlayer.locZ());
|
||||||
|
entityPlayer.world.addParticle(new ParticleParamItem(Particles.ITEM, CraftItemStack.asNMSCopy(item)), vec3d1.x, vec3d1.y, vec3d1.z, vec3d.x, vec3d.y + 0.05D, vec3d.z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package com.songoda.core.nms.v1_16_R2.world.spawner;
|
package com.songoda.core.nms.v1_16_R2.world;
|
||||||
|
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.songoda.core.nms.v1_16_R2.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SWorldImpl implements SWorld {
|
||||||
|
|
||||||
|
public SWorldImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<LivingEntity> getLivingEntities() {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,13 @@
|
|||||||
package com.songoda.core.nms.v1_16_R2.world;
|
package com.songoda.core.nms.v1_16_R2.world;
|
||||||
|
|
||||||
import com.songoda.core.nms.v1_16_R2.world.spawner.SSpawnerImpl;
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
import com.songoda.core.nms.world.SSpawner;
|
import com.songoda.core.nms.world.SSpawner;
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
import com.songoda.core.nms.world.WorldCore;
|
import com.songoda.core.nms.world.WorldCore;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.CreatureSpawner;
|
import org.bukkit.block.CreatureSpawner;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class WorldCoreImpl implements WorldCore {
|
public class WorldCoreImpl implements WorldCore {
|
||||||
|
|
||||||
@ -17,4 +20,14 @@ public class WorldCoreImpl implements WorldCore {
|
|||||||
public SSpawner getSpawner(Location location) {
|
public SSpawner getSpawner(Location location) {
|
||||||
return new SSpawnerImpl(location);
|
return new SSpawnerImpl(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SItemStack getItemStack(ItemStack item) {
|
||||||
|
return new SItemStackImpl(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SWorld getWorld(World world) {
|
||||||
|
return new SWorldImpl();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.songoda.core.nms.v1_16_R3.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
|
import net.minecraft.server.v1_16_R3.EntityPlayer;
|
||||||
|
import net.minecraft.server.v1_16_R3.ParticleParamItem;
|
||||||
|
import net.minecraft.server.v1_16_R3.Particles;
|
||||||
|
import net.minecraft.server.v1_16_R3.Vec3D;
|
||||||
|
import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer;
|
||||||
|
import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class SItemStackImpl implements SItemStack {
|
||||||
|
|
||||||
|
private final ItemStack item;
|
||||||
|
|
||||||
|
public SItemStackImpl(ItemStack item) {
|
||||||
|
this.item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void breakItem(Player player, int amount) {
|
||||||
|
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
|
||||||
|
for (int i = 0; i < amount; ++i) {
|
||||||
|
Vec3D vec3d = new Vec3D(((double) this.random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D);
|
||||||
|
vec3d = vec3d.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d = vec3d.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
double d0 = (double) (-this.random.nextFloat()) * 0.6D - 0.3D;
|
||||||
|
Vec3D vec3d1 = new Vec3D(((double) this.random.nextFloat() - 0.5D) * 0.3D, d0, 0.6D);
|
||||||
|
vec3d1 = vec3d1.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.add(entityPlayer.locX(), entityPlayer.getHeadY(), entityPlayer.locZ());
|
||||||
|
entityPlayer.world.addParticle(new ParticleParamItem(Particles.ITEM, CraftItemStack.asNMSCopy(item)), vec3d1.x, vec3d1.y, vec3d1.z, vec3d.x, vec3d.y + 0.05D, vec3d.z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package com.songoda.core.nms.v1_16_R3.world.spawner;
|
package com.songoda.core.nms.v1_16_R3.world;
|
||||||
|
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.songoda.core.nms.v1_16_R3.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SWorldImpl implements SWorld {
|
||||||
|
|
||||||
|
public SWorldImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<LivingEntity> getLivingEntities() {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,13 @@
|
|||||||
package com.songoda.core.nms.v1_16_R3.world;
|
package com.songoda.core.nms.v1_16_R3.world;
|
||||||
|
|
||||||
import com.songoda.core.nms.v1_16_R3.world.spawner.SSpawnerImpl;
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
import com.songoda.core.nms.world.SSpawner;
|
import com.songoda.core.nms.world.SSpawner;
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
import com.songoda.core.nms.world.WorldCore;
|
import com.songoda.core.nms.world.WorldCore;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.CreatureSpawner;
|
import org.bukkit.block.CreatureSpawner;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class WorldCoreImpl implements WorldCore {
|
public class WorldCoreImpl implements WorldCore {
|
||||||
|
|
||||||
@ -17,4 +20,14 @@ public class WorldCoreImpl implements WorldCore {
|
|||||||
public SSpawner getSpawner(Location location) {
|
public SSpawner getSpawner(Location location) {
|
||||||
return new SSpawnerImpl(location);
|
return new SSpawnerImpl(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SItemStack getItemStack(ItemStack item) {
|
||||||
|
return new SItemStackImpl(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SWorld getWorld(World world) {
|
||||||
|
return new SWorldImpl();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
package com.songoda.core.nms.v1_17_R1.anvil;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
|
import net.minecraft.server.level.EntityPlayer;
|
||||||
|
import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
|
|
||||||
|
public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CustomAnvil createAnvil(Player player) {
|
||||||
|
EntityPlayer p = ((CraftPlayer) player).getHandle();
|
||||||
|
return new AnvilView(p.nextContainerCounter(), p, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CustomAnvil createAnvil(Player player, InventoryHolder holder) {
|
||||||
|
EntityPlayer p = ((CraftPlayer) player).getHandle();
|
||||||
|
return new AnvilView(p.nextContainerCounter(), p, holder);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package com.songoda.core.nms.v1_17_R1.anvil;
|
||||||
|
|
||||||
|
import net.minecraft.world.IInventory;
|
||||||
|
import net.minecraft.world.inventory.ContainerAnvil;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventoryAnvil;
|
||||||
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
|
|
||||||
|
public class AnvilInventoryCustom extends CraftInventoryAnvil {
|
||||||
|
|
||||||
|
final InventoryHolder holder;
|
||||||
|
|
||||||
|
public AnvilInventoryCustom(InventoryHolder holder, Location location, IInventory inventory, IInventory resultInventory, ContainerAnvil container) {
|
||||||
|
super(location, inventory, resultInventory, container);
|
||||||
|
this.holder = holder;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InventoryHolder getHolder() {
|
||||||
|
return holder;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,209 @@
|
|||||||
|
package com.songoda.core.nms.v1_17_R1.anvil;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
|
import com.songoda.core.nms.anvil.methods.AnvilTextChange;
|
||||||
|
import jdk.internal.misc.Unsafe;
|
||||||
|
import net.minecraft.core.BlockPosition;
|
||||||
|
import net.minecraft.network.chat.ChatMessage;
|
||||||
|
import net.minecraft.network.protocol.game.PacketPlayOutOpenWindow;
|
||||||
|
import net.minecraft.server.level.EntityPlayer;
|
||||||
|
import net.minecraft.world.IInventory;
|
||||||
|
import net.minecraft.world.entity.player.EntityHuman;
|
||||||
|
import net.minecraft.world.inventory.Container;
|
||||||
|
import net.minecraft.world.inventory.ContainerAccess;
|
||||||
|
import net.minecraft.world.inventory.ContainerAnvil;
|
||||||
|
import net.minecraft.world.inventory.ContainerAnvilAbstract;
|
||||||
|
import net.minecraft.world.inventory.Containers;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventoryView;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
public class AnvilView extends ContainerAnvil implements CustomAnvil {
|
||||||
|
|
||||||
|
private final EntityPlayer entity;
|
||||||
|
private final Inventory inventory;
|
||||||
|
private String customTitle = "Repairing";
|
||||||
|
private int cost = -1;
|
||||||
|
private boolean canUse = true;
|
||||||
|
private AnvilTextChange textChange = null;
|
||||||
|
|
||||||
|
// used for setting custom inventory
|
||||||
|
static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result
|
||||||
|
static Field mc_ContainerAnvil_resultInventory; // full inventory
|
||||||
|
static Field mc_ContainerAnvil_bukkitEntity;
|
||||||
|
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
mc_ContainerAnvil_repairInventory = ContainerAnvilAbstract.class.getDeclaredField("p");
|
||||||
|
mc_ContainerAnvil_repairInventory.setAccessible(true);
|
||||||
|
mc_ContainerAnvil_resultInventory = ContainerAnvilAbstract.class.getDeclaredField("o");
|
||||||
|
mc_ContainerAnvil_resultInventory.setAccessible(true);
|
||||||
|
mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity");
|
||||||
|
mc_ContainerAnvil_bukkitEntity.setAccessible(true);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1.14 also introduced a title field, also private, which can only be set once and can't be checked
|
||||||
|
static Field mc_Container_title;
|
||||||
|
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
mc_Container_title = Container.class.getDeclaredField("title");
|
||||||
|
mc_Container_title.setAccessible(true);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public AnvilView(int id, EntityPlayer entity, InventoryHolder holder) {
|
||||||
|
super(entity.nextContainerCounter(), entity.getInventory(), ContainerAccess.at(entity.getWorld(), new BlockPosition(0, 0, 0)));
|
||||||
|
this.setTitle(new ChatMessage(customTitle != null ? customTitle : ""));
|
||||||
|
this.checkReachable = false;
|
||||||
|
this.entity = entity;
|
||||||
|
if (holder != null) {
|
||||||
|
this.inventory = getBukkitView(entity, holder).getTopInventory();
|
||||||
|
} else {
|
||||||
|
this.inventory = getBukkitView().getTopInventory();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) {
|
||||||
|
try {
|
||||||
|
AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder,
|
||||||
|
new Location(entity.getWorld().getWorld(), 0, 0, 0),
|
||||||
|
(IInventory) mc_ContainerAnvil_repairInventory.get(this),
|
||||||
|
(IInventory) mc_ContainerAnvil_resultInventory.get(this), this);
|
||||||
|
CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this);
|
||||||
|
mc_ContainerAnvil_bukkitEntity.set(this, view);
|
||||||
|
return view;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
|
}
|
||||||
|
return getBukkitView();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canUse(EntityHuman entityhuman) {
|
||||||
|
return canUse;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void e() {
|
||||||
|
super.e();
|
||||||
|
if (cost >= 0) {
|
||||||
|
this.setLevelCost(cost);
|
||||||
|
}
|
||||||
|
textChange.onChange();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
e();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getRenameText() {
|
||||||
|
return this.v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRenameText(String text) {
|
||||||
|
this.a(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setOnChange(AnvilTextChange handler) {
|
||||||
|
textChange = handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCustomTitle() {
|
||||||
|
return customTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCustomTitle(String title) {
|
||||||
|
this.customTitle = title;
|
||||||
|
try {
|
||||||
|
mc_Container_title.set(this, new ChatMessage(customTitle != null ? customTitle : ""));
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setLevelCost(int cost) {
|
||||||
|
this.cost = cost;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getLevelCost() {
|
||||||
|
if (cost >= 0) {
|
||||||
|
return cost;
|
||||||
|
} else {
|
||||||
|
return this.getLevelCost();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCanUse(boolean bool) {
|
||||||
|
this.canUse = bool;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack getLeftInput() {
|
||||||
|
return inventory.getItem(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack getRightInput() {
|
||||||
|
return inventory.getItem(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack getOutput() {
|
||||||
|
return inventory.getItem(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setLeftInput(ItemStack item) {
|
||||||
|
inventory.setItem(0, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRightInput(ItemStack item) {
|
||||||
|
inventory.setItem(1, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setOutput(ItemStack item) {
|
||||||
|
inventory.setItem(2, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Inventory getInventory() {
|
||||||
|
return inventory;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void open() {
|
||||||
|
// Send the packet
|
||||||
|
entity.b.sendPacket(new PacketPlayOutOpenWindow(j, Containers.h, new ChatMessage(customTitle != null ? customTitle : "")));
|
||||||
|
|
||||||
|
// Set their active container to this anvil
|
||||||
|
entity.bV = this;
|
||||||
|
|
||||||
|
// Add the slot listener
|
||||||
|
entity.initMenu(entity.bV);
|
||||||
|
//entity.bV.addSlotListener(entity.cX);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,209 @@
|
|||||||
|
package com.songoda.core.nms.v1_17_R1.nbt;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.nbt.NBTCompound;
|
||||||
|
import com.songoda.core.nms.nbt.NBTObject;
|
||||||
|
import net.minecraft.nbt.NBTCompressedStreamTools;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.ObjectInputStream;
|
||||||
|
import java.io.ObjectOutputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class NBTCompoundImpl implements NBTCompound {
|
||||||
|
|
||||||
|
protected NBTTagCompound compound;
|
||||||
|
|
||||||
|
protected NBTCompoundImpl(NBTTagCompound compound) {
|
||||||
|
this.compound = compound;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NBTCompoundImpl() {
|
||||||
|
this.compound = new NBTTagCompound();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NBTCompound set(String tag, String s) {
|
||||||
|
compound.setString(tag, s);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NBTCompound set(String tag, boolean b) {
|
||||||
|
compound.setBoolean(tag, b);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NBTCompound set(String tag, int i) {
|
||||||
|
compound.setInt(tag, i);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NBTCompound set(String tag, double i) {
|
||||||
|
compound.setDouble(tag, i);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NBTCompound set(String tag, long l) {
|
||||||
|
compound.setLong(tag, l);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NBTCompound set(String tag, short s) {
|
||||||
|
compound.setShort(tag, s);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NBTCompound set(String tag, byte b) {
|
||||||
|
compound.setByte(tag, b);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NBTCompound set(String tag, int[] i) {
|
||||||
|
compound.setIntArray(tag, i);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NBTCompound set(String tag, byte[] b) {
|
||||||
|
compound.setByteArray(tag, b);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NBTCompound set(String tag, UUID u) {
|
||||||
|
compound.a(tag, u);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NBTCompound remove(String tag) {
|
||||||
|
compound.remove(tag);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean has(String tag) {
|
||||||
|
return compound.hasKey(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NBTObject getNBTObject(String tag) {
|
||||||
|
return new NBTObjectImpl(compound, tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getString(String tag) {
|
||||||
|
return getNBTObject(tag).asString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean getBoolean(String tag) {
|
||||||
|
return getNBTObject(tag).asBoolean();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getInt(String tag) {
|
||||||
|
return getNBTObject(tag).asInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getDouble(String tag) {
|
||||||
|
return getNBTObject(tag).asDouble();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getLong(String tag) {
|
||||||
|
return getNBTObject(tag).asLong();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getShort(String tag) {
|
||||||
|
return getNBTObject(tag).asShort();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte getByte(String tag) {
|
||||||
|
return getNBTObject(tag).asByte();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int[] getIntArray(String tag) {
|
||||||
|
return getNBTObject(tag).asIntArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte[] getByteArray(String tag) {
|
||||||
|
return getNBTObject(tag).asByteArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NBTCompound getCompound(String tag) {
|
||||||
|
if (has(tag)) {
|
||||||
|
return getNBTObject(tag).asCompound();
|
||||||
|
} else {
|
||||||
|
NBTTagCompound newCompound = new NBTTagCompound();
|
||||||
|
compound.set(tag, newCompound);
|
||||||
|
return new NBTCompoundImpl(newCompound);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getKeys() {
|
||||||
|
return compound.getKeys();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getKeys(String tag) {
|
||||||
|
return compound.getCompound(tag).getKeys();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte[] serialize(String... exclusions) {
|
||||||
|
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||||
|
ObjectOutputStream dataOutput = new ObjectOutputStream(outputStream)) {
|
||||||
|
addExtras();
|
||||||
|
NBTTagCompound compound = this.compound.clone();
|
||||||
|
|
||||||
|
for (String exclusion : exclusions)
|
||||||
|
compound.remove(exclusion);
|
||||||
|
|
||||||
|
NBTCompressedStreamTools.a(compound, (OutputStream) dataOutput);
|
||||||
|
|
||||||
|
return outputStream.toByteArray();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deSerialize(byte[] serialized) {
|
||||||
|
try (ByteArrayInputStream inputStream = new ByteArrayInputStream(serialized);
|
||||||
|
ObjectInputStream dataInput = new ObjectInputStream(inputStream)) {
|
||||||
|
compound = NBTCompressedStreamTools.a((InputStream) dataInput);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addExtras() {
|
||||||
|
// None
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return compound.toString();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
package com.songoda.core.nms.v1_17_R1.nbt;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.nbt.NBTCore;
|
||||||
|
import com.songoda.core.nms.nbt.NBTEntity;
|
||||||
|
import com.songoda.core.nms.nbt.NBTItem;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import org.bukkit.craftbukkit.v1_17_R1.entity.CraftEntity;
|
||||||
|
import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class NBTCoreImpl implements NBTCore {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NBTItem of(ItemStack item) {
|
||||||
|
return new NBTItemImpl(CraftItemStack.asNMSCopy(item));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NBTItem newItem() {
|
||||||
|
return new NBTItemImpl(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NBTEntity of(Entity entity) {
|
||||||
|
net.minecraft.world.entity.Entity nmsEntity = ((CraftEntity) entity).getHandle();
|
||||||
|
NBTTagCompound nbt = new NBTTagCompound();
|
||||||
|
nmsEntity.save(nbt);
|
||||||
|
return new NBTEntityImpl(nbt, nmsEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NBTEntity newEntity() {
|
||||||
|
return new NBTEntityImpl(new NBTTagCompound(), null);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,62 @@
|
|||||||
|
package com.songoda.core.nms.v1_17_R1.nbt;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.nbt.NBTEntity;
|
||||||
|
import net.minecraft.core.BlockPosition;
|
||||||
|
import net.minecraft.core.IRegistry;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.world.entity.Entity;
|
||||||
|
import net.minecraft.world.entity.EntityTypes;
|
||||||
|
import net.minecraft.world.entity.EnumMobSpawn;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.craftbukkit.v1_17_R1.CraftWorld;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public class NBTEntityImpl extends NBTCompoundImpl implements NBTEntity {
|
||||||
|
|
||||||
|
private Entity nmsEntity;
|
||||||
|
|
||||||
|
public NBTEntityImpl(NBTTagCompound entityNBT, Entity nmsEntity) {
|
||||||
|
super(entityNBT);
|
||||||
|
this.nmsEntity = nmsEntity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public org.bukkit.entity.Entity spawn(Location location) {
|
||||||
|
String entityType = getNBTObject("entity_type").asString();
|
||||||
|
|
||||||
|
Optional<EntityTypes<?>> optionalEntity = EntityTypes.a(entityType);
|
||||||
|
if (optionalEntity.isPresent()) {
|
||||||
|
Entity spawned = optionalEntity.get().spawnCreature(
|
||||||
|
((CraftWorld) location.getWorld()).getHandle(),
|
||||||
|
compound,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()),
|
||||||
|
EnumMobSpawn.n,
|
||||||
|
true,
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
|
if (spawned != null) {
|
||||||
|
spawned.load(compound);
|
||||||
|
org.bukkit.entity.Entity entity = spawned.getBukkitEntity();
|
||||||
|
entity.teleport(location);
|
||||||
|
nmsEntity = spawned;
|
||||||
|
return entity;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public org.bukkit.entity.Entity reSpawn(Location location) {
|
||||||
|
nmsEntity.die();
|
||||||
|
return spawn(location);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addExtras() {
|
||||||
|
compound.setString("entity_type", IRegistry.Y.getKey(nmsEntity.getEntityType()).toString());
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
package com.songoda.core.nms.v1_17_R1.nbt;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.nbt.NBTItem;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class NBTItemImpl extends NBTCompoundImpl implements NBTItem {
|
||||||
|
|
||||||
|
private final net.minecraft.world.item.ItemStack nmsItem;
|
||||||
|
|
||||||
|
public NBTItemImpl(net.minecraft.world.item.ItemStack nmsItem) {
|
||||||
|
super(nmsItem != null && nmsItem.hasTag() ? nmsItem.getTag() : new NBTTagCompound());
|
||||||
|
this.nmsItem = nmsItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack finish() {
|
||||||
|
if (nmsItem == null) {
|
||||||
|
return CraftItemStack.asBukkitCopy(net.minecraft.world.item.ItemStack.a(compound));
|
||||||
|
} else {
|
||||||
|
return CraftItemStack.asBukkitCopy(nmsItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addExtras() {
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,73 @@
|
|||||||
|
package com.songoda.core.nms.v1_17_R1.nbt;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.nbt.NBTCompound;
|
||||||
|
import com.songoda.core.nms.nbt.NBTObject;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public class NBTObjectImpl implements NBTObject {
|
||||||
|
|
||||||
|
private final NBTTagCompound compound;
|
||||||
|
private final String tag;
|
||||||
|
|
||||||
|
public NBTObjectImpl(NBTTagCompound compound, String tag) {
|
||||||
|
this.compound = compound;
|
||||||
|
this.tag = tag;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String asString() {
|
||||||
|
return compound.getString(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean asBoolean() {
|
||||||
|
return compound.getBoolean(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int asInt() {
|
||||||
|
return compound.getInt(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double asDouble() {
|
||||||
|
return compound.getDouble(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long asLong() {
|
||||||
|
return compound.getLong(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short asShort() {
|
||||||
|
return compound.getShort(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte asByte() {
|
||||||
|
return compound.getByte(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int[] asIntArray() {
|
||||||
|
return compound.getIntArray(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte[] asByteArray() {
|
||||||
|
return compound.getByteArray(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NBTCompound asCompound() {
|
||||||
|
return new NBTCompoundImpl(compound.getCompound(tag));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getKeys() {
|
||||||
|
return compound.getKeys();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.songoda.core.nms.v1_17_R1.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
|
import net.minecraft.core.particles.ParticleParamItem;
|
||||||
|
import net.minecraft.core.particles.Particles;
|
||||||
|
import net.minecraft.server.level.EntityPlayer;
|
||||||
|
import net.minecraft.world.phys.Vec3D;
|
||||||
|
import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer;
|
||||||
|
import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class SItemStackImpl implements SItemStack {
|
||||||
|
|
||||||
|
private final ItemStack item;
|
||||||
|
|
||||||
|
public SItemStackImpl(ItemStack item) {
|
||||||
|
this.item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void breakItem(Player player, int amount) {
|
||||||
|
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
|
||||||
|
for (int i = 0; i < amount; ++i) {
|
||||||
|
Vec3D vec3d = new Vec3D(((double) random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D);
|
||||||
|
vec3d = vec3d.a(-entityPlayer.getXRot() * 0.017453292F);
|
||||||
|
vec3d = vec3d.b(-entityPlayer.getYRot() * 0.017453292F);
|
||||||
|
double d0 = (double) (-random.nextFloat()) * 0.6D - 0.3D;
|
||||||
|
Vec3D vec3d1 = new Vec3D(((double) random.nextFloat() - 0.5D) * 0.3D, d0, 0.6D);
|
||||||
|
vec3d1 = vec3d1.a(-entityPlayer.getXRot() * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.b(-entityPlayer.getYRot() * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.add(entityPlayer.locX(), entityPlayer.getHeadY(), entityPlayer.locZ());
|
||||||
|
entityPlayer.t.addParticle(new ParticleParamItem(Particles.K, CraftItemStack.asNMSCopy(item)), vec3d1.b, vec3d1.c, vec3d1.d, vec3d.b, vec3d.c + 0.05D, vec3d.d);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,132 @@
|
|||||||
|
package com.songoda.core.nms.v1_17_R1.world;
|
||||||
|
|
||||||
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
|
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
||||||
|
import com.songoda.core.nms.world.SSpawner;
|
||||||
|
import com.songoda.core.nms.world.SpawnedEntity;
|
||||||
|
import net.minecraft.core.BlockPosition;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.server.level.WorldServer;
|
||||||
|
import net.minecraft.world.DifficultyDamageScaler;
|
||||||
|
import net.minecraft.world.entity.Entity;
|
||||||
|
import net.minecraft.world.entity.EntityInsentient;
|
||||||
|
import net.minecraft.world.entity.EntityTypes;
|
||||||
|
import net.minecraft.world.entity.EnumMobSpawn;
|
||||||
|
import net.minecraft.world.level.MobSpawnerData;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.block.BlockFace;
|
||||||
|
import org.bukkit.craftbukkit.v1_17_R1.CraftWorld;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.event.entity.CreatureSpawnEvent;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Random;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public class SSpawnerImpl implements SSpawner {
|
||||||
|
|
||||||
|
private final Location spawnerLocation;
|
||||||
|
|
||||||
|
public SSpawnerImpl(Location location) {
|
||||||
|
this.spawnerLocation = location;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LivingEntity spawnEntity(EntityType type, Location spawnerLocation) {
|
||||||
|
return spawnEntity(type, "EXPLOSION_NORMAL", null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LivingEntity spawnEntity(EntityType type, String particleType, SpawnedEntity spawned,
|
||||||
|
Set<CompatibleMaterial> canSpawnOn) {
|
||||||
|
|
||||||
|
MobSpawnerData data = new MobSpawnerData();
|
||||||
|
NBTTagCompound compound = data.getEntity();
|
||||||
|
|
||||||
|
String name = type.name().toLowerCase().replace("snowman", "snow_golem")
|
||||||
|
.replace("mushroom_cow", "mooshroom");
|
||||||
|
compound.setString("id", "minecraft:" + name);
|
||||||
|
|
||||||
|
short spawnRange = 4;
|
||||||
|
for (int i = 0; i < 50; i++) {
|
||||||
|
WorldServer world = ((CraftWorld) spawnerLocation.getWorld()).getHandle();
|
||||||
|
|
||||||
|
Random random = world.getRandom();
|
||||||
|
double x = spawnerLocation.getX() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D;
|
||||||
|
double y = spawnerLocation.getY() + random.nextInt(3) - 1;
|
||||||
|
double z = spawnerLocation.getZ() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D;
|
||||||
|
|
||||||
|
Optional<Entity> optionalEntity = EntityTypes.a(compound, world);
|
||||||
|
if (!optionalEntity.isPresent()) continue;
|
||||||
|
|
||||||
|
Entity entity = optionalEntity.get();
|
||||||
|
entity.setPosition(x, y, z);
|
||||||
|
|
||||||
|
BlockPosition position = entity.getChunkCoordinates();
|
||||||
|
DifficultyDamageScaler damageScaler = world.getDamageScaler(position);
|
||||||
|
|
||||||
|
if (!(entity instanceof EntityInsentient))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
EntityInsentient entityInsentient = (EntityInsentient) entity;
|
||||||
|
|
||||||
|
Location spot = new Location(spawnerLocation.getWorld(), x, y, z);
|
||||||
|
if (!canSpawn(world, entityInsentient, spot, canSpawnOn))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
entityInsentient.prepare(world, damageScaler, EnumMobSpawn.c,
|
||||||
|
null, null);
|
||||||
|
|
||||||
|
LivingEntity craftEntity = (LivingEntity) entity.getBukkitEntity();
|
||||||
|
|
||||||
|
if (spawned != null)
|
||||||
|
if (!spawned.onSpawn(craftEntity))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
if (particleType != null) {
|
||||||
|
float xx = (float) (0 + (Math.random() * 1));
|
||||||
|
float yy = (float) (0 + (Math.random() * 2));
|
||||||
|
float zz = (float) (0 + (Math.random() * 1));
|
||||||
|
CompatibleParticleHandler.spawnParticles(CompatibleParticleHandler.ParticleType.getParticle(particleType),
|
||||||
|
spot, 5, xx, yy, zz, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER);
|
||||||
|
|
||||||
|
spot.setYaw(random.nextFloat() * 360.0F);
|
||||||
|
craftEntity.teleport(spot);
|
||||||
|
|
||||||
|
return craftEntity;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean canSpawn(WorldServer world, EntityInsentient entityInsentient, Location location,
|
||||||
|
Set<CompatibleMaterial> canSpawnOn) {
|
||||||
|
|
||||||
|
if (!world.getCubes(entityInsentient, entityInsentient.getBoundingBox()))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
CompatibleMaterial spawnedIn = CompatibleMaterial.getMaterial(location.getBlock());
|
||||||
|
CompatibleMaterial spawnedOn = CompatibleMaterial.getMaterial(location.getBlock().getRelative(BlockFace.DOWN));
|
||||||
|
|
||||||
|
if (spawnedIn == null || spawnedOn == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!spawnedIn.isAir()
|
||||||
|
&& spawnedIn != CompatibleMaterial.WATER
|
||||||
|
&& !spawnedIn.name().contains("PRESSURE")
|
||||||
|
&& !spawnedIn.name().contains("SLAB")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (CompatibleMaterial material : canSpawnOn) {
|
||||||
|
if (material == null) continue;
|
||||||
|
|
||||||
|
if (spawnedOn.equals(material) || material.isAir())
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
package com.songoda.core.nms.v1_17_R1.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
|
import net.minecraft.server.level.WorldServer;
|
||||||
|
import net.minecraft.world.entity.Entity;
|
||||||
|
import net.minecraft.world.level.entity.LevelEntityGetter;
|
||||||
|
import net.minecraft.world.level.entity.PersistentEntitySectionManager;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.craftbukkit.v1_17_R1.CraftWorld;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SWorldImpl implements SWorld {
|
||||||
|
|
||||||
|
private final World world;
|
||||||
|
|
||||||
|
private static Field fieldG;
|
||||||
|
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
fieldG = WorldServer.class.getDeclaredField("G");
|
||||||
|
} catch (NoSuchFieldException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
fieldG.setAccessible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SWorldImpl(World world) {
|
||||||
|
this.world = world;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<LivingEntity> getLivingEntities() {
|
||||||
|
List<LivingEntity> list = new ArrayList();
|
||||||
|
try {
|
||||||
|
|
||||||
|
WorldServer worldServer = ((CraftWorld) world).getHandle();
|
||||||
|
LevelEntityGetter<net.minecraft.world.entity.Entity> entities =
|
||||||
|
((PersistentEntitySectionManager<Entity>) fieldG.get(worldServer)).d();
|
||||||
|
|
||||||
|
entities.a().forEach((mcEnt) -> {
|
||||||
|
org.bukkit.entity.Entity bukkitEntity = mcEnt.getBukkitEntity();
|
||||||
|
if (bukkitEntity instanceof LivingEntity && bukkitEntity.isValid()) {
|
||||||
|
list.add((LivingEntity) bukkitEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,33 @@
|
|||||||
|
package com.songoda.core.nms.v1_17_R1.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
|
import com.songoda.core.nms.world.SSpawner;
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
|
import com.songoda.core.nms.world.WorldCore;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.block.CreatureSpawner;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class WorldCoreImpl implements WorldCore {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SSpawner getSpawner(CreatureSpawner spawner) {
|
||||||
|
return new SSpawnerImpl(spawner.getLocation());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SSpawner getSpawner(Location location) {
|
||||||
|
return new SSpawnerImpl(location);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SItemStack getItemStack(ItemStack item) {
|
||||||
|
return new SItemStackImpl(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SWorld getWorld(World world) {
|
||||||
|
return new SWorldImpl(world);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.songoda.core.nms.v1_8_R1.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
|
import net.minecraft.server.v1_8_R1.EntityPlayer;
|
||||||
|
import net.minecraft.server.v1_8_R1.EnumParticle;
|
||||||
|
import net.minecraft.server.v1_8_R1.Item;
|
||||||
|
import net.minecraft.server.v1_8_R1.Vec3D;
|
||||||
|
import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer;
|
||||||
|
import org.bukkit.craftbukkit.v1_8_R1.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class SItemStackImpl implements SItemStack {
|
||||||
|
|
||||||
|
private final ItemStack item;
|
||||||
|
|
||||||
|
public SItemStackImpl(ItemStack item) {
|
||||||
|
this.item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void breakItem(Player player, int amount) {
|
||||||
|
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
|
||||||
|
for (int i = 0; i < 5; ++i) {
|
||||||
|
Vec3D vec3d = new Vec3D(((double) random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D);
|
||||||
|
vec3d = vec3d.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d = vec3d.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
double d0 = (double) (-random.nextFloat()) * 0.6D - 0.3D;
|
||||||
|
Vec3D vec3d1 = new Vec3D(((double) random.nextFloat() - 0.5D) * 0.3D, d0, 0.6D);
|
||||||
|
vec3d1 = vec3d1.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.add(entityPlayer.locX, entityPlayer.locY + (double) entityPlayer.getHeadHeight(), entityPlayer.locZ);
|
||||||
|
entityPlayer.world.addParticle(EnumParticle.ITEM_CRACK, vec3d1.a, vec3d1.b, vec3d1.c, vec3d.a, vec3d.b + 0.05D, vec3d.c, new int[]{Item.getId(CraftItemStack.asNMSCopy(item).getItem())});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package com.songoda.core.nms.v1_8_R1.world.spawner;
|
package com.songoda.core.nms.v1_8_R1.world;
|
||||||
|
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.songoda.core.nms.v1_8_R1.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SWorldImpl implements SWorld {
|
||||||
|
|
||||||
|
public SWorldImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<LivingEntity> getLivingEntities() {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,13 @@
|
|||||||
package com.songoda.core.nms.v1_8_R1.world;
|
package com.songoda.core.nms.v1_8_R1.world;
|
||||||
|
|
||||||
import com.songoda.core.nms.v1_8_R1.world.spawner.SSpawnerImpl;
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
import com.songoda.core.nms.world.SSpawner;
|
import com.songoda.core.nms.world.SSpawner;
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
import com.songoda.core.nms.world.WorldCore;
|
import com.songoda.core.nms.world.WorldCore;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.CreatureSpawner;
|
import org.bukkit.block.CreatureSpawner;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class WorldCoreImpl implements WorldCore {
|
public class WorldCoreImpl implements WorldCore {
|
||||||
|
|
||||||
@ -17,4 +20,14 @@ public class WorldCoreImpl implements WorldCore {
|
|||||||
public SSpawner getSpawner(Location location) {
|
public SSpawner getSpawner(Location location) {
|
||||||
return new SSpawnerImpl(location);
|
return new SSpawnerImpl(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SItemStack getItemStack(ItemStack item) {
|
||||||
|
return new SItemStackImpl(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SWorld getWorld(World world) {
|
||||||
|
return new SWorldImpl();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.songoda.core.nms.v1_8_R2.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
|
import net.minecraft.server.v1_8_R2.EntityPlayer;
|
||||||
|
import net.minecraft.server.v1_8_R2.EnumParticle;
|
||||||
|
import net.minecraft.server.v1_8_R2.Item;
|
||||||
|
import net.minecraft.server.v1_8_R2.Vec3D;
|
||||||
|
import org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer;
|
||||||
|
import org.bukkit.craftbukkit.v1_8_R2.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class SItemStackImpl implements SItemStack {
|
||||||
|
|
||||||
|
private final ItemStack item;
|
||||||
|
|
||||||
|
public SItemStackImpl(ItemStack item) {
|
||||||
|
this.item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void breakItem(Player player, int amount) {
|
||||||
|
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
|
||||||
|
for (int i = 0; i < 5; ++i) {
|
||||||
|
Vec3D vec3d = new Vec3D(((double) random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D);
|
||||||
|
vec3d = vec3d.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d = vec3d.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
double d0 = (double) (-random.nextFloat()) * 0.6D - 0.3D;
|
||||||
|
Vec3D vec3d1 = new Vec3D(((double) random.nextFloat() - 0.5D) * 0.3D, d0, 0.6D);
|
||||||
|
vec3d1 = vec3d1.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.add(entityPlayer.locX, entityPlayer.locY + (double) entityPlayer.getHeadHeight(), entityPlayer.locZ);
|
||||||
|
entityPlayer.world.addParticle(EnumParticle.ITEM_CRACK, vec3d1.a, vec3d1.b, vec3d1.c, vec3d.a, vec3d.b + 0.05D, vec3d.c, new int[]{Item.getId(CraftItemStack.asNMSCopy(item).getItem())});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package com.songoda.core.nms.v1_8_R2.world.spawner;
|
package com.songoda.core.nms.v1_8_R2.world;
|
||||||
|
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.songoda.core.nms.v1_8_R2.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SWorldImpl implements SWorld {
|
||||||
|
|
||||||
|
public SWorldImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<LivingEntity> getLivingEntities() {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,13 @@
|
|||||||
package com.songoda.core.nms.v1_8_R2.world;
|
package com.songoda.core.nms.v1_8_R2.world;
|
||||||
|
|
||||||
import com.songoda.core.nms.v1_8_R2.world.spawner.SSpawnerImpl;
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
import com.songoda.core.nms.world.SSpawner;
|
import com.songoda.core.nms.world.SSpawner;
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
import com.songoda.core.nms.world.WorldCore;
|
import com.songoda.core.nms.world.WorldCore;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.CreatureSpawner;
|
import org.bukkit.block.CreatureSpawner;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class WorldCoreImpl implements WorldCore {
|
public class WorldCoreImpl implements WorldCore {
|
||||||
|
|
||||||
@ -17,4 +20,14 @@ public class WorldCoreImpl implements WorldCore {
|
|||||||
public SSpawner getSpawner(Location location) {
|
public SSpawner getSpawner(Location location) {
|
||||||
return new SSpawnerImpl(location);
|
return new SSpawnerImpl(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SItemStack getItemStack(ItemStack item) {
|
||||||
|
return new SItemStackImpl(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SWorld getWorld(World world) {
|
||||||
|
return new SWorldImpl();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.songoda.core.nms.v1_8_R3.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
|
import net.minecraft.server.v1_8_R3.EntityPlayer;
|
||||||
|
import net.minecraft.server.v1_8_R3.EnumParticle;
|
||||||
|
import net.minecraft.server.v1_8_R3.Item;
|
||||||
|
import net.minecraft.server.v1_8_R3.Vec3D;
|
||||||
|
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
|
||||||
|
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class SItemStackImpl implements SItemStack {
|
||||||
|
|
||||||
|
private final ItemStack item;
|
||||||
|
|
||||||
|
public SItemStackImpl(ItemStack item) {
|
||||||
|
this.item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void breakItem(Player player, int amount) {
|
||||||
|
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
|
||||||
|
for (int i = 0; i < 5; ++i) {
|
||||||
|
Vec3D vec3d = new Vec3D(((double) random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D);
|
||||||
|
vec3d = vec3d.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d = vec3d.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
double d0 = (double) (-random.nextFloat()) * 0.6D - 0.3D;
|
||||||
|
Vec3D vec3d1 = new Vec3D(((double) random.nextFloat() - 0.5D) * 0.3D, d0, 0.6D);
|
||||||
|
vec3d1 = vec3d1.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.add(entityPlayer.locX, entityPlayer.locY + (double) entityPlayer.getHeadHeight(), entityPlayer.locZ);
|
||||||
|
entityPlayer.world.addParticle(EnumParticle.ITEM_CRACK, vec3d1.a, vec3d1.b, vec3d1.c, vec3d.a, vec3d.b + 0.05D, vec3d.c, new int[]{Item.getId(CraftItemStack.asNMSCopy(item).getItem())});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package com.songoda.core.nms.v1_8_R3.world.spawner;
|
package com.songoda.core.nms.v1_8_R3.world;
|
||||||
|
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.songoda.core.nms.v1_8_R3.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SWorldImpl implements SWorld {
|
||||||
|
|
||||||
|
public SWorldImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<LivingEntity> getLivingEntities() {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,13 @@
|
|||||||
package com.songoda.core.nms.v1_8_R3.world;
|
package com.songoda.core.nms.v1_8_R3.world;
|
||||||
|
|
||||||
import com.songoda.core.nms.v1_8_R3.world.spawner.SSpawnerImpl;
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
import com.songoda.core.nms.world.SSpawner;
|
import com.songoda.core.nms.world.SSpawner;
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
import com.songoda.core.nms.world.WorldCore;
|
import com.songoda.core.nms.world.WorldCore;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.CreatureSpawner;
|
import org.bukkit.block.CreatureSpawner;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class WorldCoreImpl implements WorldCore {
|
public class WorldCoreImpl implements WorldCore {
|
||||||
|
|
||||||
@ -17,4 +20,14 @@ public class WorldCoreImpl implements WorldCore {
|
|||||||
public SSpawner getSpawner(Location location) {
|
public SSpawner getSpawner(Location location) {
|
||||||
return new SSpawnerImpl(location);
|
return new SSpawnerImpl(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SItemStack getItemStack(ItemStack item) {
|
||||||
|
return new SItemStackImpl(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SWorld getWorld(World world) {
|
||||||
|
return new SWorldImpl();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.songoda.core.nms.v1_9_R1.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
|
import net.minecraft.server.v1_9_R1.EntityPlayer;
|
||||||
|
import net.minecraft.server.v1_9_R1.EnumParticle;
|
||||||
|
import net.minecraft.server.v1_9_R1.Item;
|
||||||
|
import net.minecraft.server.v1_9_R1.Vec3D;
|
||||||
|
import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer;
|
||||||
|
import org.bukkit.craftbukkit.v1_9_R1.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class SItemStackImpl implements SItemStack {
|
||||||
|
|
||||||
|
private final ItemStack item;
|
||||||
|
|
||||||
|
public SItemStackImpl(ItemStack item) {
|
||||||
|
this.item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void breakItem(Player player, int amount) {
|
||||||
|
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
|
||||||
|
for (int i = 0; i < 5; ++i) {
|
||||||
|
Vec3D vec3d = new Vec3D(((double) random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D);
|
||||||
|
vec3d = vec3d.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d = vec3d.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
double d0 = (double) (-random.nextFloat()) * 0.6D - 0.3D;
|
||||||
|
Vec3D vec3d1 = new Vec3D(((double) random.nextFloat() - 0.5D) * 0.3D, d0, 0.6D);
|
||||||
|
vec3d1 = vec3d1.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.add(entityPlayer.locX, entityPlayer.locY + (double) entityPlayer.getHeadHeight(), entityPlayer.locZ);
|
||||||
|
entityPlayer.world.addParticle(EnumParticle.ITEM_CRACK, vec3d1.x, vec3d1.y, vec3d1.z, vec3d.x, vec3d.y + 0.05D, vec3d.z, new int[]{Item.getId(CraftItemStack.asNMSCopy(item).getItem())});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package com.songoda.core.nms.v1_9_R1.world.spawner;
|
package com.songoda.core.nms.v1_9_R1.world;
|
||||||
|
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.songoda.core.nms.v1_9_R1.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SWorldImpl implements SWorld {
|
||||||
|
|
||||||
|
public SWorldImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<LivingEntity> getLivingEntities() {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,13 @@
|
|||||||
package com.songoda.core.nms.v1_9_R1.world;
|
package com.songoda.core.nms.v1_9_R1.world;
|
||||||
|
|
||||||
import com.songoda.core.nms.v1_9_R1.world.spawner.SSpawnerImpl;
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
import com.songoda.core.nms.world.SSpawner;
|
import com.songoda.core.nms.world.SSpawner;
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
import com.songoda.core.nms.world.WorldCore;
|
import com.songoda.core.nms.world.WorldCore;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.CreatureSpawner;
|
import org.bukkit.block.CreatureSpawner;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class WorldCoreImpl implements WorldCore {
|
public class WorldCoreImpl implements WorldCore {
|
||||||
|
|
||||||
@ -17,4 +20,14 @@ public class WorldCoreImpl implements WorldCore {
|
|||||||
public SSpawner getSpawner(Location location) {
|
public SSpawner getSpawner(Location location) {
|
||||||
return new SSpawnerImpl(location);
|
return new SSpawnerImpl(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SItemStack getItemStack(ItemStack item) {
|
||||||
|
return new SItemStackImpl(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SWorld getWorld(World world) {
|
||||||
|
return new SWorldImpl();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.songoda.core.nms.v1_9_R2.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
|
import net.minecraft.server.v1_9_R2.EntityPlayer;
|
||||||
|
import net.minecraft.server.v1_9_R2.EnumParticle;
|
||||||
|
import net.minecraft.server.v1_9_R2.Item;
|
||||||
|
import net.minecraft.server.v1_9_R2.Vec3D;
|
||||||
|
import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer;
|
||||||
|
import org.bukkit.craftbukkit.v1_9_R2.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class SItemStackImpl implements SItemStack {
|
||||||
|
|
||||||
|
private final ItemStack item;
|
||||||
|
|
||||||
|
public SItemStackImpl(ItemStack item) {
|
||||||
|
this.item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void breakItem(Player player, int amount) {
|
||||||
|
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
|
||||||
|
for (int i = 0; i < 5; ++i) {
|
||||||
|
Vec3D vec3d = new Vec3D(((double) random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D);
|
||||||
|
vec3d = vec3d.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d = vec3d.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
double d0 = (double) (-random.nextFloat()) * 0.6D - 0.3D;
|
||||||
|
Vec3D vec3d1 = new Vec3D(((double) random.nextFloat() - 0.5D) * 0.3D, d0, 0.6D);
|
||||||
|
vec3d1 = vec3d1.a(-entityPlayer.pitch * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.b(-entityPlayer.yaw * 0.017453292F);
|
||||||
|
vec3d1 = vec3d1.add(entityPlayer.locX, entityPlayer.locY + (double) entityPlayer.getHeadHeight(), entityPlayer.locZ);
|
||||||
|
entityPlayer.world.addParticle(EnumParticle.ITEM_CRACK, vec3d1.x, vec3d1.y, vec3d1.z, vec3d.x, vec3d.y + 0.05D, vec3d.z, new int[]{Item.getId(CraftItemStack.asNMSCopy(item).getItem())});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package com.songoda.core.nms.v1_9_R2.world.spawner;
|
package com.songoda.core.nms.v1_9_R2.world;
|
||||||
|
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
import com.songoda.core.compatibility.CompatibleParticleHandler;
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.songoda.core.nms.v1_9_R2.world;
|
||||||
|
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SWorldImpl implements SWorld {
|
||||||
|
|
||||||
|
public SWorldImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<LivingEntity> getLivingEntities() {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,13 @@
|
|||||||
package com.songoda.core.nms.v1_9_R2.world;
|
package com.songoda.core.nms.v1_9_R2.world;
|
||||||
|
|
||||||
import com.songoda.core.nms.v1_9_R2.world.spawner.SSpawnerImpl;
|
import com.songoda.core.nms.world.SItemStack;
|
||||||
import com.songoda.core.nms.world.SSpawner;
|
import com.songoda.core.nms.world.SSpawner;
|
||||||
|
import com.songoda.core.nms.world.SWorld;
|
||||||
import com.songoda.core.nms.world.WorldCore;
|
import com.songoda.core.nms.world.WorldCore;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.CreatureSpawner;
|
import org.bukkit.block.CreatureSpawner;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class WorldCoreImpl implements WorldCore {
|
public class WorldCoreImpl implements WorldCore {
|
||||||
|
|
||||||
@ -17,4 +20,14 @@ public class WorldCoreImpl implements WorldCore {
|
|||||||
public SSpawner getSpawner(Location location) {
|
public SSpawner getSpawner(Location location) {
|
||||||
return new SSpawnerImpl(location);
|
return new SSpawnerImpl(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SItemStack getItemStack(ItemStack item) {
|
||||||
|
return new SItemStackImpl(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SWorld getWorld(World world) {
|
||||||
|
return new SWorldImpl();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user