Skip to content

Commit

Permalink
Works on Paper and Spigot. Tests are a mess and won't compile or run
Browse files Browse the repository at this point in the history
TODO: Get test working in Paper-land.

Relates to ##2577
  • Loading branch information
tastybento committed Dec 29, 2024
1 parent 1fa2849 commit 4a55ea7
Show file tree
Hide file tree
Showing 16 changed files with 88 additions and 108 deletions.
2 changes: 0 additions & 2 deletions src/main/java/world/bentobox/bentobox/api/hooks/NPCHook.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;

import de.oliver.fancynpcs.api.Npc;
import lol.pyr.znpcsplus.api.npc.NpcEntry;
import world.bentobox.bentobox.blueprints.dataobjects.BlueprintEntity;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
import de.oliver.fancynpcs.api.actions.NpcAction;
import de.oliver.fancynpcs.api.utils.NpcEquipmentSlot;
import de.oliver.fancynpcs.api.utils.SkinFetcher;
import lol.pyr.znpcsplus.api.npc.NpcEntry;
import net.kyori.adventure.text.format.NamedTextColor;
import world.bentobox.bentobox.BentoBox;
import world.bentobox.bentobox.api.hooks.NPCHook;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1191,7 +1191,6 @@ public void spawnTeleport(@NonNull World world, @NonNull Player player) {
*
* @param player player
*/
@SuppressWarnings("deprecation")
private void readyPlayer(@NonNull Player player) {
// Stop any gliding
player.setGliding(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
import world.bentobox.bentobox.api.events.island.IslandCreateEvent;
import world.bentobox.bentobox.api.events.island.IslandEvent;
import world.bentobox.bentobox.api.events.island.IslandEvent.Reason;
import world.bentobox.bentobox.api.events.island.IslandResetEvent;
import world.bentobox.bentobox.api.logs.LogEntry;
import world.bentobox.bentobox.api.logs.LogEntry.LogType;
import world.bentobox.bentobox.api.events.island.IslandResetEvent;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.database.objects.Island;
import world.bentobox.bentobox.managers.BlueprintsManager;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;

import io.papermc.lib.PaperLib;
import world.bentobox.bentobox.BentoBox;
import world.bentobox.bentobox.api.addons.GameModeAddon;
import world.bentobox.bentobox.api.hooks.Hook;
Expand Down Expand Up @@ -248,6 +247,7 @@ private void copyChunkDataToChunk(Chunk toChunk, Chunk fromChunk, BoundingBox li
Arrays.stream(fromChunk.getTileEntities()).forEach(bs -> processTileEntity(bs.getBlock(), bs.getLocation().toVector().toLocation(toChunk.getWorld()).getBlock()));
}

@SuppressWarnings("deprecation")
private void processEntity(Entity entity, Location location) {
Entity bpe = location.getWorld().spawnEntity(location, entity.getType());
bpe.setCustomName(entity.getCustomName());
Expand Down
131 changes: 50 additions & 81 deletions src/main/java/world/bentobox/bentobox/util/Util.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package world.bentobox.bentobox.util;

import java.io.IOException;
import java.lang.reflect.Method;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
Expand All @@ -26,7 +27,6 @@
import org.bukkit.World;
import org.bukkit.World.Environment;
import org.bukkit.attribute.Attribute;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Allay;
import org.bukkit.entity.Animals;
Expand All @@ -51,8 +51,6 @@
import com.google.common.base.Enums;
import com.google.common.base.Optional;

import io.papermc.lib.PaperLib;
import io.papermc.lib.features.blockstatesnapshot.BlockStateSnapshotResult;
import world.bentobox.bentobox.BentoBox;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.nms.PasteHandler;
Expand Down Expand Up @@ -382,7 +380,7 @@ public static boolean isTamableEntity(Entity entity) {
*/
@NonNull
public static CompletableFuture<Boolean> teleportAsync(@Nonnull Entity entity, @Nonnull Location location) {
return PaperLib.teleportAsync(entity, location);
return teleportAsync(entity, location, TeleportCause.UNKNOWN);
}

/**
Expand All @@ -392,12 +390,26 @@ public static CompletableFuture<Boolean> teleportAsync(@Nonnull Entity entity, @
* @param cause The cause for the teleportation
* @return Future that completes with the result of the teleport
*/
@SuppressWarnings("unchecked")
@NonNull
public static CompletableFuture<Boolean> teleportAsync(@Nonnull Entity entity, @Nonnull Location location,
TeleportCause cause) {
return PaperLib.teleportAsync(entity, location, cause);
try {
// Use reflection to check if the method exists
Method method = Entity.class.getMethod("teleportAsync", Location.class, TeleportCause.class);
if (method != null) {
// Invoke the method using reflection on the entity instance
return (CompletableFuture<Boolean>) method.invoke(entity, location, cause);
}
} catch (NoSuchMethodException e) {
// Method does not exist, fallback to Spigot behavior
} catch (Exception e) {
plugin.logStacktrace(e); // Report other exceptions
}
// Fallback for Spigot servers
entity.teleport(location, cause);
return CompletableFuture.completedFuture(true);
}

/**
* Gets the chunk at the target location, loading it asynchronously if needed.
* @param loc Location to get chunk for
Expand Down Expand Up @@ -440,9 +452,24 @@ public static CompletableFuture<Chunk> getChunkAtAsync(@Nonnull World world, int
* @param gen Should the chunk generate or not. Only respected on some MC versions, 1.13 for CB, 1.12 for Paper
* @return Future that completes with the chunk, or null if the chunk did not exists and generation was not requested.
*/
@SuppressWarnings("unchecked")
@NonNull
public static CompletableFuture<Chunk> getChunkAtAsync(@Nonnull World world, int x, int z, boolean gen) {
return PaperLib.getChunkAtAsync(world, x, z, gen);
try {
// Use reflection to check if the method exists
Method method = World.class.getMethod("getChunkAtAsync", int.class, int.class, boolean.class);
if (method != null) {
// Invoke the method using reflection
return (CompletableFuture<Chunk>) method.invoke(world, x, z, gen);
}
} catch (NoSuchMethodException e) {
// Method does not exist, fallback to Spigot behavior
} catch (Exception e) {
e.printStackTrace(); // Handle other exceptions (optional)
}
// Fallback for Spigot servers
return CompletableFuture.completedFuture(world.getChunkAt(x, z, gen));

}

/**
Expand All @@ -462,56 +489,7 @@ public static boolean isChunkGenerated(@NonNull Location loc) {
* @return If the chunk is generated or not
*/
public static boolean isChunkGenerated(@Nonnull World world, int x, int z) {
return PaperLib.isChunkGenerated(world, x, z);
}

/**
* Get's a BlockState, optionally not using a snapshot
* @param block The block to get a State of
* @param useSnapshot Whether or not to use a snapshot when supported
* @return The BlockState
*/
@NonNull
public static BlockStateSnapshotResult getBlockState(@Nonnull Block block, boolean useSnapshot) {
return PaperLib.getBlockState(block, useSnapshot);
}

/**
* Detects if the current MC version is at least the following version.
* <p>
* Assumes 0 patch version.
*
* @param minor Min Minor Version
* @return Meets the version requested
*/
public static boolean isVersion(int minor) {
return PaperLib.isVersion(minor);
}

/**
* Detects if the current MC version is at least the following version.
* @param minor Min Minor Version
* @param patch Min Patch Version
* @return Meets the version requested
*/
public static boolean isVersion(int minor, int patch) {
return PaperLib.isVersion(minor, patch);
}

/**
* Gets the current Minecraft Minor version. IE: 1.13.1 returns 13
* @return The Minor Version
*/
public static int getMinecraftVersion() {
return PaperLib.getMinecraftVersion();
}

/**
* Gets the current Minecraft Patch version. IE: 1.13.1 returns 1
* @return The Patch Version
*/
public static int getMinecraftPatchVersion() {
return PaperLib.getMinecraftPatchVersion();
return world.isChunkGenerated(x, z);
}

/**
Expand Down Expand Up @@ -562,42 +540,26 @@ public static boolean isVersionCompatible(String version, String requiredVersion
return !(!isRequiredSnapshot && isVersionSnapshot);
}

/**
* Check if the server has access to the Spigot API
* @return True for Spigot <em>and</em> Paper environments
*/
public static boolean isSpigot() {
return PaperLib.isSpigot();
}

/**
* Check if the server has access to the Paper API
* @return True for Paper environments
*/
public static boolean isPaper() {
return !isJUnitTest() && PaperLib.isPaper();
}

/**
* I don't like doing this, but otherwise we need to set a flag in every test
*/
private static boolean isJUnitTest() {
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
for (StackTraceElement element : stackTrace) {
if (element.getClassName().startsWith("org.junit.")) {
return true;
}
try {
Class.forName("com.destroystokyo.paper.PaperConfig");
return true; // Paper-specific class exists
} catch (ClassNotFoundException e) {
return false; // Not a Paper server
}
return false;
}


/**
* This method translates color codes in given string and strips whitespace after them.
* This code parses both: hex and old color codes.
* @param textToColor Text which color codes must be parsed.
* @return String text with parsed colors and stripped whitespaces after them.
*/
@SuppressWarnings("deprecation")
@NonNull
public static String translateColorCodes(@NonNull String textToColor) {
// Use matcher to find hex patterns in given text.
Expand Down Expand Up @@ -760,8 +722,14 @@ public static void runCommands(User user, String ownerName, @NonNull List<String
* @param player - player
*/
public static void resetHealth(Player player) {
double maxHealth = player.getAttribute(Attribute.MAX_HEALTH).getBaseValue();
player.setHealth(maxHealth);
try {
// Paper
double maxHealth = player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getBaseValue();
player.setHealth(maxHealth);
} catch (Exception e) {
// Spigot
player.setHealth(20D);
}
}

/**
Expand Down Expand Up @@ -862,6 +830,7 @@ public static int broadcast(String localeKey, String... variables) {
* @param input Input that need to be sanitized.
* @return A sanitized input without illegal characters in names.
*/
@SuppressWarnings("deprecation")
public static String sanitizeInput(String input)
{
return ChatColor.stripColor(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ public class IslandTeamInviteCommandTest extends RanksManagerBeforeClassTest {
private IslandTeamInviteCommand itl;
private UUID notUUID;

@SuppressWarnings("deprecation")
@Before
public void setUp() throws Exception {
super.setUp();
Expand Down Expand Up @@ -168,7 +169,7 @@ public void setUp() throws Exception {
when(itemFactory.getItemMeta(any())).thenReturn(bannerMeta);
when(Bukkit.getItemFactory()).thenReturn(itemFactory);
Inventory inventory = mock(Inventory.class);
when(Bukkit.createInventory(eq(null), anyInt(), any())).thenReturn(inventory);
when(Bukkit.createInventory(eq(null), anyInt(), anyString())).thenReturn(inventory);

// Command under test
itl = new IslandTeamInviteCommand(ic);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyMap;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
Expand Down Expand Up @@ -94,7 +95,7 @@ public void setUp() throws Exception {

// Mock up the deserialization
PowerMockito.mockStatic(ItemStack.class);
when(ItemStack.deserialize(any())).thenReturn(new ItemStack(Material.STONE, 4));
when(ItemStack.deserialize(anyMap())).thenReturn(new ItemStack(Material.STONE, 4));
}

@After
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@ public void testOnVehicleDamageEventNotAllowedBoat() {
when(island.isAllowed(any(), any())).thenReturn(false);
Vehicle vehicle = mock(Vehicle.class);
when(vehicle.getLocation()).thenReturn(location);
when(vehicle.getType()).thenReturn(EntityType.OAK_BOAT);
when(vehicle.getType()).thenReturn(EntityType.BOAT);
VehicleDamageEvent e = new VehicleDamageEvent(vehicle, mockPlayer, 10);
bbl.onVehicleDamageEvent(e);
assertTrue(e.isCancelled());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ public void setUp() throws Exception {
when(top.getSize()).thenReturn(9);
when(panel.getInventory()).thenReturn(top);

when(Bukkit.createInventory(any(), anyInt(), any())).thenReturn(top);
when(Bukkit.createInventory(any(), anyInt(), anyString())).thenReturn(top);
}

@After
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,6 @@
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSet.Builder;

import io.papermc.lib.PaperLib;
import io.papermc.lib.environments.CraftBukkitEnvironment;
import io.papermc.lib.environments.Environment;
import world.bentobox.bentobox.AbstractCommonSetup;
import world.bentobox.bentobox.BentoBox;
import world.bentobox.bentobox.Settings;
Expand Down Expand Up @@ -148,8 +145,6 @@ public class IslandsManagerTest extends AbstractCommonSetup {
private Material sign;
private Material wallSign;

private Environment env;

// Class under test
IslandsManager im;

Expand All @@ -170,7 +165,7 @@ public static void beforeClass() throws IllegalAccessException, InvocationTarget
}

@Override
@SuppressWarnings("unchecked")
@SuppressWarnings({ "unchecked", "deprecation" })
@Before
public void setUp() throws Exception {
super.setUp();
Expand Down Expand Up @@ -350,10 +345,6 @@ public void setUp() throws Exception {
sign = Material.BIRCH_SIGN;
wallSign = Material.ACACIA_WALL_SIGN;

// PaperLib
env = new CraftBukkitEnvironment();
PaperLib.setCustomEnvironment(env);

// Util strip spaces
when(Util.stripSpaceAfterColorCodes(anyString())).thenCallRealMethod();

Expand Down Expand Up @@ -423,7 +414,6 @@ public void testIsSafeLocationSubmerged() {
assertFalse(im.isSafeLocation(location));
}

@SuppressWarnings("deprecation")
@Test
@Ignore("Material#isSolid() cannot be tested")
public void testCheckIfSafeTrapdoor() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ public void setUp() throws Exception {
when(p.getUniqueId()).thenReturn(uuid);
AttributeInstance at = mock(AttributeInstance.class);
when(at.getValue()).thenReturn(20D);
when(p.getAttribute(Attribute.MAX_HEALTH)).thenReturn(at);
when(p.getAttribute(Attribute.GENERIC_MAX_HEALTH)).thenReturn(at);
when(p.getName()).thenReturn("tastybento");
User.getInstance(p);

Expand Down
Loading

0 comments on commit 4a55ea7

Please sign in to comment.