Skip to content

Commit

Permalink
added fire flags!
Browse files Browse the repository at this point in the history
bukkit listeners! (don't work since there is a bug on nukkit)
  • Loading branch information
Raffa50 committed Dec 30, 2019
1 parent 2b8f2b9 commit 85958e7
Show file tree
Hide file tree
Showing 11 changed files with 395 additions and 299 deletions.
402 changes: 206 additions & 196 deletions .idea/workspace.xml

Large diffs are not rendered by default.

5 changes: 0 additions & 5 deletions src/main/java/aldrigos/mc/worldguard/Constants.java

This file was deleted.

17 changes: 16 additions & 1 deletion src/main/java/aldrigos/mc/worldguard/FlagType.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package aldrigos.mc.worldguard;

import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;

public enum FlagType {
Expand All @@ -14,5 +15,19 @@ public enum FlagType {
@SerializedName("damage-animals")
Damage_animals,
@SerializedName("explosions")
Explosions
Explosions,
@SerializedName("lighter")
Lighter,
@SerializedName("fire-spread")
Fire_spread,
@SerializedName("lava-fire")
Lava_fire
;

private static Gson json = new Gson();

@Override
public String toString(){
return json.toJson(this);
}
}
38 changes: 38 additions & 0 deletions src/main/java/aldrigos/mc/worldguard/Messages.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package aldrigos.mc.worldguard;

import cn.nukkit.command.CommandSender;
import cn.nukkit.utils.TextFormat;

public enum Messages {
NO_PERM(TextFormat.RED+"[WG]No permission for %s"),
PARAM_MISS(TextFormat.RED+"[WG]Missing parameter. Usage: %s"),
PLAYERCMD("[WG]This is a player command!"),
NO_SELECTION(TextFormat.RED+"[WG]No selection was made"),
REGION_EXIST(TextFormat.RED+"[WG]Region %s already exist"),
REGION_NOT_EXIST(TextFormat.RED+"[WG]Region %s doesn't exist"),
REGION_CREATED(TextFormat.GREEN+"[WG]Region %s created"),
REGION_UPDATED(TextFormat.YELLOW+"[WG]Region %s updated"),
REGION_PROTECTED(TextFormat.RED+"[WG]Region is protected"),
REGION_NAME_INVALID(TextFormat.RED+"[WG]Invalid region name %s"),
FLAG_INVALID(TextFormat.RED+"[WG]Flag: %s is invalid"),
FLAG_MOD_INVALID(TextFormat.RED+"[WG]Invalid flag modifier: %s"),
FLAG_ADDED(TextFormat.GREEN+"[WG]Region %s flag %s %s added"),
FLAG_LIST(TextFormat.YELLOW+"[WG]Available flags: %s"),
FLAG_DENIED(TextFormat.RED+"[WG]%s is denied in this region")
;

private final String text;

Messages(String msg){
text = msg +TextFormat.RESET;
}

@Override
public String toString() {
return text;
}

public void send(CommandSender to, Object... args){
to.sendMessage(String.format(this.toString(), args));
}
}
32 changes: 20 additions & 12 deletions src/main/java/aldrigos/mc/worldguard/commands/FlagsCommands.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,21 @@ public FlagsCommands(WorldGuardPlugin p){
rgm = p.RegionManager;
}

public boolean getFlags(CommandSender sender, LinkedList<String> largs) {
public boolean getFlags(CommandSender sender, LinkedList<String> args) {
if(!sender.hasPermission("wg.rg.flags")){
sender.sendMessage(TextFormat.RED+"[WG]No permission for wg.rg.flags"+TextFormat.RESET);
Messages.NO_PERM.send(sender, "wg.rg.flags");
return false;
}

if(largs.isEmpty()) {
sender.sendMessage(TextFormat.RED+"[WG]Insufficient arguments. Usage: /rg flags <rgName>"+TextFormat.RESET);
if(args.isEmpty()) {
Messages.PARAM_MISS.send(sender, "/rg flags <rgName>");
return false;
}

String rgn = largs.peekFirst();
String rgn = args.peekFirst();
var reg = rgm.getByName(rgn);
if(reg == null){
sender.sendMessage(TextFormat.RED+"[WG]No region "+rgn+" doesn't exist"+TextFormat.RESET);
Messages.REGION_NOT_EXIST.send(sender, rgn);
return false;
}

Expand All @@ -47,19 +47,27 @@ public boolean getFlags(CommandSender sender, LinkedList<String> largs) {

public boolean flag(CommandSender sender, List<String> args) {
if(!sender.hasPermission("wg.rg.flag")){
sender.sendMessage(TextFormat.RED+"[WG]No permission for wg.rg.flag"+TextFormat.RESET);
Messages.NO_PERM.send(sender, "wg.rg.flag");
return false;
}

if(args.isEmpty()){ //list all flags
var sb = new StringBuilder();
for(var f: FlagType.values())
sb.append(f).append(" ");

Messages.FLAG_LIST.send(sender, sb.toString());
return true;
}
if(args.size() < 3){
sender.sendMessage(TextFormat.RED+"[WG]Insufficient arguments. Usage: /rg flag <region> <flag> <deny|allow>"+TextFormat.RESET);
Messages.PARAM_MISS.send(sender, "/rg flag <region> <flag> <deny|allow>");
return false;
}

String rgn = args.get(0);
var reg = rgm.getByName(rgn);
if(reg == null){
sender.sendMessage(TextFormat.RED+"[WG]No region "+rgn+" doesn't exist"+TextFormat.RESET);
Messages.REGION_NOT_EXIST.send(sender, rgn);
return false;
}

Expand All @@ -68,7 +76,7 @@ public boolean flag(CommandSender sender, List<String> args) {
FlagType flag = json.fromJson(flagName, FlagType.class);

if(flag == null){
sender.sendMessage(TextFormat.RED+"[WG]Flag: "+flagName+" doesn't exist"+TextFormat.RESET);
Messages.FLAG_INVALID.send(sender, flagName);
return false;
}

Expand All @@ -80,11 +88,11 @@ public boolean flag(CommandSender sender, List<String> args) {
reg.setAllowed(flag);
break;
default:
sender.sendMessage(TextFormat.RED+"[WG]Invalid flag modifier: "+args.get(2)+TextFormat.RESET);
Messages.FLAG_MOD_INVALID.send(sender, args.get(2));
return false;
}
Messages.FLAG_ADDED.send(sender, rgn, flagName, args.get(2));

sender.sendMessage(TextFormat.DARK_GREEN+"[WG]Region "+rgn+" flag "+flagName+" added"+TextFormat.RESET);
return true;
}
}
39 changes: 23 additions & 16 deletions src/main/java/aldrigos/mc/worldguard/commands/RegionCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Map;
import java.util.regex.Pattern;

public class RegionCommand extends Command {
public final RegionManager rgm;
Expand All @@ -26,7 +27,7 @@ public RegionCommand(WorldGuardPlugin p){

private boolean list(CommandSender sender) {
if(!sender.hasPermission("wg.rg.list")){
sender.sendMessage(TextFormat.RED+"[WG]No permission for wg.rg.list"+TextFormat.RESET);
Messages.NO_PERM.send(sender, "wg.rg.list");
return false;
}

Expand All @@ -44,17 +45,17 @@ private boolean list(CommandSender sender) {

private boolean create(CommandSender sender, LinkedList<String> args) {
if(!sender.hasPermission("wg.rg.create")){
sender.sendMessage(TextFormat.RED+"[WG]No permission for wg.rg.create"+TextFormat.RESET);
Messages.NO_PERM.send(sender, "wg.rg.create");
return false;
}

if(args.isEmpty()){
sender.sendMessage("[WG]Missing parameter <rgName>. Usage: /rg create <rgName>");
Messages.PARAM_MISS.send(sender, "/rg create <rgName>");
return false;
}

if(!sender.isPlayer()){
sender.sendMessage("[WG]This is a player command!");
Messages.PLAYERCMD.send(sender);
return false;
}
var player = (Player)sender;
Expand All @@ -67,36 +68,42 @@ private boolean create(CommandSender sender, LinkedList<String> args) {

var cuboid = selection.get(player.getId());
if(cuboid == null || cuboid.P1 == null || cuboid.P2 == null){
player.sendMessage("[WG]No selection was made");
Messages.NO_SELECTION.send(player);
return false;
}

String rgn = args.peekFirst();
//check valid name
if(!rgn.matches("[a-zA-Z][a-zA-Z0-9\\-_]*")){
Messages.REGION_NAME_INVALID.send(sender, rgn);
return false;
}

try {
rgm.add(worldId, new Region(cuboid, rgn, player.getId()));
} catch (AlreadyExistException e) {
player.sendMessage("[WG]Region "+rgn+" already exist");
Messages.REGION_EXIST.send(player, rgn);
}

sender.sendMessage(TextFormat.YELLOW+"[WG]Region "+rgn+" created"+TextFormat.RESET);
Messages.REGION_CREATED.send(player, rgn);
return true;
}

private boolean delete(CommandSender sender, LinkedList<String> args){
if(!sender.hasPermission("wg.rg.delete")){
sender.sendMessage(TextFormat.RED+"[WG]No permission for wg.rg.delete"+TextFormat.RESET);
Messages.NO_PERM.send(sender, "wg.rg.delete");
return false;
}

if(args.isEmpty()){
sender.sendMessage(TextFormat.RED+"[WG]Missing parameter. Usage: /rg delete <rgName>"+TextFormat.RESET);
Messages.PARAM_MISS.send(sender, "/rg delete <rgName>");
return false;
}

String rgn = args.getFirst();
var reg = rgm.getByName(rgn);
if(reg == null){
sender.sendMessage(TextFormat.RED+"[WG]No region "+rgn+" doesn't exist"+TextFormat.RESET);
Messages.REGION_NOT_EXIST.send(sender, rgn);
return false;
}

Expand Down Expand Up @@ -132,36 +139,36 @@ public boolean execute(CommandSender sender, String cmd, String[] args) {

private boolean update(CommandSender sender, LinkedList<String> args) {
if(!sender.hasPermission("wg.rg.update")){
sender.sendMessage(TextFormat.RED+"[WG]No permission for wg.rg.update"+TextFormat.RESET);
Messages.NO_PERM.send(sender, "wg.rg.update");
return false;
}

if(args.isEmpty()){
sender.sendMessage(TextFormat.RED+"[WG]Missing parameter. Usage: /rg update <rgName>"+TextFormat.RESET);
Messages.PARAM_MISS.send(sender, "/rg update <rgName>");
return false;
}

if(!sender.isPlayer()){
sender.sendMessage("[WG]This is a player command!");
Messages.PLAYERCMD.send(sender);
return false;
}
var player = (Player)sender;

String rgn = args.pop();
var reg = rgm.getByName(rgn);
if(reg == null){
sender.sendMessage(TextFormat.RED+"[WG]No region "+rgn+" doesn't exist"+TextFormat.RESET);
Messages.REGION_NOT_EXIST.send(sender, rgn);
return false;
}

var cuboid = selection.get(player.getId());
if(cuboid == null || cuboid.P1 == null || cuboid.P2 == null){
player.sendMessage("[WG]No selection was made");
Messages.NO_SELECTION.send(player);
return false;
}

reg.set(cuboid);
player.sendMessage("[WG]Region updated");
Messages.REGION_UPDATED.send(player, rgn);

return true;
}
Expand Down
29 changes: 27 additions & 2 deletions src/main/java/aldrigos/mc/worldguard/listeners/BlockListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import cn.nukkit.Player;
import cn.nukkit.event.*;
import cn.nukkit.event.block.*;
import cn.nukkit.item.ItemID;
import cn.nukkit.utils.TextFormat;

import java.util.Map;
Expand Down Expand Up @@ -31,16 +32,16 @@ public void onPlace(BlockPlaceEvent e){
return;

if(region.isDenied(FlagType.Block_place)) {
e.getPlayer().sendMessage(TextFormat.RED+"[WG]Region is protected"+TextFormat.RESET);
e.setCancelled();
Messages.REGION_PROTECTED.send(e.getPlayer());
}
}

@EventHandler
public void onBreak(BlockBreakEvent e){
var player = e.getPlayer();
//check if player has wg rg stick
if(player.isCreative() && e.getItem().getId() == Constants.Stick){
if(player.isCreative() && e.getItem().getId() == ItemID.STICK){
var clickPosition = e.getBlock().getLocation();
if(!selection.containsKey(player.getId()))
selection.put(player.getId(), new Cuboid());
Expand All @@ -61,4 +62,28 @@ public void onBreak(BlockBreakEvent e){
e.setCancelled();
}
}

@EventHandler
public void onIgnite(BlockIgniteEvent e){
var reg = rgm.getBlockRegion(e.getBlock().getLocation());
if(reg == null)
return;

switch(e.getCause()){
case FLINT_AND_STEEL:
if(reg.isDenied(FlagType.Lighter)) {
e.setCancelled();
var player = (Player)e.getEntity();
Messages.REGION_PROTECTED.send(player);
}
break;
case SPREAD:
if(reg.isDenied(FlagType.Fire_spread))
e.setCancelled();
break;
case LAVA:
if(reg.isDenied(FlagType.Lava_fire))
e.setCancelled();
}
}
}
Loading

0 comments on commit 85958e7

Please sign in to comment.