Skip to content
This repository was archived by the owner on Aug 12, 2025. It is now read-only.
Closed

Dev #11

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
508a419
Add hologram API and commands
mzcydev Jul 11, 2025
fad56ab
Update src/main/java/gg/nextforge/textblockitemdisplay/impl/SimpleTex…
mzcydev Jul 11, 2025
afdf624
Update src/main/java/gg/nextforge/textblockitemdisplay/TextHologram.java
mzcydev Jul 11, 2025
1000189
Update src/main/java/gg/nextforge/textblockitemdisplay/impl/SimpleTex…
mzcydev Jul 11, 2025
0205def
Update src/main/java/gg/nextforge/textblockitemdisplay/impl/SimpleTex…
mzcydev Jul 11, 2025
3c6a4fb
Update src/main/java/gg/nextforge/textblockitemdisplay/HologramManage…
mzcydev Jul 11, 2025
3216560
Update src/main/java/gg/nextforge/textblockitemdisplay/HologramManage…
mzcydev Jul 11, 2025
9882d2c
Update src/main/java/gg/nextforge/textblockitemdisplay/HologramManage…
mzcydev Jul 11, 2025
856a857
Update src/main/java/gg/nextforge/textblockitemdisplay/HologramManage…
mzcydev Jul 11, 2025
7591965
Update src/main/java/gg/nextforge/textblockitemdisplay/HologramComman…
mzcydev Jul 11, 2025
737874e
Update src/main/java/gg/nextforge/textblockitemdisplay/impl/SimpleTex…
mzcydev Jul 11, 2025
e98077f
Update src/main/java/gg/nextforge/textblockitemdisplay/impl/SimpleTex…
mzcydev Jul 11, 2025
f7c6900
Merge pull request #9 from NextForge-Development/create-textblockitem…
mzcydev Jul 11, 2025
4ac0345
Add hologram command configuration and refactor command registration
mzcydev Jul 11, 2025
9b48599
Update version to 1.1-SNAPSHOT and configure publishing repository
mzcydev Jul 12, 2025
ec5d8cc
Add NPC interaction features and event handling for actions
mzcydev Jul 12, 2025
8e23838
Update version to 2.0-SNAPSHOT in build configuration
mzcydev Jul 12, 2025
ee62d50
Refactor NPC action handling to use a map for actions and improve com…
mzcydev Jul 12, 2025
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
26 changes: 23 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ plugins {
}

group = 'gg.nextforge'
version = '1.0'
version = '2.0-SNAPSHOT'

repositories {
mavenCentral()
Expand All @@ -21,6 +21,8 @@ dependencies {
implementation "org.mozilla:rhino:1.7.14"
implementation "com.google.code.gson:gson:2.10.1"
implementation "org.bstats:bstats-bukkit:3.0.2"
testImplementation "org.junit.jupiter:junit-jupiter:5.9.3"
testImplementation "org.mockito:mockito-core:5.5.0"
}

subprojects {
Expand Down Expand Up @@ -67,11 +69,21 @@ java {
withSourcesJar()
}

javadoc {
options.encoding = 'UTF-8'
options.addStringOption('Xdoclint:none', '-quiet')
failOnError = false
}

tasks {
compileJava {
options.encoding = "UTF-8"
}

test {
useJUnitPlatform()
}

// Haupt-Versionserweiterung für plugin.yml
processResources {
filesMatching("plugin.yml") {
Expand All @@ -93,13 +105,21 @@ shadowJar {

publishing {
repositories {
mavenLocal()
maven {
name = 'NextForge'
url = uri("http://87.106.178.7:4231/releases")
allowInsecureProtocol = true
credentials {
username = "push_access"
password = project.findProperty("core_token") ?: System.getenv("CORE_TOKEN") ?: ""
}
}
}
publications {
create("mavenJava", MavenPublication) {
from components.java
groupId = project.group
artifactId = 'nextforge'
artifactId = 'nextcore'
version = project.version

pom {
Expand Down
11 changes: 9 additions & 2 deletions src/main/java/gg/nextforge/NextCorePlugin.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
package gg.nextforge;

import gg.nextforge.command.builtin.HologramCommand;
import gg.nextforge.command.builtin.NPCCommand;
import gg.nextforge.command.builtin.NextCoreCommand;
import gg.nextforge.config.ConfigFile;
import gg.nextforge.config.ConfigManager;
import gg.nextforge.console.ConsoleHeader;
import gg.nextforge.event.EventBus;
import gg.nextforge.npc.NPCListener;
import gg.nextforge.plugin.NextForgePlugin;
import gg.nextforge.scheduler.CoreScheduler;
import gg.nextforge.scheduler.ScheduledTask;
import gg.nextforge.updater.CoreAutoUpdater;
import lombok.Getter;
import org.checkerframework.checker.units.qual.N;
import org.bukkit.Bukkit;

import java.io.IOException;
import java.util.UUID;
Expand Down Expand Up @@ -48,6 +50,11 @@ public void enable(boolean isReload) {

new NextCoreCommand(this);
new NPCCommand(this, getNpcManager());
new HologramCommand(this, getHologramManager());

if (getConfigFile().getBoolean("commands.npc.enabled", true)) {
Bukkit.getPluginManager().registerEvents(new NPCListener(getNpcManager()), this);
}

ConsoleHeader.send(this);

Expand Down
156 changes: 156 additions & 0 deletions src/main/java/gg/nextforge/command/builtin/HologramCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
package gg.nextforge.command.builtin;

import gg.nextforge.NextCorePlugin;
import gg.nextforge.command.CommandContext;
import gg.nextforge.command.CommandManager;
import gg.nextforge.text.TextManager;
import gg.nextforge.textblockitemdisplay.*;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;

/**
* Command handling for hologram operations.
*/
public class HologramCommand {
private final NextCorePlugin plugin;
private final HologramManager manager;
private final TextManager text;

public HologramCommand(NextCorePlugin plugin, HologramManager manager) {
this.plugin = plugin;
this.manager = manager;
this.text = plugin.getTextManager();
if (plugin.getConfigFile().getBoolean("commands.hologram.enabled", true)) registerCommands();
}

private void registerCommands() {
CommandManager cm = plugin.getCommandManager();
cm.command("hologram")
.permission(plugin.getConfigFile().getString("commands.hologram.permission", "nextforge.command.hologram"))
.description("Manage holograms")
.executor(this::handleHelp)
.subcommand("help", this::handleHelp)
.subcommand("list", this::handleList)
.subcommand("nearby", this::handleNearby)
.subcommand("create", this::handleCreate)
.subcommand("remove", this::handleRemove)
.subcommand("copy", this::handleCopy)
.subcommand("info", this::handleInfo)
.register();
}

private void handleHelp(CommandContext ctx) {
text.send(ctx.sender(), "<gray>/hologram list</gray> - list holograms");
text.send(ctx.sender(), "<gray>/hologram create (type) (name)</gray>");
}

private void handleList(CommandContext ctx) {
for (Hologram h : manager.getHolograms()) {
text.send(ctx.sender(), " - " + h.getName());
}
}

private void handleNearby(CommandContext ctx) {
if (!(ctx.sender() instanceof Player player)) {
text.send(ctx.sender(), "Only players");
return;
}
double range = 10;
if (ctx.args().length > 0) {
try {
range = Double.parseDouble(ctx.args()[0]);
} catch (NumberFormatException e) {
text.send(ctx.sender(), "Invalid range. Please provide a valid number.");
return;
}
}
Location loc = player.getLocation();
for (Hologram h : manager.getHolograms()) {
if (h.getLocation().getWorld().equals(loc.getWorld()) &&
h.getLocation().distance(loc) <= range) {
text.send(player, " - " + h.getName());
}
}
}

private void handleCreate(CommandContext ctx) {
if (!(ctx.sender() instanceof Player player)) {
text.send(ctx.sender(), "Only players");
return;
}
if (ctx.args().length < 2) {
text.send(ctx.sender(), "Usage: /hologram create (type) (name)");
return;
}
String type = ctx.args()[0].toLowerCase();
String name = ctx.args()[1];
Location loc = player.getLocation();
switch (type) {
case "text" -> manager.createTextHologram(name, loc);
case "item" -> manager.createItemHologram(name, loc, player.getInventory().getItemInMainHand());
case "block" -> manager.createBlockHologram(name, loc, Material.STONE);
default -> {
text.send(ctx.sender(), "Unknown type");
return;
}
}
text.send(ctx.sender(), "Created hologram " + name);
}

private void handleRemove(CommandContext ctx) {
if (ctx.args().length < 1) {
text.send(ctx.sender(), "Usage: /hologram remove (name)");
return;
}
manager.remove(ctx.args()[0]);
text.send(ctx.sender(), "Removed hologram");
}

private void handleCopy(CommandContext ctx) {
if (ctx.args().length < 2) {
text.send(ctx.sender(), "Usage: /hologram copy (src) (dest)");
return;
}
Hologram src = manager.get(ctx.args()[0]);
if (src == null) {
text.send(ctx.sender(), "Not found");
return;
}
Location loc = src.getLocation();
if (src instanceof TextHologram th) {
TextHologram nh = manager.createTextHologram(ctx.args()[1], loc);
th.getLines().forEach(nh::addLine);
} else if (src instanceof ItemHologram ih) {
manager.createItemHologram(ctx.args()[1], loc, ih.getItem());
} else if (src instanceof BlockHologram bh) {
manager.createBlockHologram(ctx.args()[1], loc, bh.getBlockType());
}
text.send(ctx.sender(), "Copied hologram");
}

private void handleInfo(CommandContext ctx) {
if (ctx.args().length < 1) {
text.send(ctx.sender(), "Usage: /hologram info (name)");
return;
}
Hologram h = manager.get(ctx.args()[0]);
if (h == null) {
text.send(ctx.sender(), "Not found");
return;
}
text.send(ctx.sender(), "Name: " + h.getName());
text.send(ctx.sender(), "Location: " + h.getLocation().toVector());
if (h instanceof TextHologram th) {
text.send(ctx.sender(), "Lines: " + th.getLines().size());
}
if (h instanceof ItemHologram ih) {
ItemStack item = ih.getItem();
text.send(ctx.sender(), "Item: " + item.getType());
}
if (h instanceof BlockHologram bh) {
text.send(ctx.sender(), "Block: " + bh.getBlockType());
}
}
}
Loading
Loading