diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f68d109
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,29 @@
+### IntelliJ IDEA ###
+out/
+!**/src/main/**/out/
+!**/src/test/**/out/
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+bin/
+!**/src/main/**/bin/
+!**/src/test/**/bin/
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/PearlFIx.iml b/PearlFIx.iml
new file mode 100644
index 0000000..dd87ab9
--- /dev/null
+++ b/PearlFIx.iml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+ SPIGOT
+ MCP
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/config.yml b/src/config.yml
new file mode 100644
index 0000000..c83ecb2
--- /dev/null
+++ b/src/config.yml
@@ -0,0 +1,4 @@
+Translations:
+ Console: "Prevented teleport of player {0} using {1}" # {0} = player's nickname, {1} = teleport cause (ender_pearl/chorus_fruit)
+ Player: "Hey! You can't teleport using {0} outside the border!" # {0} teleport cause (same like above)
+
diff --git a/src/me/petulikan1/PearlFix/EventListener.java b/src/me/petulikan1/PearlFix/EventListener.java
new file mode 100644
index 0000000..30c13f4
--- /dev/null
+++ b/src/me/petulikan1/PearlFix/EventListener.java
@@ -0,0 +1,27 @@
+package me.petulikan1.PearlFix;
+
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.World;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.player.PlayerTeleportEvent;
+
+public class EventListener implements Listener {
+
+ @EventHandler
+ public void onTeleport(PlayerTeleportEvent e) {
+ if (e.getCause() == PlayerTeleportEvent.TeleportCause.ENDER_PEARL || e.getCause() == PlayerTeleportEvent.TeleportCause.CHORUS_FRUIT) {
+ Location to = e.getTo();
+ World world = to.getWorld();
+ if (!world.getWorldBorder().isInside(to)) {
+ e.setCancelled(true);
+ Utils.msg("Console", Bukkit.getConsoleSender(), e.getPlayer().getName(), e.getCause());
+ Utils.msg("Player", e.getPlayer(), e.getCause());
+ return;
+ }
+ }
+ }
+
+
+}
diff --git a/src/me/petulikan1/PearlFix/Loader.java b/src/me/petulikan1/PearlFix/Loader.java
new file mode 100644
index 0000000..bd50e6f
--- /dev/null
+++ b/src/me/petulikan1/PearlFix/Loader.java
@@ -0,0 +1,28 @@
+package me.petulikan1.PearlFix;
+
+import lombok.Getter;
+import org.bukkit.Bukkit;
+import org.bukkit.event.HandlerList;
+import org.bukkit.plugin.java.JavaPlugin;
+
+public class Loader extends JavaPlugin {
+
+
+ private EventListener listener = null;
+ @Getter
+ protected static Loader main;
+
+ @Override
+ public void onEnable() {
+ main = this;
+ Bukkit.getPluginManager().registerEvents(listener = new EventListener(), this);
+ saveDefaultConfig();
+ }
+
+
+ @Override
+ public void onDisable() {
+ if (listener != null)
+ HandlerList.unregisterAll(listener);
+ }
+}
diff --git a/src/me/petulikan1/PearlFix/Utils.java b/src/me/petulikan1/PearlFix/Utils.java
new file mode 100644
index 0000000..db8e9b4
--- /dev/null
+++ b/src/me/petulikan1/PearlFix/Utils.java
@@ -0,0 +1,61 @@
+package me.petulikan1.PearlFix;
+
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.minimessage.MiniMessage;
+import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
+import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
+import net.kyori.adventure.translation.Translatable;
+import org.bukkit.command.CommandSender;
+
+public class Utils {
+
+ private final static PlainTextComponentSerializer plainTextComponentSerializer = PlainTextComponentSerializer.builder().build();
+
+ private final static LegacyComponentSerializer legacySection
+ = LegacyComponentSerializer.legacySection().toBuilder().useUnusualXRepeatedCharacterHexFormat().hexColors().extractUrls()
+ .build();
+
+ private static final MiniMessage mm = MiniMessage.builder().build();
+
+ public static String plainText(T t) {
+ return plainTextComponentSerializer.serialize(Component.translatable(t));
+ }
+
+ public static String plainText(String msg) {
+ return mm.serialize(legacySection.deserialize(plainTextComponentSerializer.serialize(Component.text(msg))));
+ }
+
+ public static String getTranslation(String key) {
+ return Loader.getMain().getConfig().getString("Translations." + key, "NO_TRANSLATION_FOUND!");
+ }
+
+ public static void msg(String key, CommandSender s) {
+ if (s == null)
+ throw new RuntimeException("CommandSender can't be null!");
+ s.sendMessage(component(key));
+ }
+
+ public static void msg(String key, CommandSender s, Object... objects) {
+ if (s == null)
+ throw new RuntimeException("CommandSender can't be null!");
+ s.sendMessage(component(key, objects));
+ }
+
+ public static Component component(String key) {
+ return mm.deserialize(getTranslation(key));
+ }
+
+ public static Component component(String key, Object... objects) {
+ return mm.deserialize(replacedTranslation(key, objects));
+ }
+
+ public static String replacedTranslation(String key, Object... objects) {
+ String translation = getTranslation(key);
+ int i = 0;
+ for (Object o : objects) {
+ translation = translation.replace("{" + i + "}", o + "");
+ i++;
+ }
+ return translation;
+ }
+}
diff --git a/src/plugin.yml b/src/plugin.yml
new file mode 100644
index 0000000..a65b993
--- /dev/null
+++ b/src/plugin.yml
@@ -0,0 +1,5 @@
+main: me.petulikan1.PearlFix.Loader
+name: PearlFix
+author: petulikan1
+version: 1.0
+website: https://github.com/petulikan1