Skip to content
This repository was archived by the owner on Feb 17, 2024. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,13 @@
import com.programmerdan.minecraft.simpleadminhacks.framework.HackManager;
import com.programmerdan.minecraft.simpleadminhacks.framework.commands.CommandRegistrar;
import java.util.logging.Level;

import com.programmerdan.minecraft.simpleadminhacks.framework.utilities.BuildLimit;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.PluginCommand;
import org.bukkit.configuration.serialization.ConfigurationSerialization;
import org.bukkit.entity.Player;
import vg.civcraft.mc.civmodcore.ACivMod;

Expand Down Expand Up @@ -34,6 +37,7 @@ public SimpleAdminHacks() {
@Override
public void onEnable() {
super.onEnable();
this.registerSerializations();
if (!this.config.parse()) {
setEnabled(false);
return;
Expand All @@ -51,6 +55,10 @@ public void onDisable() {
super.onDisable();
}

public void registerSerializations() {
ConfigurationSerialization.registerClass(BuildLimit.class);
}

public void registerCommand(final String identifier, final CommandExecutor executor) {
final PluginCommand command = getCommand(identifier);
if (command != null) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.programmerdan.minecraft.simpleadminhacks.configs;

import com.programmerdan.minecraft.simpleadminhacks.SimpleAdminHacks;
import com.programmerdan.minecraft.simpleadminhacks.framework.SimpleHackConfig;
import com.programmerdan.minecraft.simpleadminhacks.framework.utilities.BuildLimit;
import org.bukkit.configuration.ConfigurationSection;

import java.util.List;

public final class BuildLimitsConfig extends SimpleHackConfig {
private boolean enabled;
private BuildLimit[] buildLimits;

public BuildLimitsConfig(SimpleAdminHacks plugin, ConfigurationSection base) {
super(plugin, base);
}
public BuildLimitsConfig(ConfigurationSection base) {
super(SimpleAdminHacks.instance(), base);
}

@Override
protected void wireup(ConfigurationSection config) {
this.enabled = config.getBoolean("enabled");

if (this.enabled) {
List<?> rawList = config.getList("limits");
if (rawList != null && rawList.size() > 0) {
try {
this.buildLimits = rawList.toArray(new BuildLimit[rawList.size()]);
plugin().getLogger().info("buildlimits enabled");
} catch(ArrayStoreException ase) {
plugin().getLogger().warning("buildlimits was enabled, but is invalid");
ase.printStackTrace();
}
} else {
plugin().getLogger().warning("buildlimits was enabled, but is missing or empty");
}
} else {
plugin().getLogger().info("buildlimits disabled");
}
}

public boolean isEnabled() {
return this.enabled;
}
public BuildLimit[] getBuildLimits() {
return this.buildLimits;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package com.programmerdan.minecraft.simpleadminhacks.framework.utilities;

import org.bukkit.configuration.serialization.ConfigurationSerializable;
import org.jetbrains.annotations.NotNull;

import java.util.LinkedHashMap;
import java.util.Map;

public class BuildLimit implements ConfigurationSerializable {
private String world;
private String type;
private int min_y;
private int max_y;

public BuildLimit (String world, String type, int min_y, int max_y){
this.world = world;
this.type = type;
this.min_y = min_y;
this.max_y = max_y;
}

public String getWorld() {
return this.world;
}
public String getType() {
return this.type;
}
public int getMin_y() {
return this.min_y;
}
public int getMax_y() {
return this.max_y;
}

public void setWorld(String world) {
this.world = world;
}
public void setType(String type) {
this.type = type;
}
public void setMin_y(int min_y) {
this.min_y = min_y;
}
public void setMax_y(int max_y) {
this.max_y = max_y;
}

@NotNull
@Override
public final Map<String, Object> serialize(){
Map<String, Object> result = new LinkedHashMap<>();

result.put("world", this.world);
result.put("type", this.type);
result.put("min_y", this.min_y);
result.put("max_y", this.max_y);

return result;
}
@NotNull
public static BuildLimit deserialize(@NotNull Map<String, Object> args){
String world = "world";
String type = "altitude";
int min_y = 0;
int max_y = 0;

world = (String) args.get("world");
type = (String) args.get("type");

if(type.equals("altitude")){
if(args.containsKey("min_y")){
min_y = (Integer) args.get("min_y");
}
if(args.containsKey("max_y")){
max_y = (Integer) args.get("max_y");
}
}

return new BuildLimit(world, type, min_y, max_y);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package com.programmerdan.minecraft.simpleadminhacks.hacks;

import com.programmerdan.minecraft.simpleadminhacks.SimpleAdminHacks;
import com.programmerdan.minecraft.simpleadminhacks.configs.BuildLimitsConfig;
import com.programmerdan.minecraft.simpleadminhacks.framework.SimpleHack;
import com.programmerdan.minecraft.simpleadminhacks.framework.utilities.BuildLimit;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Location;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.jetbrains.annotations.NotNull;

public class BuildLimits extends SimpleHack<BuildLimitsConfig> implements Listener {
public BuildLimits(SimpleAdminHacks plugin, BuildLimitsConfig config) {
super(plugin, config);
}

public static BuildLimitsConfig generate (
final @NotNull SimpleAdminHacks plugin,
final @NotNull ConfigurationSection config){
return new BuildLimitsConfig(plugin, config);
}

@Override
public void onEnable(){
plugin.registerListener(this);
}

@EventHandler(priority = EventPriority.HIGHEST)
public void onBlockPlaceEvent(BlockPlaceEvent e){
if(!config.isEnabled()) return;

Player player = e.getPlayer();
Location loc = e.getBlock().getLocation();

if(!withinLimits(loc)){
e.setCancelled(true);
player.sendMessage(Component.text().content("You can not place blocks here").color(NamedTextColor.RED));
}
}

private boolean withinLimits(Location loc){
BuildLimit[] limits = config.getBuildLimits();

for (BuildLimit limit : limits){
if(limit.getWorld().equals(loc.getWorld().getName())){
if(limit.getType().equals("altitude")){
if(loc.getBlock().getY() < limit.getMax_y() && loc.getBlock().getY() > limit.getMin_y())
continue;
return false;
}
}
}

return true;
}
}
8 changes: 8 additions & 0 deletions paper/src/main/resources/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,14 @@ hacks:
- PISTON_BASE
- PISTON_STICKY_BASE
- OBSERVER
BuildLimits:
enabled: true
limits:
- ==: com.programmerdan.minecraft.simpleadminhacks.framework.utilities.BuildLimit
world: "world_nether"
type: "altitude"
min_y: -64
max_y: 128
CTAnnounce:
enabled: false
delay: 10000
Expand Down