SignApi
1.0Used to open Sgin-gui with predetermined text which will be recognized from the Server when closed
What it does:
With this api you can open a SignGui wtih predetermend text which can be read with the SignChangeEvent.
How it works:
The api scans the blocks at hight -63 in a square field(200x200) around the player. When a block at hight -63 is bedrock a sign is placed under it which is then edited and opened.
Custom event:
When the sign is closed by the player the api will call an custom event called CustomSignEditEvent.
-When this event is cancelled the sign will not be replaced with the previous material.
-When you set the previous material of the event (event.setPreviousMaterial(<Material>);) the sign will be replaced with this material.
Usage:
To use this api download it, add it to your buildpath.
I strongly recommend adding it also to your plugin folder for less code and safer approach.
Code examples:
Add Dependency to your plugin.yml:
depend: [SignApi]
Examplme code with api in plugin folder:
import org.bukkit.entity.Player;
import de.officeryoda.SignApi;
public class exampleClass {
private void openSignGui(Player player, String[] lines) {
if(lines.length == 0)
SignApi.openNewSign(player, "text in line 1", "text in line 2", "text in line 3", "text in line 4");
else
SignApi.openNewSign(player, lines);
}
}
Examplme code with api NOT in plugin folder:
import java.util.HashMap;
import java.util.Map;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.SignChangeEvent;
import de.officeryoda.SignApi;
public class exampleClass implements Listener {
Map<Location, Material> signs;
public exampleClass() {
signs = new HashMap<>();
}
public void openSignGui(Player player, String[] lines) {
if(lines.length == 0)
signs.putAll(SignApi.openNewSign(player, "text in line 1", "text in line 2", "text in line 3", "text in line 4"));
else
signs.putAll(SignApi.openNewSign(player, lines));
}
@EventHandler
public void onSignChange(SignChangeEvent event) {
Location location = event.getBlock().getLocation();
if(!signs.containsKey(location)) //checks if the sign is a sign placed by the plugin/api
return;
location.getWorld().getBlockAt(location).setType(signs.get(location)); //replaces the sign with the block which was there first
signs.remove(location, signs.get(location)); //removes sign from list
}
}
Read the sign with api in plugin folder:
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import de.officeryoda.CustomSignEditEvent;
import de.officeryoda.SignApi;
public class exampleClass implements Listener {
public void openSignGui(Player player, String[] lines) {
if(lines.length == 0)
SignApi.openNewSign(player, "text of line 1", "text of line 2", "text of line 3", "text of line 3");
else
SignApi.openNewSign(player, lines);
}
@EventHandler
public void onSignChange(CustomSignEditEvent event) {
Player player = event.getPlayer(); //gets the player
String[] lines = event.getLines(); //gets the lines
for(int i = 0; i < lines.length; i++) {
player.sendMessage(ChatColor.GRAY + "line "+ i + ": " + ChatColor.WHITE + lines[i]);
}
return;
}
}
Read the sign with api NOT in plugin folder:
import java.util.HashMap;
import java.util.Map;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.SignChangeEvent;
import de.officeryoda.SignApi;
public class exampleClass implements Listener {
Map<Location, Material> signs;
public exampleClass() {
signs = new HashMap<>();
}
public void openSignGui(Player player, String[] lines) {
if(lines.length == 0)
signs.putAll(SignApi.openNewSign(player, "text of line 1", "text of line 2", "text of line 3", "text of line 3"));
else
signs.putAll(SignApi.openNewSign(player, lines));
}
@EventHandler
public void onSignChange(SignChangeEvent event) {
Player player = event.getPlayer(); //gets the player
String[] lines = event.getLines(); //gets the lines
Location location = event.getBlock().getLocation(); //gets the location
if(signs.containsKey(location)) { //checks if the sign is a sign placed by the plugin/api
for(int i = 0; i < lines.length; i++) {
player.sendMessage(ChatColor.GRAY + "line "+ i + ": " + ChatColor.WHITE + lines[i]); //send the lines
}
return;
}
return;
}
}
Similar projects
Plugin →Let Me Despawn
Improves performance by tweaking mob despawn rules. Say bye to pesky unintentional persistent mobs.
25MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
Emotecraft
Create your own emotes in Minecraft.
7.5MSueta
Simple Tpa
A simple tpa plugin which sends requests
5.4MSueta
Common Network
Forge and Fabric Unified Networking Solution
3.9MSueta
Set Home
A lightweight plugin for players to set their homes.
3.8MSueta