Reformat all code

Signed-off-by: solonovamax <solonovamax@12oclockpoint.com>
This commit is contained in:
solonovamax
2021-08-30 17:34:44 -04:00
parent 1655381413
commit c445a0434d
753 changed files with 10461 additions and 8783 deletions

View File

@@ -6,18 +6,19 @@ import com.dfsek.terra.api.addon.annotations.Addon;
import com.dfsek.terra.api.addon.annotations.Author;
import com.dfsek.terra.api.addon.annotations.Version;
@Addon("Terra-Bukkit")
@Version("1.0.0")
@Author("Terra")
final class BukkitAddon extends TerraAddon {
private final TerraPlugin main;
public BukkitAddon(TerraPlugin main) {
this.main = main;
}
@Override
public void initialize() {
}
}

View File

@@ -1,20 +1,22 @@
package com.dfsek.terra.bukkit;
import com.dfsek.terra.api.entity.CommandSender;
import org.bukkit.ChatColor;
import com.dfsek.terra.api.entity.CommandSender;
public class BukkitCommandSender implements CommandSender {
private final org.bukkit.command.CommandSender delegate;
public BukkitCommandSender(org.bukkit.command.CommandSender delegate) {
this.delegate = delegate;
}
@Override
public void sendMessage(String message) {
delegate.sendMessage(ChatColor.translateAlternateColorCodes('&', message));
}
@Override
public org.bukkit.command.CommandSender getHandle() {
return delegate;

View File

@@ -1,45 +1,47 @@
package com.dfsek.terra.bukkit;
import org.bukkit.Location;
import com.dfsek.terra.api.entity.Entity;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.World;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
import org.bukkit.Location;
public class BukkitEntity implements Entity {
private final org.bukkit.entity.Entity entity;
public BukkitEntity(org.bukkit.entity.Entity entity) {
this.entity = entity;
}
@Override
public org.bukkit.entity.Entity getHandle() {
return entity;
}
@Override
public Vector3 position() {
return BukkitAdapter.adapt(entity.getLocation().toVector());
}
@Override
public void position(Vector3 location) {
entity.teleport(BukkitAdapter.adapt(location).toLocation(entity.getWorld()));
}
@Override
public void world(World world) {
Location newLoc = entity.getLocation().clone();
newLoc.setWorld(BukkitAdapter.adapt(world));
entity.teleport(newLoc);
}
@Override
public World world() {
return BukkitAdapter.adapt(entity.getWorld());
}
@Override
public void sendMessage(String message) {
entity.sendMessage(message);

View File

@@ -1,46 +1,48 @@
package com.dfsek.terra.bukkit;
import org.bukkit.Location;
import com.dfsek.terra.api.entity.Player;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.World;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
import org.bukkit.Location;
public class BukkitPlayer implements Player {
private final org.bukkit.entity.Player delegate;
public BukkitPlayer(org.bukkit.entity.Player delegate) {
this.delegate = delegate;
}
@Override
public org.bukkit.entity.Player getHandle() {
return delegate;
}
@Override
public Vector3 position() {
org.bukkit.Location bukkit = delegate.getLocation();
return new Vector3(bukkit.getX(), bukkit.getY(), bukkit.getZ());
}
@Override
public void position(Vector3 location) {
delegate.teleport(BukkitAdapter.adapt(location).toLocation(delegate.getWorld()));
}
@Override
public void world(World world) {
Location newLoc = delegate.getLocation().clone();
newLoc.setWorld(BukkitAdapter.adapt(world));
delegate.teleport(newLoc);
}
@Override
public World world() {
return BukkitAdapter.adapt(delegate.getWorld());
}
@Override
public void sendMessage(String message) {
delegate.sendMessage(message);

View File

@@ -1,5 +1,18 @@
package com.dfsek.terra.bukkit;
import io.papermc.lib.PaperLib;
import org.bstats.bukkit.Metrics;
import org.bukkit.Bukkit;
import org.bukkit.command.PluginCommand;
import org.bukkit.generator.ChunkGenerator;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import com.dfsek.terra.api.command.CommandManager;
import com.dfsek.terra.api.command.exception.MalformedCommandException;
import com.dfsek.terra.api.config.ConfigPack;
@@ -14,23 +27,11 @@ import com.dfsek.terra.bukkit.listeners.SpigotListener;
import com.dfsek.terra.bukkit.util.PaperUtil;
import com.dfsek.terra.commands.CommandUtil;
import com.dfsek.terra.commands.TerraCommandManager;
import io.papermc.lib.PaperLib;
import org.bstats.bukkit.Metrics;
import org.bukkit.Bukkit;
import org.bukkit.command.PluginCommand;
import org.bukkit.generator.ChunkGenerator;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
public class TerraBukkitPlugin extends JavaPlugin {
public static final BukkitVersion BUKKIT_VERSION;
static {
String ver = Bukkit.getServer().getClass().getPackage().getName();
if(ver.contains("1_17")) BUKKIT_VERSION = BukkitVersion.V1_17;
@@ -40,32 +41,32 @@ public class TerraBukkitPlugin extends JavaPlugin {
else if(ver.contains("1_13")) BUKKIT_VERSION = BukkitVersion.V1_13;
else BUKKIT_VERSION = BukkitVersion.UNKNOWN;
}
private final TerraPluginImpl terraPlugin = new TerraPluginImpl(this);
private final Map<String, com.dfsek.terra.api.world.generator.ChunkGenerator> generatorMap = new HashMap<>();
private final Map<String, ConfigPack> worlds = new HashMap<>();
@Override
public void onDisable() {
BukkitChunkGeneratorWrapper.saveAll();
}
@Override
public void onEnable() {
getLogger().info("Running on version " + BUKKIT_VERSION);
if(BUKKIT_VERSION == BukkitVersion.UNKNOWN) {
getLogger().warning("Terra is running on an unknown Bukkit version. Proceed with caution.");
}
terraPlugin.getEventManager().callEvent(new PlatformInitializationEvent());
new Metrics(this, 9017); // Set up bStats.
PluginCommand c = Objects.requireNonNull(getCommand("terra"));
CommandManager manager = new TerraCommandManager(terraPlugin);
try {
CommandUtil.registerAll(manager);
manager.register("save-data", SaveDataCommand.class);
@@ -77,18 +78,19 @@ public class TerraBukkitPlugin extends JavaPlugin {
Bukkit.getPluginManager().disablePlugin(this);
return;
}
BukkitCommandAdapter command = new BukkitCommandAdapter(manager);
c.setExecutor(command);
c.setTabCompleter(command);
long save = terraPlugin.getTerraConfig().getDataSaveInterval();
Bukkit.getScheduler().runTaskTimerAsynchronously(this, BukkitChunkGeneratorWrapper::saveAll, save, save); // Schedule population data saving
Bukkit.getScheduler().runTaskTimerAsynchronously(this, BukkitChunkGeneratorWrapper::saveAll, save,
save); // Schedule population data saving
Bukkit.getPluginManager().registerEvents(new CommonListener(terraPlugin), this); // Register master event listener
PaperUtil.checkPaper(this);
if(PaperLib.isPaper()) {
try {
Class.forName("io.papermc.paper.event.world.StructureLocateEvent"); // Check if user is on Paper version with event.
@@ -100,7 +102,17 @@ public class TerraBukkitPlugin extends JavaPlugin {
registerSpigotEvents(false);
}
}
@Override
public @Nullable ChunkGenerator getDefaultWorldGenerator(@NotNull String worldName, @Nullable String id) {
return new BukkitChunkGeneratorWrapper(generatorMap.computeIfAbsent(worldName, name -> {
if(!terraPlugin.getConfigRegistry().contains(id)) throw new IllegalArgumentException("No such config pack \"" + id + "\"");
ConfigPack pack = terraPlugin.getConfigRegistry().get(id);
worlds.put(worldName, pack);
return pack.getGeneratorProvider().newInstance(pack);
}));
}
private void registerSpigotEvents(boolean outdated) {
if(outdated) {
getLogger().severe("You are using an outdated version of Paper.");
@@ -119,48 +131,39 @@ public class TerraBukkitPlugin extends JavaPlugin {
getLogger().severe("benefits that Paper offers), upgrade your server to Paper.");
getLogger().severe("Find out more at https://papermc.io/");
}
Bukkit.getPluginManager().registerEvents(new SpigotListener(terraPlugin), this); // Register Spigot event listener
}
@Override
public @Nullable ChunkGenerator getDefaultWorldGenerator(@NotNull String worldName, @Nullable String id) {
return new BukkitChunkGeneratorWrapper(generatorMap.computeIfAbsent(worldName, name -> {
if(!terraPlugin.getConfigRegistry().contains(id)) throw new IllegalArgumentException("No such config pack \"" + id + "\"");
ConfigPack pack = terraPlugin.getConfigRegistry().get(id);
worlds.put(worldName, pack);
return pack.getGeneratorProvider().newInstance(pack);
}));
}
public enum BukkitVersion {
V1_13(13),
V1_14(14),
V1_15(15),
V1_16(16),
V1_17(17),
UNKNOWN(Integer.MAX_VALUE); // Assume unknown version is latest.
private final int index;
BukkitVersion(int index) {
this.index = index;
}
/**
* Gets if this version is above or equal to another.
*
* @param other Other version
*
* @return Whether this version is equal to or later than other.
*/
public boolean above(BukkitVersion other) {
return this.index >= other.index;
}
}
}

View File

@@ -2,6 +2,13 @@ package com.dfsek.terra.bukkit;
import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.TypeRegistry;
import org.bukkit.Bukkit;
import org.bukkit.entity.EntityType;
import java.io.File;
import java.util.Locale;
import java.util.Optional;
import com.dfsek.terra.AbstractTerraPlugin;
import com.dfsek.terra.api.Logger;
import com.dfsek.terra.api.addon.TerraAddon;
@@ -13,64 +20,54 @@ import com.dfsek.terra.bukkit.handles.BukkitItemHandle;
import com.dfsek.terra.bukkit.handles.BukkitWorldHandle;
import com.dfsek.terra.bukkit.world.BukkitBiome;
import com.dfsek.terra.util.logging.JavaLogger;
import org.bukkit.Bukkit;
import org.bukkit.entity.EntityType;
import java.io.File;
import java.util.Locale;
import java.util.Optional;
public class TerraPluginImpl extends AbstractTerraPlugin {
private final ItemHandle itemHandle = new BukkitItemHandle();
private WorldHandle handle = new BukkitWorldHandle();
private final WorldHandle handle = new BukkitWorldHandle();
private final TerraBukkitPlugin plugin;
public TerraPluginImpl(TerraBukkitPlugin plugin) {
this.plugin = plugin;
load();
}
public TerraBukkitPlugin getPlugin() {
return plugin;
}
@Override
public WorldHandle getWorldHandle() {
return handle;
}
@Override
public File getDataFolder() {
return plugin.getDataFolder();
}
@Override
public boolean reload() {
return false;
}
@Override
protected Optional<TerraAddon> getPlatformAddon() {
return Optional.of(new BukkitAddon(this));
}
@Override
public ItemHandle getItemHandle() {
return itemHandle;
}
@Override
public String platformName() {
return "Bukkit";
}
@Override
protected Logger createLogger() {
return new JavaLogger(plugin.getLogger());
public void runPossiblyUnsafeTask(Runnable task) {
Bukkit.getScheduler().runTask(plugin, task);
}
@Override
public WorldHandle getWorldHandle() {
return handle;
}
@Override
public File getDataFolder() {
return plugin.getDataFolder();
}
@Override
public ItemHandle getItemHandle() {
return itemHandle;
}
@Override
public void register(TypeRegistry registry) {
super.register(registry);
@@ -78,16 +75,21 @@ public class TerraPluginImpl extends AbstractTerraPlugin {
.registerLoader(BlockState.class, (t, o, l) -> handle.createBlockData((String) o))
.registerLoader(Biome.class, (t, o, l) -> parseBiome((String) o))
.registerLoader(EntityType.class, (t, o, l) -> EntityType.valueOf((String) o));
}
@Override
protected Logger createLogger() {
return new JavaLogger(plugin.getLogger());
}
@Override
protected Optional<TerraAddon> getPlatformAddon() {
return Optional.of(new BukkitAddon(this));
}
private BukkitBiome parseBiome(String id) throws LoadException {
if(!id.startsWith("minecraft:")) throw new LoadException("Invalid biome identifier " + id);
return new BukkitBiome(org.bukkit.block.Biome.valueOf(id.toUpperCase(Locale.ROOT).substring(10)));
}
@Override
public void runPossiblyUnsafeTask(Runnable task) {
Bukkit.getScheduler().runTask(plugin, task);
}
}

View File

@@ -1,8 +1,5 @@
package com.dfsek.terra.bukkit.command;
import com.dfsek.terra.api.command.CommandManager;
import com.dfsek.terra.api.command.exception.CommandException;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
@@ -17,13 +14,18 @@ import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;
import com.dfsek.terra.api.command.CommandManager;
import com.dfsek.terra.api.command.exception.CommandException;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
public class BukkitCommandAdapter implements CommandExecutor, TabCompleter {
private final CommandManager manager;
public BukkitCommandAdapter(CommandManager manager) {
this.manager = manager;
}
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
List<String> argList = new ArrayList<>(Arrays.asList(args));
@@ -38,14 +40,16 @@ public class BukkitCommandAdapter implements CommandExecutor, TabCompleter {
}
return true;
}
@Override
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) {
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias,
@NotNull String[] args) {
List<String> argList = new ArrayList<>(Arrays.asList(args));
try {
return manager.tabComplete(argList.remove(0), BukkitAdapter.adapt(sender), argList).stream()
.filter(s -> s.toLowerCase(Locale.ROOT).startsWith(args[args.length - 1].toLowerCase(Locale.ROOT))).sorted(String::compareTo).collect(Collectors.toList());
.filter(s -> s.toLowerCase(Locale.ROOT).startsWith(args[args.length - 1].toLowerCase(Locale.ROOT))).sorted(
String::compareTo).collect(Collectors.toList());
} catch(CommandException e) {
e.printStackTrace();
return Collections.emptyList();

View File

@@ -8,6 +8,7 @@ import com.dfsek.terra.api.entity.CommandSender;
import com.dfsek.terra.api.entity.Player;
import com.dfsek.terra.bukkit.generator.BukkitChunkGeneratorWrapper;
@Command
@WorldCommand
@PlayerCommand

View File

@@ -6,6 +6,7 @@ import com.dfsek.terra.api.entity.CommandSender;
import com.dfsek.terra.bukkit.generator.BukkitChunkGeneratorWrapper;
import com.dfsek.terra.config.lang.LangUtil;
@Command
public class SaveDataCommand implements CommandTemplate {
@Override

View File

@@ -1,36 +1,38 @@
package com.dfsek.terra.bukkit.generator;
import org.bukkit.generator.ChunkGenerator;
import org.jetbrains.annotations.NotNull;
import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.world.generator.ChunkData;
import com.dfsek.terra.bukkit.world.block.data.BukkitBlockState;
import org.bukkit.generator.ChunkGenerator;
import org.jetbrains.annotations.NotNull;
public class BukkitChunkData implements ChunkData {
private final ChunkGenerator.ChunkData delegate;
public BukkitChunkData(ChunkGenerator.ChunkData delegate) {
this.delegate = delegate;
}
@Override
public ChunkGenerator.ChunkData getHandle() {
return delegate;
}
@Override
public int getMaxHeight() {
return delegate.getMaxHeight();
}
@Override
public void setBlock(int x, int y, int z, @NotNull BlockState blockState) {
delegate.setBlock(x, y, z, ((BukkitBlockState) blockState).getHandle());
}
@Override
public @NotNull BlockState getBlock(int x, int y, int z) {
return BukkitBlockState.newInstance(delegate.getBlockData(x, y, z));

View File

@@ -1,14 +1,5 @@
package com.dfsek.terra.bukkit.generator;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.config.WorldConfig;
import com.dfsek.terra.api.world.Chunk;
import com.dfsek.terra.api.world.generator.GeneratorWrapper;
import com.dfsek.terra.api.world.generator.ChunkGenerator;
import com.dfsek.terra.bukkit.population.PopulationManager;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
import com.dfsek.terra.bukkit.world.BukkitBiomeGrid;
import com.dfsek.terra.bukkit.world.BukkitWorld;
import org.bukkit.World;
import org.bukkit.generator.BlockPopulator;
import org.jetbrains.annotations.NotNull;
@@ -21,27 +12,37 @@ import java.util.List;
import java.util.Map;
import java.util.Random;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.config.WorldConfig;
import com.dfsek.terra.api.world.Chunk;
import com.dfsek.terra.api.world.generator.ChunkGenerator;
import com.dfsek.terra.api.world.generator.GeneratorWrapper;
import com.dfsek.terra.bukkit.population.PopulationManager;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
import com.dfsek.terra.bukkit.world.BukkitBiomeGrid;
public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGenerator implements GeneratorWrapper {
private static final Map<com.dfsek.terra.api.world.World, PopulationManager> popMap = new HashMap<>();
private final PopulationManager popMan;
private final ChunkGenerator delegate;
private final TerraPlugin main;
private boolean needsLoad = true;
private WorldConfig worldConfig;
public BukkitChunkGeneratorWrapper(ChunkGenerator delegate) {
this.delegate = delegate;
this.main = delegate.getMain();
this.popMan = new PopulationManager(delegate, main);
}
public static synchronized void saveAll() {
for(Map.Entry<com.dfsek.terra.api.world.World, PopulationManager> e : popMap.entrySet()) {
try {
@@ -51,23 +52,23 @@ public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGener
}
}
}
public static synchronized void fixChunk(Chunk c) {
popMap.get(c.getWorld()).checkNeighbors(c.getX(), c.getZ(), c.getWorld());
}
private void load(com.dfsek.terra.api.world.World w) {
try {
popMan.loadBlocks(w);
} catch(FileNotFoundException ignore) {
} catch(IOException | ClassNotFoundException e) {
e.printStackTrace();
}
popMap.put(w, popMan);
needsLoad = false;
}
@Override
public @NotNull ChunkData generateChunkData(@NotNull World world, @NotNull Random random, int x, int z, @NotNull BiomeGrid biome) {
if(this.worldConfig == null) {
@@ -78,41 +79,41 @@ public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGener
delegate.generateBiomes(bukkitWorld, random, x, z, new BukkitBiomeGrid(biome));
return (ChunkData) delegate.generateChunkData(bukkitWorld, random, x, z, new BukkitChunkData(createChunkData(world))).getHandle();
}
public WorldConfig getWorldConfig() {
return worldConfig;
}
@Override
public @NotNull List<BlockPopulator> getDefaultPopulators(@NotNull World world) {
return Arrays.asList(popMan, new BukkitPopulatorWrapper(delegate));
}
@Override
public boolean isParallelCapable() {
return true;
}
@Override
public boolean shouldGenerateCaves() {
return delegate.getConfigPack().vanillaCaves();
}
@Override
public boolean shouldGenerateDecorations() {
return delegate.getConfigPack().vanillaFlora();
}
@Override
public boolean shouldGenerateMobs() {
return delegate.getConfigPack().vanillaMobs();
}
@Override
public boolean shouldGenerateStructures() {
return delegate.getConfigPack().vanillaStructures();
}
public WorldConfig getWorldConfig() {
return worldConfig;
}
@Override
public ChunkGenerator getHandle() {
return delegate;

View File

@@ -1,8 +1,5 @@
package com.dfsek.terra.bukkit.generator;
import com.dfsek.terra.api.world.generator.Chunkified;
import com.dfsek.terra.api.world.generator.ChunkGenerator;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
import org.bukkit.Chunk;
import org.bukkit.World;
import org.bukkit.generator.BlockPopulator;
@@ -10,13 +7,18 @@ import org.jetbrains.annotations.NotNull;
import java.util.Random;
import com.dfsek.terra.api.world.generator.ChunkGenerator;
import com.dfsek.terra.api.world.generator.Chunkified;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
public class BukkitPopulatorWrapper extends BlockPopulator {
private final ChunkGenerator delegate;
public BukkitPopulatorWrapper(ChunkGenerator delegate) {
this.delegate = delegate;
}
@Override
public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk source) {
delegate.getGenerationStages().forEach(populator -> {

View File

@@ -1,10 +1,5 @@
package com.dfsek.terra.bukkit.handles;
import com.dfsek.terra.api.handle.ItemHandle;
import com.dfsek.terra.api.inventory.Item;
import com.dfsek.terra.api.inventory.item.Enchantment;
import com.dfsek.terra.bukkit.util.MinecraftUtils;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
@@ -12,18 +7,26 @@ import java.util.Arrays;
import java.util.Set;
import java.util.stream.Collectors;
public class BukkitItemHandle implements ItemHandle {
import com.dfsek.terra.api.handle.ItemHandle;
import com.dfsek.terra.api.inventory.Item;
import com.dfsek.terra.api.inventory.item.Enchantment;
import com.dfsek.terra.bukkit.util.MinecraftUtils;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
public class BukkitItemHandle implements ItemHandle {
@Override
public Item createItem(String data) {
return BukkitAdapter.adapt(Material.matchMaterial(data));
}
@Override
public Enchantment getEnchantment(String id) {
return BukkitAdapter.adapt(org.bukkit.enchantments.Enchantment.getByKey(NamespacedKey.minecraft(MinecraftUtils.stripMinecraftNamespace(id))));
return BukkitAdapter.adapt(
org.bukkit.enchantments.Enchantment.getByKey(NamespacedKey.minecraft(MinecraftUtils.stripMinecraftNamespace(id))));
}
@Override
public Set<Enchantment> getEnchantments() {
return Arrays.stream(org.bukkit.enchantments.Enchantment.values()).map(BukkitAdapter::adapt).collect(Collectors.toSet());

View File

@@ -1,6 +1,11 @@
package com.dfsek.terra.bukkit.handles;
import com.dfsek.tectonic.exception.LoadException;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import java.util.Locale;
import com.dfsek.terra.api.block.entity.BlockEntity;
import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.entity.EntityType;
@@ -10,43 +15,39 @@ import com.dfsek.terra.api.util.generic.pair.Pair;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.bukkit.structure.WorldEditUtil;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
import com.dfsek.terra.bukkit.world.BukkitBiome;
import com.dfsek.terra.bukkit.world.block.data.BukkitBlockState;
import com.dfsek.terra.bukkit.world.entity.BukkitEntityType;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import java.util.Locale;
public class BukkitWorldHandle implements WorldHandle {
private final BlockState air;
public BukkitWorldHandle() {
this.air = BukkitBlockState.newInstance(Material.AIR.createBlockData());
}
@Override
public BlockState createBlockData(String data) {
org.bukkit.block.data.BlockData bukkitData = Bukkit.createBlockData(data);
return BukkitBlockState.newInstance(bukkitData);
}
@Override
public BlockState air() {
return air;
}
@Override
public BlockEntity createBlockEntity(Vector3 location, BlockState block, String snbt) {
return null;
}
@Override
public EntityType getEntity(String id) {
if(!id.startsWith("minecraft:")) throw new LoadException("Invalid entity identifier " + id);
return new BukkitEntityType(org.bukkit.entity.EntityType.valueOf(id.toUpperCase(Locale.ROOT).substring(10)));
}
@Override
public BlockEntity createBlockEntity(Vector3 location, BlockState block, String snbt) {
return null;
}
@Override
public Pair<Vector3, Vector3> getSelectedLocation(Player player) {
org.bukkit.Location[] locations = WorldEditUtil.getSelectionLocations(BukkitAdapter.adapt(player));

View File

@@ -1,5 +1,14 @@
package com.dfsek.terra.bukkit.listeners;
import org.bukkit.Material;
import org.bukkit.TreeType;
import org.bukkit.block.Block;
import org.bukkit.block.data.BlockData;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.world.StructureGrowEvent;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.config.WorldConfig;
import com.dfsek.terra.api.vector.Vector3;
@@ -9,14 +18,7 @@ import com.dfsek.terra.bukkit.world.BukkitAdapter;
import com.dfsek.terra.transform.MapTransform;
import com.dfsek.terra.transform.TransformerImpl;
import com.dfsek.terra.util.FastRandom;
import org.bukkit.Material;
import org.bukkit.TreeType;
import org.bukkit.block.Block;
import org.bukkit.block.data.BlockData;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.world.StructureGrowEvent;
/**
* Listener for events on all implementations.
@@ -24,20 +26,20 @@ import org.bukkit.event.world.StructureGrowEvent;
public class CommonListener implements Listener {
private static final TransformerImpl<TreeType, String> TREE_TYPE_STRING_TRANSFORMER = new TransformerImpl.Builder<TreeType, String>()
.addTransform(new MapTransform<TreeType, String>()
.add(TreeType.COCOA_TREE, "JUNGLE_COCOA")
.add(TreeType.BIG_TREE, "LARGE_OAK")
.add(TreeType.TALL_REDWOOD, "LARGE_SPRUCE")
.add(TreeType.REDWOOD, "SPRUCE")
.add(TreeType.TREE, "OAK")
.add(TreeType.MEGA_REDWOOD, "MEGA_SPRUCE")
.add(TreeType.SWAMP, "SWAMP_OAK"))
.add(TreeType.COCOA_TREE, "JUNGLE_COCOA")
.add(TreeType.BIG_TREE, "LARGE_OAK")
.add(TreeType.TALL_REDWOOD, "LARGE_SPRUCE")
.add(TreeType.REDWOOD, "SPRUCE")
.add(TreeType.TREE, "OAK")
.add(TreeType.MEGA_REDWOOD, "MEGA_SPRUCE")
.add(TreeType.SWAMP, "SWAMP_OAK"))
.addTransform(TreeType::toString).build();
private final TerraPlugin main;
public CommonListener(TerraPlugin main) {
this.main = main;
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onSaplingGrow(StructureGrowEvent e) {
if(e.isCancelled()) return;

View File

@@ -1,17 +1,19 @@
package com.dfsek.terra.bukkit.listeners;
import com.dfsek.terra.api.TerraPlugin;
import io.papermc.paper.event.world.StructureLocateEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import com.dfsek.terra.api.TerraPlugin;
public class PaperListener implements Listener {
private final TerraPlugin main;
public PaperListener(TerraPlugin main) {
this.main = main;
}
@EventHandler
public void onStructureLocate(StructureLocateEvent e) {
/*String name = "minecraft:" + e.getType().getName();
@@ -19,7 +21,8 @@ public class PaperListener implements Listener {
World w = BukkitAdapter.adapt(e.getWorld());
ConfiguredStructure config = tw.getConfig().getRegistry(TerraStructure.class).get(tw.getConfig().getLocatable().get(name));
if(config != null) {
AsyncStructureFinder finder = new AsyncStructureFinder(w.getBiomeProvider(), config, BukkitAdapter.adapt(e.getOrigin().toVector()), tw.getWorld(), 0, 500, location -> {
AsyncStructureFinder finder = new AsyncStructureFinder(w.getBiomeProvider(), config, BukkitAdapter.adapt(e.getOrigin()
.toVector()), tw.getWorld(), 0, 500, location -> {
if(location != null)
e.setResult(BukkitAdapter.adapt(location).toLocation(e.getWorld()));
main.getDebugLogger().info("Location: " + location);

View File

@@ -1,6 +1,5 @@
package com.dfsek.terra.bukkit.listeners;
import com.dfsek.terra.api.TerraPlugin;
import org.bukkit.entity.Villager;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@@ -9,6 +8,9 @@ import org.bukkit.event.entity.EntitySpawnEvent;
import org.bukkit.event.entity.VillagerAcquireTradeEvent;
import org.bukkit.event.entity.VillagerCareerChangeEvent;
import com.dfsek.terra.api.TerraPlugin;
/**
* Listener to load on Spigot servers, contains Villager crash prevention and hacky ender eye redirection.
* <p>
@@ -17,11 +19,11 @@ import org.bukkit.event.entity.VillagerCareerChangeEvent;
*/
public class SpigotListener implements Listener {
private final TerraPlugin main;
public SpigotListener(TerraPlugin main) {
this.main = main;
}
@EventHandler(priority = EventPriority.NORMAL)
public void onEnderEye(EntitySpawnEvent e) {
/*
@@ -30,10 +32,12 @@ public class SpigotListener implements Listener {
main.getDebugLogger().info("Detected Ender Signal...");
World w = BukkitAdapter.adapt(e.getEntity().getWorld());
EnderSignal signal = (EnderSignal) entity;
ConfiguredStructure config = tw.getConfig().getRegistry(TerraStructure.class).get(w.getConfig().getLocatable().get("STRONGHOLD"));
ConfiguredStructure config = tw.getConfig().getRegistry(TerraStructure.class).get(w.getConfig().getLocatable().get
("STRONGHOLD"));
if(config != null) {
main.getDebugLogger().info("Overriding Ender Signal...");
AsyncStructureFinder finder = new AsyncStructureFinder(tw.getBiomeProvider(), config, BukkitAdapter.adapt(e.getLocation().toVector()), tw.getWorld(), 0, 500, location -> {
AsyncStructureFinder finder = new AsyncStructureFinder(tw.getBiomeProvider(), config, BukkitAdapter.adapt(e.getLocation()
.toVector()), tw.getWorld(), 0, 500, location -> {
if(location != null)
signal.setTargetLocation(BukkitAdapter.adapt(location).toLocation(e.getLocation().getWorld()));
main.getDebugLogger().info("Location: " + location);
@@ -44,7 +48,7 @@ public class SpigotListener implements Listener {
}
*/
}
@EventHandler
public void onCartographerChange(VillagerAcquireTradeEvent e) {
if(!(e.getEntity() instanceof Villager)) return;
@@ -55,7 +59,7 @@ public class SpigotListener implements Listener {
e.setCancelled(true); // Cancel leveling if the villager is a Cartographer, to prevent crashing server.
}
}
@EventHandler
public void onCartographerLevel(VillagerCareerChangeEvent e) {
if(e.getProfession().equals(Villager.Profession.CARTOGRAPHER)) {

View File

@@ -1,47 +1,48 @@
package com.dfsek.terra.bukkit.population;
import java.io.Serializable;
import java.util.UUID;
import com.dfsek.terra.api.world.Chunk;
import com.dfsek.terra.bukkit.world.BukkitWorld;
import java.io.Serializable;
import java.util.UUID;
public class ChunkCoordinate implements Serializable {
public static final long serialVersionUID = 7102462856296750285L;
private final int x;
private final int z;
private final UUID worldID;
public ChunkCoordinate(int x, int z, UUID worldID) {
this.x = x;
this.z = z;
this.worldID = worldID;
}
public ChunkCoordinate(Chunk c) {
this.x = c.getX();
this.z = c.getZ();
this.worldID = ((BukkitWorld) c.getWorld()).getUID();
}
public UUID getWorldID() {
return worldID;
}
public int getX() {
return x;
}
public int getZ() {
return z;
}
@Override
public int hashCode() {
return x * 31 + z;
}
@Override
public boolean equals(Object obj) {
if(!(obj instanceof ChunkCoordinate)) return false;

View File

@@ -1,16 +1,5 @@
package com.dfsek.terra.bukkit.population;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.profiler.ProfileFrame;
import com.dfsek.terra.api.world.Chunk;
import com.dfsek.terra.api.world.World;
import com.dfsek.terra.api.world.generator.Chunkified;
import com.dfsek.terra.api.world.generator.ChunkGenerator;
import com.dfsek.terra.bukkit.TerraBukkitPlugin;
import com.dfsek.terra.bukkit.TerraPluginImpl;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
import com.dfsek.terra.bukkit.world.BukkitWorld;
import com.dfsek.terra.util.FastRandom;
import org.bukkit.generator.BlockPopulator;
import org.jetbrains.annotations.NotNull;
@@ -19,6 +8,18 @@ import java.io.IOException;
import java.util.HashSet;
import java.util.Random;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.profiler.ProfileFrame;
import com.dfsek.terra.api.world.Chunk;
import com.dfsek.terra.api.world.World;
import com.dfsek.terra.api.world.generator.ChunkGenerator;
import com.dfsek.terra.api.world.generator.Chunkified;
import com.dfsek.terra.bukkit.TerraPluginImpl;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
import com.dfsek.terra.bukkit.world.BukkitWorld;
import com.dfsek.terra.util.FastRandom;
/**
* Cursed management class for the horrors of Bukkit population
*/
@@ -26,39 +27,39 @@ public class PopulationManager extends BlockPopulator {
private final ChunkGenerator generator;
private final HashSet<ChunkCoordinate> needsPop = new HashSet<>();
private final TerraPlugin main;
public PopulationManager(ChunkGenerator generator, TerraPlugin main) {
this.generator = generator;
this.main = main;
}
public static File getDataFolder(World w) {
File f = new File(((BukkitWorld) w).getWorldFolder(), "gaea");
f.mkdirs();
return f;
}
@SuppressWarnings("unchecked")
public synchronized void saveBlocks(World w) throws IOException {
File f = new File(getDataFolder(w), "chunks.bin");
f.createNewFile();
SerializationUtil.toFile((HashSet<ChunkCoordinate>) needsPop.clone(), f);
}
@SuppressWarnings("unchecked")
public synchronized void loadBlocks(World w) throws IOException, ClassNotFoundException {
File f = new File(getDataFolder(w), "chunks.bin");
needsPop.addAll((HashSet<ChunkCoordinate>) SerializationUtil.fromFile(f));
}
// Synchronize to prevent chunks from being queued for population multiple times.
public synchronized void checkNeighbors(int x, int z, World world) {
BukkitWorld w = (BukkitWorld) world;
ChunkCoordinate c = new ChunkCoordinate(x, z, (w).getUID());
if(w.isChunkGenerated(x + 1, z)
&& w.isChunkGenerated(x - 1, z)
&& w.isChunkGenerated(x, z + 1)
&& w.isChunkGenerated(x, z - 1) && needsPop.contains(c)) {
&& w.isChunkGenerated(x - 1, z)
&& w.isChunkGenerated(x, z + 1)
&& w.isChunkGenerated(x, z - 1) && needsPop.contains(c)) {
Random random = new FastRandom(w.getSeed());
long xRand = (random.nextLong() / 2L << 1L) + 1L;
long zRand = (random.nextLong() / 2L << 1L) + 1L;
@@ -72,7 +73,7 @@ public class PopulationManager extends BlockPopulator {
needsPop.remove(c);
}
}
@Override
@SuppressWarnings("try")
public void populate(org.bukkit.@NotNull World world, @NotNull Random random, org.bukkit.@NotNull Chunk source) {

View File

@@ -11,30 +11,41 @@ import java.io.ObjectStreamClass;
import java.io.Serializable;
import java.lang.reflect.Field;
public final class SerializationUtil {
public static Object fromFile(File f) throws IOException, ClassNotFoundException {
ObjectInputStream ois = new MovedObjectInputStream(new FileInputStream(f), "com.dfsek.terra.api.world.generation.population", "com.dfsek.terra.bukkit.population"); // Backwards compat with old Gaea location
ObjectInputStream ois = new MovedObjectInputStream(new FileInputStream(f), "com.dfsek.terra.api.world.generation.population",
"com.dfsek.terra.bukkit.population"); // Backwards compat with old Gaea location
Object o = ois.readObject();
ois.close();
return o;
}
public static void toFile(Serializable o, File f) throws IOException {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f));
oos.writeObject(o);
oos.close();
}
public static class MovedObjectInputStream extends ObjectInputStream {
private final String oldNameSpace;
private final String newNameSpace;
public MovedObjectInputStream(InputStream in, String oldNameSpace, String newNameSpace) throws IOException {
super(in);
this.oldNameSpace = oldNameSpace;
this.newNameSpace = newNameSpace;
}
@Override
protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
if(desc.getName().contains(oldNameSpace)) {
String newClassName = desc.getName().replace(oldNameSpace, newNameSpace);
return Class.forName(newClassName);
}
return super.resolveClass(desc);
}
@Override
protected ObjectStreamClass readClassDescriptor() throws IOException, ClassNotFoundException {
ObjectStreamClass result = super.readClassDescriptor();
@@ -42,11 +53,11 @@ public final class SerializationUtil {
if(result.getName().contains(oldNameSpace)) {
String newClassName = result.getName().replace(oldNameSpace, newNameSpace);
Class<?> localClass = Class.forName(newClassName);
Field nameField = ObjectStreamClass.class.getDeclaredField("name");
nameField.setAccessible(true);
nameField.set(result, newClassName);
ObjectStreamClass localClassDescriptor = ObjectStreamClass.lookup(localClass);
Field suidField = ObjectStreamClass.class.getDeclaredField("suid");
suidField.setAccessible(true);
@@ -57,14 +68,5 @@ public final class SerializationUtil {
}
return result;
}
@Override
protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
if(desc.getName().contains(oldNameSpace)) {
String newClassName = desc.getName().replace(oldNameSpace, newNameSpace);
return Class.forName(newClassName);
}
return super.resolveClass(desc);
}
}
}

View File

@@ -2,22 +2,22 @@ package com.dfsek.terra.bukkit.structure;
public class WorldEditNotFoundException extends RuntimeException {
private static final long serialVersionUID = 3678822468346338227L;
public WorldEditNotFoundException() {
}
public WorldEditNotFoundException(String message) {
super(message);
}
public WorldEditNotFoundException(String message, Throwable cause) {
super(message, cause);
}
public WorldEditNotFoundException(Throwable cause) {
super(cause);
}
public WorldEditNotFoundException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}

View File

@@ -12,6 +12,7 @@ import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
public final class WorldEditUtil {
public static Location[] getSelectionLocations(Player sender) {
WorldEditPlugin we;
@@ -34,13 +35,14 @@ public final class WorldEditUtil {
BlockVector3 max = selection.getMaximumPoint();
Location l1 = new Location(sender.getWorld(), min.getBlockX(), min.getBlockY(), min.getBlockZ());
Location l2 = new Location(sender.getWorld(), max.getBlockX(), max.getBlockY(), max.getBlockZ());
return new Location[] {l1, l2};
return new Location[]{ l1, l2 };
}
/**
* Gets an instance of the WorldEditPlugin class.
*
* @return The world edit plugin instance.
*
* @throws WorldEditNotFoundException Thrown when worldedit cannot be found.
*/
@NotNull
@@ -50,7 +52,7 @@ public final class WorldEditUtil {
Bukkit.getLogger().severe("[Terra] a command requiring WorldEdit was executed, but WorldEdit was not detected!");
throw new WorldEditNotFoundException("Could not find World Edit!");
}
public static Location[] getSelectionPositions(Player sender) {
WorldEditPlugin we;
try {
@@ -74,6 +76,6 @@ public final class WorldEditUtil {
BlockVector3 max = selection.getPos2();
Location l1 = new Location(sender.getWorld(), min.getBlockX(), min.getBlockY(), min.getBlockZ());
Location l2 = new Location(sender.getWorld(), max.getBlockX(), max.getBlockY(), max.getBlockZ());
return new Location[] {l1, l2};
return new Location[]{ l1, l2 };
}
}

View File

@@ -6,6 +6,7 @@ import org.bukkit.plugin.java.JavaPlugin;
import static io.papermc.lib.PaperLib.suggestPaper;
public final class PaperUtil {
public static void checkPaper(JavaPlugin main) {
Bukkit.getScheduler().scheduleSyncDelayedTask(main, () -> {

View File

@@ -1,6 +1,13 @@
package com.dfsek.terra.bukkit.world;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.TreeType;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import com.dfsek.terra.api.block.BlockType;
import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.block.state.properties.enums.Axis;
@@ -22,12 +29,7 @@ import com.dfsek.terra.bukkit.world.inventory.BukkitItemStack;
import com.dfsek.terra.bukkit.world.inventory.meta.BukkitEnchantment;
import com.dfsek.terra.transform.MapTransform;
import com.dfsek.terra.transform.TransformerImpl;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.TreeType;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
/**
* Utility class to adapt Bukkit enums to Terra enums.
@@ -35,25 +37,25 @@ import org.bukkit.util.Vector;
public final class BukkitAdapter {
public static TransformerImpl<TreeType, String> TREE_TRANSFORMER = new TransformerImpl.Builder<TreeType, String>()
.addTransform(new MapTransform<TreeType, String>()
.add(TreeType.COCOA_TREE, "JUNGLE_COCOA")
.add(TreeType.BIG_TREE, "LARGE_OAK")
.add(TreeType.TALL_REDWOOD, "LARGE_SPRUCE")
.add(TreeType.REDWOOD, "SPRUCE")
.add(TreeType.TREE, "OAK")
.add(TreeType.MEGA_REDWOOD, "MEGA_SPRUCE")
.add(TreeType.SWAMP, "SWAMP_OAK"))
.add(TreeType.COCOA_TREE, "JUNGLE_COCOA")
.add(TreeType.BIG_TREE, "LARGE_OAK")
.add(TreeType.TALL_REDWOOD, "LARGE_SPRUCE")
.add(TreeType.REDWOOD, "SPRUCE")
.add(TreeType.TREE, "OAK")
.add(TreeType.MEGA_REDWOOD, "MEGA_SPRUCE")
.add(TreeType.SWAMP, "SWAMP_OAK"))
.addTransform(TreeType::toString)
.build();
public static BlockState adapt(org.bukkit.block.data.BlockData data) {
return BukkitBlockState.newInstance(data);
}
public static org.bukkit.block.data.BlockData adapt(BlockState data) {
return ((BukkitBlockState) data).getHandle();
}
public static Axis adapt(org.bukkit.Axis axis) {
switch(axis) {
case X:
@@ -66,7 +68,7 @@ public final class BukkitAdapter {
throw new IllegalStateException();
}
}
public static Half adapt(org.bukkit.block.data.Bisected.Half half) {
switch(half) {
case BOTTOM:
@@ -77,7 +79,7 @@ public final class BukkitAdapter {
throw new IllegalStateException();
}
}
public static RedstoneConnection adapt(org.bukkit.block.data.type.RedstoneWire.Connection connection) {
switch(connection) {
case NONE:
@@ -90,7 +92,7 @@ public final class BukkitAdapter {
throw new IllegalStateException();
}
}
public static org.bukkit.block.data.type.RedstoneWire.Connection adapt(RedstoneConnection connection) {
switch(connection) {
case SIDE:
@@ -103,7 +105,7 @@ public final class BukkitAdapter {
throw new IllegalStateException();
}
}
public static RailShape adapt(org.bukkit.block.data.Rail.Shape shape) {
switch(shape) {
case SOUTH_WEST:
@@ -130,7 +132,7 @@ public final class BukkitAdapter {
throw new IllegalStateException();
}
}
public static org.bukkit.block.data.Rail.Shape adapt(RailShape shape) {
switch(shape) {
case EAST_WEST:
@@ -157,8 +159,8 @@ public final class BukkitAdapter {
throw new IllegalStateException();
}
}
public static org.bukkit.block.data.Bisected.Half adapt(Half half) {
switch(half) {
case TOP:
@@ -169,7 +171,7 @@ public final class BukkitAdapter {
throw new IllegalStateException();
}
}
public static org.bukkit.Axis adapt(Axis axis) {
switch(axis) {
case Z:
@@ -182,73 +184,73 @@ public final class BukkitAdapter {
throw new IllegalStateException();
}
}
public static Vector3 adapt(Location location) {
return new Vector3(location.getX(), location.getY(), location.getZ());
}
public static Vector adapt(Vector3 vector3) {
return new Vector(vector3.getX(), vector3.getY(), vector3.getZ());
}
public static Vector3 adapt(Vector vector) {
return new Vector3(vector.getX(), vector.getY(), vector.getZ());
}
public static CommandSender adapt(org.bukkit.command.CommandSender sender) {
if(sender instanceof Player) return new BukkitPlayer((Player) sender);
if(sender instanceof Entity) return new BukkitEntity((Entity) sender);
return new BukkitCommandSender(sender);
}
public static org.bukkit.command.CommandSender adapt(CommandSender sender) {
return ((BukkitCommandSender) sender).getHandle();
}
public static World adapt(org.bukkit.World world) {
return new BukkitWorld(world);
}
public static org.bukkit.World adapt(World world) {
return (org.bukkit.World) world.getHandle();
}
public static Chunk adapt(org.bukkit.Chunk chunk) {
return new BukkitChunk(chunk);
}
public static org.bukkit.Chunk adapt(Chunk chunk) {
return (org.bukkit.Chunk) chunk.getHandle();
}
public static Enchantment adapt(org.bukkit.enchantments.Enchantment enchantment) {
return new BukkitEnchantment(enchantment);
}
public static org.bukkit.enchantments.Enchantment adapt(Enchantment enchantment) {
return ((BukkitEnchantment) enchantment).getHandle();
}
public static Player adapt(com.dfsek.terra.api.entity.Player player) {
return ((BukkitPlayer) player).getHandle();
}
public static com.dfsek.terra.api.entity.Player adapt(Player player) {
return new BukkitPlayer(player);
}
public static BukkitBlockTypeAndItem adapt(Material material) {
return new BukkitBlockTypeAndItem(material);
}
public static Material adapt(BlockType type) {
return ((BukkitBlockTypeAndItem) type).getHandle();
}
public static ItemStack adapt(org.bukkit.inventory.ItemStack in) {
return new BukkitItemStack(in);
}
public static org.bukkit.inventory.ItemStack adapt(ItemStack in) {
return ((BukkitItemStack) in).getHandle();
}

View File

@@ -2,13 +2,14 @@ package com.dfsek.terra.bukkit.world;
import com.dfsek.terra.api.world.biome.Biome;
public class BukkitBiome implements Biome {
private final org.bukkit.block.Biome biome;
public BukkitBiome(org.bukkit.block.Biome biome) {
this.biome = biome;
}
@Override
public org.bukkit.block.Biome getHandle() {
return biome;

View File

@@ -1,40 +1,42 @@
package com.dfsek.terra.bukkit.world;
import org.bukkit.generator.ChunkGenerator;
import org.jetbrains.annotations.NotNull;
import com.dfsek.terra.api.world.BiomeGrid;
import com.dfsek.terra.api.world.biome.Biome;
import org.bukkit.generator.ChunkGenerator;
import org.jetbrains.annotations.NotNull;
@SuppressWarnings("deprecation")
public class BukkitBiomeGrid implements BiomeGrid {
private final ChunkGenerator.BiomeGrid delegate;
public BukkitBiomeGrid(ChunkGenerator.BiomeGrid biomeGrid) {
this.delegate = biomeGrid;
}
@Override
public ChunkGenerator.BiomeGrid getHandle() {
return delegate;
}
@Override
public @NotNull Biome getBiome(int x, int z) {
return new BukkitBiome(delegate.getBiome(x, z));
}
@Override
public @NotNull Biome getBiome(int x, int y, int z) {
return new BukkitBiome(delegate.getBiome(x, y, z));
}
@Override
public void setBiome(int x, int z, @NotNull Biome bio) {
delegate.setBiome(x, z, ((BukkitBiome) bio).getHandle());
}
@Override
public void setBiome(int x, int y, int z, @NotNull Biome bio) {
delegate.setBiome(x, y, z, ((BukkitBiome) bio).getHandle());
}
@Override
public @NotNull Biome getBiome(int x, int z) {
return new BukkitBiome(delegate.getBiome(x, z));
}
@Override
public @NotNull Biome getBiome(int x, int y, int z) {
return new BukkitBiome(delegate.getBiome(x, y, z));
}
}

View File

@@ -1,49 +1,51 @@
package com.dfsek.terra.bukkit.world;
import org.jetbrains.annotations.NotNull;
import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.world.Chunk;
import com.dfsek.terra.api.world.World;
import org.jetbrains.annotations.NotNull;
public class BukkitChunk implements Chunk {
private final org.bukkit.Chunk delegate;
public BukkitChunk(org.bukkit.Chunk delegate) {
this.delegate = delegate;
}
@Override
public int getX() {
return delegate.getX();
}
@Override
public int getZ() {
return delegate.getZ();
}
@Override
public World getWorld() {
return BukkitAdapter.adapt(delegate.getWorld());
}
@Override
public org.bukkit.Chunk getHandle() {
return delegate;
}
@Override
public void setBlock(int x, int y, int z, @NotNull BlockState blockState) {
delegate.getBlock(x, y, z).setBlockData(BukkitAdapter.adapt(blockState));
}
@Override
public @NotNull BlockState getBlock(int x, int y, int z) {
return BukkitAdapter.adapt(delegate.getBlock(x, y, z).getBlockData());
}
@Override
public void setBlock(int x, int y, int z, BlockState data, boolean physics) {
delegate.getBlock(x, y, z).setBlockData(BukkitAdapter.adapt(data), physics);
}
@Override
public void setBlock(int x, int y, int z, @NotNull BlockState blockState) {
delegate.getBlock(x, y, z).setBlockData(BukkitAdapter.adapt(blockState));
}
@Override
public @NotNull BlockState getBlock(int x, int y, int z) {
return BukkitAdapter.adapt(delegate.getBlock(x, y, z).getBlockData());
}
@Override
public int getX() {
return delegate.getX();
}
@Override
public int getZ() {
return delegate.getZ();
}
@Override
public World getWorld() {
return BukkitAdapter.adapt(delegate.getWorld());
}
}

View File

@@ -1,5 +1,10 @@
package com.dfsek.terra.bukkit.world;
import org.bukkit.TreeType;
import java.util.Locale;
import java.util.Random;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.handle.WorldHandle;
import com.dfsek.terra.api.profiler.ProfileFrame;
@@ -7,22 +12,19 @@ import com.dfsek.terra.api.util.collection.MaterialSet;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.Tree;
import com.dfsek.terra.api.world.World;
import org.bukkit.TreeType;
import java.util.Locale;
import java.util.Random;
public class BukkitTree implements Tree {
private final TreeType delegate;
private final MaterialSet spawnable;
private final TerraPlugin main;
public BukkitTree(TreeType delegate, TerraPlugin main) {
this.delegate = delegate;
this.main = main;
this.spawnable = getSpawnable(delegate);
}
private MaterialSet getSpawnable(TreeType type) {
WorldHandle handle = main.getWorldHandle();
switch(type) {
@@ -33,15 +35,15 @@ public class BukkitTree implements Tree {
case BROWN_MUSHROOM:
case RED_MUSHROOM:
return MaterialSet.get(handle.createBlockData("minecraft:mycelium"), handle.createBlockData("minecraft:grass_block"),
handle.createBlockData("minecraft:podzol"));
handle.createBlockData("minecraft:podzol"));
case CHORUS_PLANT:
return MaterialSet.get(handle.createBlockData("minecraft:end_stone"));
default:
return MaterialSet.get(handle.createBlockData("minecraft:grass_block"), handle.createBlockData("minecraft:dirt"),
handle.createBlockData("minecraft:podzol"));
handle.createBlockData("minecraft:podzol"));
}
}
@Override
@SuppressWarnings("try")
public boolean plant(Vector3 l, World world, Random r) {
@@ -49,7 +51,7 @@ public class BukkitTree implements Tree {
return BukkitAdapter.adapt(world).generateTree(BukkitAdapter.adapt(l).toLocation(BukkitAdapter.adapt(world)), delegate);
}
}
@Override
public MaterialSet getSpawnable() {
return spawnable;

View File

@@ -1,5 +1,8 @@
package com.dfsek.terra.bukkit.world;
import java.io.File;
import java.util.UUID;
import com.dfsek.terra.api.block.entity.BlockEntity;
import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.config.WorldConfig;
@@ -15,104 +18,103 @@ import com.dfsek.terra.bukkit.generator.BukkitChunkGeneratorWrapper;
import com.dfsek.terra.bukkit.world.block.state.BukkitBlockEntity;
import com.dfsek.terra.bukkit.world.entity.BukkitEntityType;
import java.io.File;
import java.util.UUID;
public class BukkitWorld implements World {
private final org.bukkit.World delegate;
public BukkitWorld(org.bukkit.World delegate) {
this.delegate = delegate;
}
@Override
public long getSeed() {
return delegate.getSeed();
}
@Override
public int getMaxHeight() {
return delegate.getMaxHeight();
}
public String getName() {
return delegate.getName();
}
public UUID getUID() {
return delegate.getUID();
}
public boolean isChunkGenerated(int x, int z) {
return delegate.isChunkGenerated(x, z);
}
@Override
public Chunk getChunkAt(int x, int z) {
return BukkitAdapter.adapt(delegate.getChunkAt(x, z));
public File getWorldFolder() {
return delegate.getWorldFolder();
}
@Override
public BlockState getBlockData(int x, int y, int z) {
return BukkitAdapter.adapt(delegate.getBlockAt(x, y, z).getBlockData());
public Entity spawnEntity(Vector3 location, EntityType entityType) {
return new BukkitEntity(
delegate.spawnEntity(BukkitAdapter.adapt(location).toLocation(delegate), ((BukkitEntityType) entityType).getHandle()));
}
@Override
public void setBlockData(int x, int y, int z, BlockState data, boolean physics) {
delegate.getBlockAt(x, y, z).setBlockData(BukkitAdapter.adapt(data), physics);
}
@Override
public long getSeed() {
return delegate.getSeed();
}
@Override
public int getMaxHeight() {
return delegate.getMaxHeight();
}
@Override
public Chunk getChunkAt(int x, int z) {
return BukkitAdapter.adapt(delegate.getChunkAt(x, z));
}
@Override
public BlockState getBlockData(int x, int y, int z) {
return BukkitAdapter.adapt(delegate.getBlockAt(x, y, z).getBlockData());
}
@Override
public BlockEntity getBlockState(int x, int y, int z) {
return BukkitBlockEntity.newInstance(delegate.getBlockAt(x, y, z).getState());
}
public File getWorldFolder() {
return delegate.getWorldFolder();
}
@Override
public Entity spawnEntity(Vector3 location, EntityType entityType) {
return new BukkitEntity(delegate.spawnEntity(BukkitAdapter.adapt(location).toLocation(delegate), ((BukkitEntityType) entityType).getHandle()));
}
@Override
public int getMinHeight() {
return delegate.getMinHeight();
}
@Override
public ChunkGenerator getGenerator() {
return ((BukkitChunkGeneratorWrapper) delegate.getGenerator()).getHandle();
}
@Override
public BiomeProvider getBiomeProvider() {
return ((BukkitChunkGeneratorWrapper) delegate.getGenerator()).getWorldConfig().getProvider();
}
@Override
public WorldConfig getConfig() {
return ((BukkitChunkGeneratorWrapper) delegate.getGenerator()).getWorldConfig();
}
@Override
public org.bukkit.World getHandle() {
return delegate;
}
@Override
public int hashCode() {
return delegate.hashCode();
}
@Override
public boolean equals(Object obj) {
if(!(obj instanceof BukkitWorld)) return false;
BukkitWorld other = (BukkitWorld) obj;
return other.getHandle().equals(delegate);
}
@Override
public int hashCode() {
return delegate.hashCode();
}
@Override
public String toString() {
return delegate.toString();

View File

@@ -1,54 +1,56 @@
package com.dfsek.terra.bukkit.world.block;
import org.bukkit.Material;
import com.dfsek.terra.api.block.BlockType;
import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.inventory.Item;
import com.dfsek.terra.api.inventory.ItemStack;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
import org.bukkit.Material;
public class BukkitBlockTypeAndItem implements BlockType, Item {
private final Material delegate;
public BukkitBlockTypeAndItem(Material delegate) {
this.delegate = delegate;
}
@Override
public Material getHandle() {
return delegate;
}
@Override
public BlockState getDefaultData() {
return BukkitAdapter.adapt(delegate.createBlockData());
}
@Override
public boolean isSolid() {
return delegate.isSolid();
}
@Override
public boolean isWater() {
return delegate == Material.WATER;
}
@Override
public ItemStack newItemStack(int amount) {
return BukkitAdapter.adapt(new org.bukkit.inventory.ItemStack(delegate, amount));
}
@Override
public double getMaxDurability() {
return delegate.getMaxDurability();
}
@Override
public int hashCode() {
return delegate.hashCode();
}
@Override
public boolean equals(Object obj) {
if(!(obj instanceof BukkitBlockTypeAndItem)) return false;

View File

@@ -1,38 +1,70 @@
package com.dfsek.terra.bukkit.world.block.data;
import org.bukkit.Material;
import com.dfsek.terra.api.block.BlockType;
import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.block.state.properties.Property;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
import org.bukkit.Material;
public class BukkitBlockState implements BlockState {
private org.bukkit.block.data.BlockData delegate;
protected BukkitBlockState(org.bukkit.block.data.BlockData delegate) {
this.delegate = delegate;
}
public static BukkitBlockState newInstance(org.bukkit.block.data.BlockData bukkitData) {
return new BukkitBlockState(bukkitData);
}
@Override
public org.bukkit.block.data.BlockData getHandle() {
return delegate;
}
@Override
public BlockType getBlockType() {
return BukkitAdapter.adapt(delegate.getMaterial());
}
@Override
public boolean matches(BlockState data) {
return delegate.getMaterial() == ((BukkitBlockState) data).getHandle().getMaterial();
}
@Override
public <T> boolean has(Property<T> property) {
return false;
}
@Override
public <T> T get(Property<T> property) {
return null;
}
@Override
public <T> BlockState set(Property<T> property, T value) {
return null;
}
@Override
public BlockType getBlockType() {
return BukkitAdapter.adapt(delegate.getMaterial());
}
@Override
public String getAsString() {
return delegate.getAsString(false);
}
@Override
public boolean isAir() {
return delegate.getMaterial().isAir();
}
@Override
public boolean isStructureVoid() {
return delegate.getMaterial() == Material.STRUCTURE_VOID;
}
@Override
public BukkitBlockState clone() {
try {
@@ -43,34 +75,4 @@ public class BukkitBlockState implements BlockState {
throw new Error(e);
}
}
@Override
public String getAsString() {
return delegate.getAsString(false);
}
@Override
public boolean isAir() {
return delegate.getMaterial().isAir();
}
@Override
public boolean isStructureVoid() {
return delegate.getMaterial() == Material.STRUCTURE_VOID;
}
@Override
public <T> boolean has(Property<T> property) {
return false;
}
@Override
public <T> T get(Property<T> property) {
return null;
}
@Override
public <T> BlockState set(Property<T> property, T value) {
return null;
}
}

View File

@@ -1,60 +1,62 @@
package com.dfsek.terra.bukkit.world.block.state;
import org.bukkit.block.Container;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.block.Sign;
import com.dfsek.terra.api.block.entity.BlockEntity;
import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
import com.dfsek.terra.bukkit.world.block.data.BukkitBlockState;
import org.bukkit.block.Container;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.block.Sign;
public class BukkitBlockEntity implements BlockEntity {
private final org.bukkit.block.BlockState delegate;
protected BukkitBlockEntity(org.bukkit.block.BlockState block) {
this.delegate = block;
}
public static BukkitBlockEntity newInstance(org.bukkit.block.BlockState block) {
if(block instanceof Container) return new BukkitContainer((Container) block);
if(block instanceof Sign) return new BukkitSign((Sign) block);
if(block instanceof CreatureSpawner) return new BukkitMobSpawner((CreatureSpawner) block);
return new BukkitBlockEntity(block);
}
@Override
public org.bukkit.block.BlockState getHandle() {
return delegate;
}
@Override
public Vector3 getPosition() {
return BukkitAdapter.adapt(delegate.getBlock().getLocation().toVector());
}
@Override
public int getX() {
return delegate.getX();
}
@Override
public int getY() {
return delegate.getY();
}
@Override
public int getZ() {
return delegate.getZ();
}
@Override
public BlockState getBlockData() {
return BukkitBlockState.newInstance(delegate.getBlockData());
}
@Override
public boolean update(boolean applyPhysics) {
return delegate.update(true, applyPhysics);
}
@Override
public Vector3 getPosition() {
return BukkitAdapter.adapt(delegate.getBlock().getLocation().toVector());
}
@Override
public int getX() {
return delegate.getX();
}
@Override
public int getY() {
return delegate.getY();
}
@Override
public int getZ() {
return delegate.getZ();
}
@Override
public BlockState getBlockData() {
return BukkitBlockState.newInstance(delegate.getBlockData());
}
}

View File

@@ -4,17 +4,18 @@ import com.dfsek.terra.api.block.entity.Container;
import com.dfsek.terra.api.inventory.Inventory;
import com.dfsek.terra.bukkit.world.inventory.BukkitInventory;
public class BukkitContainer extends BukkitBlockEntity implements Container {
public class BukkitContainer extends BukkitBlockEntity implements Container {
protected BukkitContainer(org.bukkit.block.Container block) {
super(block);
}
@Override
public Inventory getInventory() {
return new BukkitInventory(((org.bukkit.block.Container) getHandle()).getInventory());
}
@Override
public boolean update(boolean applyPhysics) {
return false; // This clears the inventory. we don't want that.

View File

@@ -1,97 +1,99 @@
package com.dfsek.terra.bukkit.world.block.state;
import org.bukkit.block.CreatureSpawner;
import org.jetbrains.annotations.NotNull;
import com.dfsek.terra.api.block.entity.MobSpawner;
import com.dfsek.terra.api.block.entity.SerialState;
import com.dfsek.terra.api.entity.EntityType;
import com.dfsek.terra.bukkit.world.entity.BukkitEntityType;
import org.bukkit.block.CreatureSpawner;
import org.jetbrains.annotations.NotNull;
public class BukkitMobSpawner extends BukkitBlockEntity implements MobSpawner {
protected BukkitMobSpawner(CreatureSpawner block) {
super(block);
}
@Override
public EntityType getSpawnedType() {
return new BukkitEntityType(((CreatureSpawner) getHandle()).getSpawnedType());
}
@Override
public void setSpawnedType(@NotNull EntityType creatureType) {
((CreatureSpawner) getHandle()).setSpawnedType(((BukkitEntityType) creatureType).getHandle());
}
@Override
public int getDelay() {
return ((CreatureSpawner) getHandle()).getDelay();
}
@Override
public void setDelay(int delay) {
((CreatureSpawner) getHandle()).setDelay(delay);
}
@Override
public int getMinSpawnDelay() {
return ((CreatureSpawner) getHandle()).getMinSpawnDelay();
}
@Override
public void setMinSpawnDelay(int delay) {
((CreatureSpawner) getHandle()).setMinSpawnDelay(delay);
}
@Override
public int getMaxSpawnDelay() {
return ((CreatureSpawner) getHandle()).getMaxSpawnDelay();
}
@Override
public void setMaxSpawnDelay(int delay) {
((CreatureSpawner) getHandle()).setMaxSpawnDelay(delay);
}
@Override
public int getSpawnCount() {
return ((CreatureSpawner) getHandle()).getSpawnCount();
}
@Override
public void setSpawnCount(int spawnCount) {
((CreatureSpawner) getHandle()).setSpawnCount(spawnCount);
}
@Override
public int getMaxNearbyEntities() {
return ((CreatureSpawner) getHandle()).getMaxNearbyEntities();
}
@Override
public void setMaxNearbyEntities(int maxNearbyEntities) {
((CreatureSpawner) getHandle()).setMaxNearbyEntities(maxNearbyEntities);
}
@Override
public int getRequiredPlayerRange() {
return ((CreatureSpawner) getHandle()).getRequiredPlayerRange();
}
@Override
public void setRequiredPlayerRange(int requiredPlayerRange) {
((CreatureSpawner) getHandle()).setRequiredPlayerRange(requiredPlayerRange);
}
@Override
public int getSpawnRange() {
return ((CreatureSpawner) getHandle()).getSpawnRange();
}
@Override
public void setSpawnRange(int spawnRange) {
((CreatureSpawner) getHandle()).setSpawnRange(spawnRange);
}
@Override
public void applyState(String state) {
SerialState.parse(state).forEach((k, v) -> {

View File

@@ -1,30 +1,32 @@
package com.dfsek.terra.bukkit.world.block.state;
import org.jetbrains.annotations.NotNull;
import com.dfsek.terra.api.block.entity.SerialState;
import com.dfsek.terra.api.block.entity.Sign;
import org.jetbrains.annotations.NotNull;
@SuppressWarnings("deprecation")
public class BukkitSign extends BukkitBlockEntity implements Sign {
protected BukkitSign(org.bukkit.block.Sign block) {
super(block);
}
@Override
public @NotNull String[] getLines() {
return ((org.bukkit.block.Sign) getHandle()).getLines();
}
@Override
public @NotNull String getLine(int index) throws IndexOutOfBoundsException {
return ((org.bukkit.block.Sign) getHandle()).getLine(index);
}
@Override
public void setLine(int index, @NotNull String line) throws IndexOutOfBoundsException {
((org.bukkit.block.Sign) getHandle()).setLine(index, line);
}
@Override
public @NotNull String[] getLines() {
return ((org.bukkit.block.Sign) getHandle()).getLines();
}
@Override
public @NotNull String getLine(int index) throws IndexOutOfBoundsException {
return ((org.bukkit.block.Sign) getHandle()).getLine(index);
}
@Override
public void applyState(String state) {
SerialState.parse(state).forEach((k, v) -> {

View File

@@ -2,13 +2,14 @@ package com.dfsek.terra.bukkit.world.entity;
import com.dfsek.terra.api.entity.EntityType;
public class BukkitEntityType implements EntityType {
private final org.bukkit.entity.EntityType delegate;
public BukkitEntityType(org.bukkit.entity.EntityType delegate) {
this.delegate = delegate;
}
@Override
public org.bukkit.entity.EntityType getHandle() {
return delegate;

View File

@@ -3,29 +3,30 @@ package com.dfsek.terra.bukkit.world.inventory;
import com.dfsek.terra.api.inventory.Inventory;
import com.dfsek.terra.api.inventory.ItemStack;
public class BukkitInventory implements Inventory {
private final org.bukkit.inventory.Inventory delegate;
public BukkitInventory(org.bukkit.inventory.Inventory delegate) {
this.delegate = delegate;
}
@Override
public void setItem(int slot, ItemStack newStack) {
delegate.setItem(slot, ((BukkitItemStack) newStack).getHandle());
}
@Override
public int getSize() {
return delegate.getSize();
}
@Override
public ItemStack getItem(int slot) {
org.bukkit.inventory.ItemStack itemStack = delegate.getItem(slot);
return itemStack == null ? null : new BukkitItemStack(itemStack);
}
@Override
public void setItem(int slot, ItemStack newStack) {
delegate.setItem(slot, ((BukkitItemStack) newStack).getHandle());
}
@Override
public org.bukkit.inventory.Inventory getHandle() {
return delegate;

View File

@@ -1,41 +1,43 @@
package com.dfsek.terra.bukkit.world.inventory;
import org.bukkit.inventory.meta.Damageable;
import java.util.HashMap;
import java.util.Map;
import com.dfsek.terra.api.inventory.item.Enchantment;
import com.dfsek.terra.api.inventory.item.ItemMeta;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
import com.dfsek.terra.bukkit.world.inventory.meta.BukkitDamageable;
import com.dfsek.terra.bukkit.world.inventory.meta.BukkitEnchantment;
import org.bukkit.inventory.meta.Damageable;
import java.util.HashMap;
import java.util.Map;
public class BukkitItemMeta implements ItemMeta {
private final org.bukkit.inventory.meta.ItemMeta delegate;
protected BukkitItemMeta(org.bukkit.inventory.meta.ItemMeta delegate) {
this.delegate = delegate;
}
public static BukkitItemMeta newInstance(org.bukkit.inventory.meta.ItemMeta delegate) {
if(delegate instanceof Damageable) return new BukkitDamageable((Damageable) delegate);
return new BukkitItemMeta(delegate);
}
@Override
public org.bukkit.inventory.meta.ItemMeta getHandle() {
return delegate;
}
@Override
public void addEnchantment(Enchantment enchantment, int level) {
delegate.addEnchant(((BukkitEnchantment) enchantment).getHandle(), level, true);
}
@Override
public Map<Enchantment, Integer> getEnchantments() {
Map<Enchantment, Integer> map = new HashMap<>();
delegate.getEnchants().forEach((enchantment, integer) -> map.put(BukkitAdapter.adapt(enchantment), integer));
return map;
}
@Override
public void addEnchantment(Enchantment enchantment, int level) {
delegate.addEnchant(((BukkitEnchantment) enchantment).getHandle(), level, true);
}
}

View File

@@ -5,38 +5,39 @@ import com.dfsek.terra.api.inventory.ItemStack;
import com.dfsek.terra.api.inventory.item.ItemMeta;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
public class BukkitItemStack implements ItemStack {
private final org.bukkit.inventory.ItemStack delegate;
public BukkitItemStack(org.bukkit.inventory.ItemStack delegate) {
this.delegate = delegate;
}
@Override
public int getAmount() {
return delegate.getAmount();
}
@Override
public void setAmount(int i) {
delegate.setAmount(i);
}
@Override
public Item getType() {
return BukkitAdapter.adapt(delegate.getType());
}
@Override
public ItemMeta getItemMeta() {
return BukkitItemMeta.newInstance(delegate.getItemMeta());
}
@Override
public void setItemMeta(ItemMeta meta) {
delegate.setItemMeta(((BukkitItemMeta) meta).getHandle());
}
@Override
public org.bukkit.inventory.ItemStack getHandle() {
return delegate;

View File

@@ -1,24 +1,26 @@
package com.dfsek.terra.bukkit.world.inventory.meta;
import org.bukkit.inventory.meta.ItemMeta;
import com.dfsek.terra.api.inventory.item.Damageable;
import com.dfsek.terra.bukkit.world.inventory.BukkitItemMeta;
import org.bukkit.inventory.meta.ItemMeta;
public class BukkitDamageable extends BukkitItemMeta implements Damageable {
public BukkitDamageable(org.bukkit.inventory.meta.Damageable delegate) {
super((ItemMeta) delegate);
}
@Override
public int getDamage() {
return ((org.bukkit.inventory.meta.Damageable) getHandle()).getDamage();
}
@Override
public void setDamage(int damage) {
((org.bukkit.inventory.meta.Damageable) getHandle()).setDamage(damage);
}
@Override
public boolean hasDamage() {
return ((org.bukkit.inventory.meta.Damageable) getHandle()).hasDamage();

View File

@@ -4,33 +4,34 @@ import com.dfsek.terra.api.inventory.ItemStack;
import com.dfsek.terra.api.inventory.item.Enchantment;
import com.dfsek.terra.bukkit.world.inventory.BukkitItemStack;
public class BukkitEnchantment implements Enchantment {
private final org.bukkit.enchantments.Enchantment delegate;
public BukkitEnchantment(org.bukkit.enchantments.Enchantment delegate) {
this.delegate = delegate;
}
@Override
public org.bukkit.enchantments.Enchantment getHandle() {
return delegate;
}
@Override
public boolean canEnchantItem(ItemStack itemStack) {
return delegate.canEnchantItem(((BukkitItemStack) itemStack).getHandle());
}
@Override
public String getID() {
return delegate.getKey().toString();
}
@Override
public boolean conflictsWith(Enchantment other) {
return delegate.conflictsWith(((BukkitEnchantment) other).getHandle());
}
@Override
public String getID() {
return delegate.getKey().toString();
}
@Override
public int getMaxLevel() {
return delegate.getMaxLevel();