A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy
1
package de.typable.minecrafthub;3
import java.io.File;4
import java.io.IOException;5
import java.nio.file.Files;6
import java.nio.file.Paths;8
import com.google.gson.Gson;11
public class Config12
{13
private static final Gson gson = new Gson();15
public static Config open(String path)16
{17
File file = new File(path);19
try20
{21
if(!file.exists())22
{23
file.createNewFile();24
}26
String content = Files.readString(Paths.get(path));28
if(content != null)29
{30
// TODO: convert string to json object31
}32
}33
catch(IOException ex)34
{35
ex.printStackTrace();36
}38
return new Config();39
}40
}
30
import de.typable.minecrafthub.event.EventListener;31
import de.typable.minecrafthub.event.LeavesDecayListener;32
import de.typable.minecrafthub.event.StandbyListener;33
import de.typable.minecrafthub.game.kit.KitGame;33
import de.typable.minecrafthub.util.Util;
43
private LeavesDecayListener leavesDecayListener;44
private EventListener eventListener;47
private KitGame kitGame;46
private Plugin plugin;47
private BukkitTask task;
71
eventListener = new EventListener();72
pluginManager.registerEvents(eventListener, this);77
kitGame = new KitGame();78
this.getCommand("kit").setExecutor(kitGame);79
pluginManager.registerEvents(kitGame, this);74
task = Bukkit.getScheduler().runTaskAsynchronously(this, new Runnable()75
{
18
import org.bukkit.event.block.Action;19
import org.bukkit.event.block.BlockBreakEvent;20
import org.bukkit.event.player.PlayerInteractEvent;21
import org.bukkit.util.Vector;22
import org.spigotmc.event.entity.EntityDismountEvent;24
import de.typable.minecrafthub.util.Util;
113
}114
}116
Location location = entity.getLocation();117
location.add(0, 1, 0);119
for(Entity passenger : entity.getPassengers()) {120
location.setPitch(passenger.getLocation().getPitch());121
location.setYaw(passenger.getLocation().getYaw());122
passenger.teleport(location);123
}125
entity.remove();126
}127
}
3
import org.bukkit.ChatColor;4
import org.bukkit.Material;5
import org.bukkit.block.Block;6
import org.bukkit.block.BlockFace;7
import org.bukkit.block.data.Ageable;8
import org.bukkit.block.data.BlockData;9
import org.bukkit.block.data.Directional;10
import org.bukkit.entity.ArmorStand;11
import org.bukkit.entity.EntityType;12
import org.bukkit.entity.Player;
20
import org.bukkit.event.player.AsyncPlayerChatEvent;21
import org.bukkit.event.player.PlayerInteractAtEntityEvent;22
import org.bukkit.event.player.PlayerInteractEvent;23
import org.bukkit.inventory.EquipmentSlot;24
import org.bukkit.inventory.ItemStack;25
import org.bukkit.potion.PotionEffect;26
import org.bukkit.potion.PotionEffectType;28
import de.typable.minecrafthub.util.Util;31
public class EventListener implements Listener32
{33
@EventHandler34
public void onPlayerInteract(PlayerInteractEvent event)35
{37
Player player = event.getPlayer();39
if(event.getAction() == Action.PHYSICAL)40
{41
if(event.getClickedBlock() != null)
46
}47
}48
}50
// farming with right click52
EquipmentSlot equip = event.getHand();53
if(equip.equals(EquipmentSlot.HAND)) {55
if(event.getAction() == Action.RIGHT_CLICK_BLOCK)56
{57
Block block = event.getClickedBlock();59
if(block == null)60
{61
return;62
}64
Material material = block.getType();66
if(player.isSneaking())67
{68
return;69
}71
BlockData blockdata = block.getBlockData();73
if(blockdata instanceof Ageable)74
{76
Ageable ageable = (Ageable) blockdata;78
if(Util.isFarmable(material) && ageable.getAge() == ageable.getMaximumAge())79
{81
if(blockdata instanceof Directional)82
{83
Directional directional = (Directional) blockdata;84
BlockFace blockface = directional.getFacing();86
block.breakNaturally(player.getItemInUse());87
block.setType(material);88
directional = (Directional) blockdata;89
ageable.setAge(0);90
directional.setFacing(blockface);91
block.setBlockData(blockdata);92
}93
else94
{95
block.breakNaturally(player.getItemInUse());96
block.setType(material);97
}99
}101
}102
}104
}105
}107
@EventHandler
1
package de.typable.minecrafthub.game;3
import java.util.HashMap;4
import java.util.Iterator;5
import java.util.Map;6
import java.util.Map.Entry;8
import org.bukkit.command.CommandExecutor;9
import org.bukkit.entity.Player;10
import org.bukkit.event.Listener;12
import de.typable.minecrafthub.Config;13
import de.typable.minecrafthub.constant.DefaultConstants;15
public abstract class Game implements CommandExecutor, Listener16
{17
private Map<Player, PlayerState> players;18
private Config config;20
public Game()21
{22
players = new HashMap<>();23
}25
public void join(Player player)26
{27
if(players.containsKey(player))28
{29
player.sendMessage(DefaultConstants.Messages.ALREADY_INGAME);31
return;32
}34
players.put(player, PlayerState.of(player));35
}37
public void leave(Player player)38
{39
PlayerState playerState = players.get(player);41
if(playerState == null)42
{43
player.sendMessage(DefaultConstants.Messages.NOT_INGAME);45
return;46
}48
playerState.apply(player);49
players.remove(player);50
}52
public void leaveAll()53
{54
Iterator<Entry<Player, PlayerState>> iterator = players.entrySet().iterator();56
while(iterator.hasNext())57
{58
Entry<Player, PlayerState> entry = iterator.next();59
Player player = entry.getKey();60
PlayerState playerState = entry.getValue();62
playerState.apply(player);63
iterator.remove();64
}65
}67
public boolean isIngame(Player player)68
{69
return player != null && players.containsKey(player);70
}72
public Map<Player, PlayerState> getPlayers()73
{74
return players;75
}77
public void setConfig(Config config)78
{79
this.config = config;80
}82
public Config getConfig()83
{84
return config;85
}86
}
1
package de.typable.minecrafthub.game;3
import java.util.UUID;5
import org.bukkit.GameMode;6
import org.bukkit.Location;7
import org.bukkit.entity.Player;8
import org.bukkit.inventory.ItemStack;10
public class PlayerState11
{12
private UUID uuid;13
private Double health;14
private Integer foodLevel;15
private Integer level;16
private Float exp;17
private Location location;18
private GameMode gameMode;19
private ItemStack[] equipment;21
public static PlayerState of(Player player)22
{23
PlayerState playerState = new PlayerState();25
playerState.setUUID(player.getUniqueId());26
playerState.setHealth(player.getHealth());27
playerState.setFoodLevel(player.getFoodLevel());28
playerState.setLevel(player.getLevel());29
playerState.setExp(player.getExp());30
playerState.setLocation(player.getLocation());31
playerState.setGameMode(player.getGameMode());32
playerState.setEquipment(player.getInventory().getContents());34
return playerState;35
}37
public void apply(Player player)38
{39
if(!player.getUniqueId().equals(uuid))40
{41
throw new IllegalArgumentException("Only the player with the same UUID as the state can recieve it!");42
}44
player.setHealth(health);45
player.setFoodLevel(foodLevel);46
player.setLevel(level);47
player.setExp(exp);48
player.teleport(location);49
player.setGameMode(gameMode);50
player.getInventory().setContents(equipment);51
// equipment52
}54
public UUID getUUID()55
{56
return uuid;57
}59
public void setUUID(UUID uuid)60
{61
this.uuid = uuid;62
}64
public Double getHealth()65
{66
return health;67
}69
public void setHealth(Double health)70
{71
this.health = health;72
}74
public Integer getFoodLevel()75
{76
return foodLevel;77
}79
public void setFoodLevel(Integer foodLevel)80
{81
this.foodLevel = foodLevel;82
}84
public Integer getLevel()85
{86
return level;87
}89
public void setLevel(Integer level)90
{91
this.level = level;92
}94
public Float getExp()95
{96
return exp;97
}99
public void setExp(Float exp)100
{101
this.exp = exp;102
}104
public Location getLocation()105
{106
return location;107
}109
public void setLocation(Location location)110
{111
this.location = location;112
}114
public GameMode getGameMode()115
{116
return gameMode;117
}119
public void setGameMode(GameMode gameMode)120
{121
this.gameMode = gameMode;122
}124
public ItemStack[] getEquipment()125
{126
return equipment;127
}129
public void setEquipment(ItemStack[] equipment)130
{131
this.equipment = equipment;132
}133
}
1
package de.typable.minecrafthub.game.kit;3
import org.bukkit.GameMode;4
import org.bukkit.command.Command;5
import org.bukkit.command.CommandSender;6
import org.bukkit.entity.Player;7
import org.bukkit.event.EventHandler;8
import org.bukkit.event.block.BlockBreakEvent;10
import de.typable.minecrafthub.game.Game;12
public class KitGame extends Game13
{14
public KitGame()15
{16
super();17
}19
@Override20
public boolean onCommand(CommandSender sender, Command command, String label, String[] args)21
{22
if(sender instanceof Player)23
{24
Player player = (Player) sender;26
if(args.length > 0)27
{28
if(args[0].equals("join"))29
{30
join(player);31
}33
if(args[0].equals("leave"))34
{35
leave(player);36
}37
}38
}40
return false;41
}43
@Override44
public void join(Player player)45
{46
super.join(player);47
player.setGameMode(GameMode.SURVIVAL);48
player.getInventory().clear();49
}51
@EventHandler52
public void onBlockBreak(BlockBreakEvent event)53
{54
if(isIngame(event.getPlayer()))55
{56
event.setCancelled(true);57
}58
}59
}
132
{133
return material == Material.AIR || material == Material.CAVE_AIR || material == Material.VOID_AIR;134
}136
public static boolean isFarmable(Material material)137
{138
return material == Material.WHEAT || material == Material.CARROTS || material == Material.POTATOES || material == Material.BEETROOTS || material == Material.NETHER_WART || material == Material.COCOA;139
}140
}