Author SHA1 Message Date
Ryder Belserion dea24dd805 Add initial work on new flag 2025-02-17 10:41:25 -05:00
12 changed files with 174 additions and 16 deletions

No files matched your search

+4 -2
View File
@@ -13,17 +13,19 @@ rootProject.description = "A plugin that adds simple worldguard flags."
repositories {
maven("https://repo.papermc.io/repository/maven-public")
maven("https://repo.crazycrew.us/libraries")
maven("https://repo.crazycrew.us/releases")
maven("https://maven.enginehub.org/repo")
}
dependencies {
compileOnly(libs.vital.paper)
compileOnly(libs.fusion.paper)
compileOnly(libs.worldguard)
compileOnly(libs.paper)
compileOnly(libs.jalu)
}
java {
+13 -8
View File
@@ -6,14 +6,16 @@ shadow = { id = "com.gradleup.shadow", version.ref = "shadow" }
[versions]
# Paper API
paper = "1.21.1-R0.1-SNAPSHOT"
paper = "1.21.4-R0.1-SNAPSHOT"
velocity = "3.3.0-SNAPSHOT"
minecraft = "1.21.1"
minecraft = "1.21.4"
brigadier = "1.3.10"
# Vital API
vital-common = "0.0.6"
vital-paper = "1.0.6"
# Fusion API
fusion = "0.18.1"
# Other API
jalu = "1.4.3"
# Gradle Plugins
runPaper = "2.3.0"
@@ -33,6 +35,9 @@ paper = { module = "io.papermc.paper:paper-api", version.ref = "paper" }
worldguard = { group = "com.sk89q.worldguard", name = "worldguard-bukkit", version = "7.1.0-SNAPSHOT" }
# Vital API
vital-common = { module = "com.ryderbelserion.vital:common", version.ref = "vital-common" }
vital-paper = { module = "com.ryderbelserion.vital:paper", version.ref = "vital-paper" }
# Fusion API
fusion-paper = { module = "com.ryderbelserion.fusion:fusion-paper", version.ref = "fusion" }
fusion-core = { module = "com.ryderbelserion.fusion:fusion-core", version.ref = "fusion" }
# Other API
jalu = { module = "ch.jalu:configme", version.ref = "jalu" }
@@ -1,5 +1,6 @@
package com.ryderbelserion.simpleflags;
import com.ryderbelserion.simpleflags.enums.Plugins;
import io.papermc.paper.plugin.loader.PluginClasspathBuilder;
import io.papermc.paper.plugin.loader.PluginLoader;
import io.papermc.paper.plugin.loader.library.impl.MavenLibraryResolver;
@@ -14,11 +15,13 @@ public class LibraryLoader implements PluginLoader {
public void classloader(@NotNull PluginClasspathBuilder classpathBuilder) {
MavenLibraryResolver resolver = new MavenLibraryResolver();
resolver.addDependency(new Dependency(new DefaultArtifact("com.ryderbelserion.vital:paper:1.0.6"), null));
resolver.addRepository(new RemoteRepository.Builder("crazycrew-libraries", "default", "https://repo.crazycrew.us/libraries").build());
resolver.addRepository(new RemoteRepository.Builder("paper", "default", "https://repo.papermc.io/repository/maven-public").build());
resolver.addRepository(new RemoteRepository.Builder("crazycrewReleases", "default", "https://repo.crazycrew.us/releases/").build());
resolver.addDependency(Plugins.configme.asDependency());
resolver.addDependency(Plugins.fusion.asDependency());
classpathBuilder.addLibrary(resolver);
}
}
@@ -6,8 +6,10 @@ import com.ryderbelserion.simpleflags.commands.types.CommandHelp;
import com.ryderbelserion.simpleflags.commands.types.CommandReload;
import com.ryderbelserion.simpleflags.config.ConfigManager;
import com.ryderbelserion.simpleflags.flags.FlagManager;
import com.ryderbelserion.simpleflags.flags.types.BlockFlag;
import com.ryderbelserion.simpleflags.flags.types.DrownFlag;
import com.ryderbelserion.simpleflags.flags.types.NaturalFlag;
import com.ryderbelserion.simpleflags.listeners.BlockListener;
import com.ryderbelserion.simpleflags.listeners.DrowningListener;
import com.ryderbelserion.simpleflags.listeners.NaturalListener;
import com.ryderbelserion.vital.paper.Vital;
@@ -34,7 +36,8 @@ public class SimpleFlags extends Vital {
List.of(
new DrownFlag(),
new NaturalFlag()
new NaturalFlag(),
new BlockFlag()
).forEach(this.flagManager::addFlag);
}
@@ -42,6 +45,7 @@ public class SimpleFlags extends Vital {
public void onEnable() {
getServer().getPluginManager().registerEvents(new NaturalListener(), this);
getServer().getPluginManager().registerEvents(new DrowningListener(), this);
getServer().getPluginManager().registerEvents(new BlockListener(), this);
// Register commands.
getLifecycleManager().registerEventHandler(LifecycleEvents.COMMANDS, event -> {
@@ -52,7 +56,7 @@ public class SimpleFlags extends Vital {
new CommandHelp()
).forEach(command -> root.then(command.registerPermission().literal()));
event.registrar().register(root.build(), "the base command for RedstonePvP");
event.registrar().register(root.build(), "the base command for SimpleFlags");
});
}
@@ -13,6 +13,9 @@ public class Config implements SettingsHolder {
@Comment("The flag prevent_drowning as you guessed it, it prevents drowning if enabled.")
public static final Property<Boolean> drowning_flag = newProperty("flags.drowning-flag", false);
@Comment("The flag prevent_block_placement allows you to pick blocks that can't be placed.")
public static final Property<Boolean> block_placement_flag = newProperty("flags.prevent_block_placement-flag", false);
@Comment("The flag prevent_natural_spawning prevents natural mob spawns in regions.")
public static final Property<Boolean> natural_spawning_flag = newProperty("flags.natural-spawning-flag", false);
@@ -0,0 +1,24 @@
package com.ryderbelserion.simpleflags.enums;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.graph.Dependency;
public enum Plugins {
fusion("com.ryderbelserion.fusion", "fusion-paper", "0.18.1"),
configme("ch.jalu", "configme", "1.4.3");
private final String group;
private final String id;
private final String version;
Plugins(final String group, final String id, final String version) {
this.group = group;
this.id = id;
this.version = version;
}
public Dependency asDependency() {
return new Dependency(new DefaultArtifact(String.format("%s:%s:%s", this.group, this.id, this.version)), null);
}
}
@@ -25,7 +25,7 @@ public abstract class FlagBuilder<T extends Flag> {
/**
* @return A query of regions.
*/
protected RegionQuery getQuery() {
public RegionQuery getQuery() {
return this.plugin.getRegions().createQuery();
}
@@ -9,6 +9,7 @@ import org.bukkit.damage.DamageType;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.CreatureSpawnEvent;
@SuppressWarnings("UnstableApiUsage")
public abstract class StateFlagBuilder extends FlagBuilder<StateFlag> {
@Override
@@ -0,0 +1,11 @@
package com.ryderbelserion.simpleflags.flags.builders;
import com.ryderbelserion.simpleflags.flags.FlagBuilder;
import com.sk89q.worldguard.protection.flags.SetFlag;
public abstract class StringFlagBuilder extends FlagBuilder<SetFlag<?>> {
@Override
public abstract SetFlag<?> getFlag();
}
@@ -3,6 +3,7 @@ package com.ryderbelserion.simpleflags.flags.enums;
public enum CustomFlags {
NATURAL_FLAG("prevent_natural_spawning"),
PREVENT_BLOCK_PLACEMENT("prevent_block_placement"),
DROWN_FLAG("prevent_drowning"),
CAPACITY_FLAG("max_players");
@@ -0,0 +1,50 @@
package com.ryderbelserion.simpleflags.flags.types;
import com.ryderbelserion.simpleflags.config.impl.Config;
import com.ryderbelserion.simpleflags.flags.builders.StringFlagBuilder;
import com.ryderbelserion.simpleflags.flags.enums.CustomFlags;
import com.sk89q.worldguard.protection.flags.CommandStringFlag;
import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.flags.SetFlag;
import com.sk89q.worldguard.protection.flags.registry.FlagConflictException;
import java.util.logging.Level;
@SuppressWarnings("unchecked")
public class BlockFlag extends StringFlagBuilder {
private SetFlag<String> flag;
@Override
public void register() {
if (!isEnabled()) return;
try {
getRegistry().register(this.flag = new SetFlag<>("prevent-block-placement", new CommandStringFlag(null)));
} catch (FlagConflictException exception) {
Flag<?> existingFlag = getRegistry().get("prevent-block-placement");
if (existingFlag != null) {
this.flag = (SetFlag<String>) getRegistry().get("prevent-block-placement");
return;
}
this.plugin.getLogger().log(Level.WARNING, "An error has occurred registering " + getName() + " flag.", exception);
}
}
@Override
public String getName() {
return CustomFlags.PREVENT_BLOCK_PLACEMENT.getName();
}
@Override
public SetFlag<String> getFlag() {
return this.flag;
}
@Override
public boolean isEnabled() {
return this.config.getProperty(Config.drowning_flag);
}
}
@@ -0,0 +1,54 @@
package com.ryderbelserion.simpleflags.listeners;
import com.ryderbelserion.simpleflags.SimpleFlags;
import com.ryderbelserion.simpleflags.flags.FlagManager;
import com.ryderbelserion.simpleflags.flags.builders.StringFlagBuilder;
import com.ryderbelserion.simpleflags.flags.enums.CustomFlags;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.flags.SetFlag;
import org.bukkit.block.Block;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.Set;
@SuppressWarnings("unchecked")
public class BlockListener implements Listener {
private final SimpleFlags plugin = JavaPlugin.getPlugin(SimpleFlags.class);
private final FlagManager flagManager = this.plugin.getFlagManager();
@EventHandler(ignoreCancelled = true)
public void onBlockPlace(BlockPlaceEvent event) {
final String flagName = CustomFlags.PREVENT_BLOCK_PLACEMENT.getName();
if (!this.flagManager.hasFlag(flagName)) return;
final StringFlagBuilder builder = (StringFlagBuilder) this.flagManager.getFlag(flagName);
if (!builder.isEnabled()) return;
final SetFlag<String> flag = (SetFlag<String>) builder.getFlag();
if (flag == null) return;
final Block block = event.getBlock();
if (block.isEmpty()) return;
final String material = block.getType().getKey().value();
this.plugin.getLogger().warning("Block placement for " + material);
final Set<String> materialTypes = builder.getQuery().queryValue(BukkitAdapter.adapt(block.getLocation()), WorldGuardPlugin.inst().wrapPlayer(event.getPlayer()), flag);
if (materialTypes != null && materialTypes.contains(material)) {
this.plugin.getLogger().warning("Block placement for " + material + " cancelled.");
event.setCancelled(true);
}
}
}