Cleaned tracked files and applied .gitignore + better filterhoppers
All checks were successful
Gitea Actions Demo / Build-Gradle (push) Successful in 2m56s
All checks were successful
Gitea Actions Demo / Build-Gradle (push) Successful in 2m56s
This commit is contained in:
Binary file not shown.
@@ -1,2 +0,0 @@
|
||||
#Wed Jul 30 01:48:01 CEST 2025
|
||||
gradle.version=8.14.2
|
||||
Binary file not shown.
@@ -1,2 +0,0 @@
|
||||
Command: /opt/homebrew/Cellar/openjdk/23.0.2/libexec/openjdk.jdk/Contents/Home/bin/java -Xmx1G -classpath /Users/janik/.gradle/caches/modules-2/files-2.1/net.fabricmc/tiny-remapper/0.11.1/6c1f29838864ba8f495855edfc8ef17706fedb5d/tiny-remapper-0.11.1-fat.jar net.fabricmc.tinyremapper.Main /Users/janik/Desktop/MCPlugins/environmentex-1.0-SNAPSHOT.jar /Users/janik/Desktop/MCPlugins/environmentex/build/libs/environmentex-1.0-SNAPSHOT-reobf.jar /Users/janik/Desktop/MCPlugins/environmentex/.gradle/caches/paperweight/taskCache/reobfMappings.tiny mojang spigot /Users/janik/Desktop/MCPlugins/environmentex/.gradle/caches/paperweight/taskCache/mappedServerJar.jar --threads=1
|
||||
[INFO] Finished after 1086,27 ms.
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
3
environmentex/.vscode/settings.json
vendored
3
environmentex/.vscode/settings.json
vendored
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"java.compile.nullAnalysis.mode": "automatic"
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -1,33 +0,0 @@
|
||||
main: de.hessj.environmentex.App
|
||||
name: EnvironmentExtenderPlugin
|
||||
version: 0.1
|
||||
api-version: 1.19
|
||||
depend: [HelperPlugin]
|
||||
commands:
|
||||
test:
|
||||
description: Vote mit "Ja" für den Nachtskip
|
||||
usage: /<command>
|
||||
y:
|
||||
description: Vote mit "Ja" für den Nachtskip
|
||||
usage: /<command>
|
||||
n:
|
||||
description: Vote mit "Nein" für den Nachtskip
|
||||
usage: /<command>
|
||||
add:
|
||||
description: Setzt den Whiteliststatus auf accepted
|
||||
usage: /<command> <UUID>
|
||||
afk:
|
||||
description: Setzt den AFK Status
|
||||
usage: /<command>
|
||||
pin:
|
||||
description: ----
|
||||
usage: /<command>
|
||||
ignorevote:
|
||||
description: Setzt den Ignorevote Status
|
||||
usage: /<command>
|
||||
r3load:
|
||||
description: ----
|
||||
usage: /<command>
|
||||
quest:
|
||||
description: Zeigt die heutigen Quests an
|
||||
usage: /<command>
|
||||
Binary file not shown.
@@ -1,3 +0,0 @@
|
||||
Manifest-Version: 1.0
|
||||
paperweight-mappings-namespace: mojang
|
||||
|
||||
BIN
environmentex/gradle/wrapper/gradle-wrapper.jar
vendored
BIN
environmentex/gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
@@ -10,6 +10,7 @@ import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.scoreboard.ScoreboardManager;
|
||||
import de.hessj.helper.Helper.Type;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.TextDecoration;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.World;
|
||||
@@ -77,7 +78,7 @@ public class App extends JavaPlugin {
|
||||
public ItemStack eBottle;
|
||||
public final List<NamespacedKey> recipeKeys = new ArrayList<>();
|
||||
public NamespacedKey nskHopper;
|
||||
private final String name = "Trichterfilter";
|
||||
private final String filter_hopper_name = "Filtertrichter";
|
||||
public static boolean coordinateRunner = false;
|
||||
public PluginManager pM = Bukkit.getPluginManager();
|
||||
public HashMap<Player, Boolean> hmActionbar = new HashMap<Player, Boolean>();
|
||||
@@ -90,7 +91,7 @@ public NamespacedKey nskHopper;
|
||||
if (!is.hasItemMeta()) return false;
|
||||
if (is.getItemMeta().displayName() == null) return false;
|
||||
|
||||
return is.getItemMeta().displayName().toString().contains(name);
|
||||
return is.getItemMeta().displayName().toString().contains(filter_hopper_name);
|
||||
}
|
||||
|
||||
public String getHopperConfigPath(org.bukkit.Location loc) {
|
||||
@@ -102,9 +103,9 @@ public NamespacedKey nskHopper;
|
||||
|
||||
ItemStack hopper = new ItemStack(Material.HOPPER);
|
||||
ItemMeta im = hopper.getItemMeta();
|
||||
im.displayName(Component.text(ChatColor.WHITE + name));
|
||||
im.displayName(Component.text(filter_hopper_name).decoration(TextDecoration.ITALIC, false));
|
||||
im.lore(Arrays.asList(
|
||||
Component.text(ChatColor.GRAY + "STRG + Rechtsklick auf den platzierten Filter"),
|
||||
Component.text(ChatColor.GRAY + "SHIFT + Rechtsklick auf den platzierten Filter"),
|
||||
Component.text(ChatColor.GRAY + "ohne Item in der Hand, um den Filter zu öffnen")
|
||||
));
|
||||
im.setCustomModelData(1000021);
|
||||
@@ -168,7 +169,7 @@ public NamespacedKey nskHopper;
|
||||
|
||||
|
||||
main = this;
|
||||
|
||||
BetterHoppers.restoreAllDisplays();
|
||||
nskPokeball = new NamespacedKey(this, "R3SPokeball");
|
||||
nskUsedPokeball = new NamespacedKey(this, "R3SUsedPokeball");
|
||||
nskEntityPokeball = new NamespacedKey(this, "R3SEntity");
|
||||
|
||||
@@ -2,11 +2,15 @@
|
||||
package de.hessj.environmentex;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.logging.Level;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Display.Billboard;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.ItemDisplay;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
@@ -22,12 +26,17 @@ import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.InventoryHolder;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.util.Transformation;
|
||||
import org.joml.AxisAngle4f;
|
||||
import org.joml.Vector3f;
|
||||
import de.hessj.helper.Helper;
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
public class BetterHoppers implements Listener {
|
||||
|
||||
private static final Component inventoryName = Component.text("Items zum filtern:");
|
||||
private static final Component inventoryName = Component.text("Diese Items durchlassen:");
|
||||
static Material displayHopper = Material.REDSTONE;
|
||||
|
||||
@EventHandler
|
||||
public void onLogin(final PlayerJoinEvent event) {
|
||||
@@ -43,6 +52,7 @@ public class BetterHoppers implements Listener {
|
||||
App.main.getConfig()
|
||||
.set(App.main.getHopperConfigPath(loc), Helper.itemStackArrayToBase64(newHopperInv.getContents()));
|
||||
App.main.saveConfig();
|
||||
spawnDisplay(loc);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,21 +61,24 @@ public class BetterHoppers implements Listener {
|
||||
try {
|
||||
if (e.getPlayer().getInventory().getItemInMainHand().getType() == Material.AIR
|
||||
&& e.getAction() == Action.RIGHT_CLICK_BLOCK
|
||||
&& e.getPlayer().isSneaking()
|
||||
&& e.getClickedBlock() != null
|
||||
&& e.getPlayer().isSneaking()
|
||||
&& e.getClickedBlock().getType() == Material.HOPPER) {
|
||||
|
||||
e.setCancelled(true);
|
||||
|
||||
Entity hopperDisplay = getNearbyHopperDisplay(e.getClickedBlock().getLocation());
|
||||
if (hopperDisplay != null) {
|
||||
final Location loc = e.getClickedBlock().getLocation();
|
||||
final String path = App.main.getHopperConfigPath(loc);
|
||||
|
||||
final Location loc = e.getClickedBlock().getLocation();
|
||||
final String path = App.main.getHopperConfigPath(loc);
|
||||
if (App.main.getConfig().contains(path)) {
|
||||
e.setCancelled(true);
|
||||
final InventoryHolder invHolder = (InventoryHolder) e.getClickedBlock().getState();
|
||||
final Inventory hopperInv = Bukkit.createInventory(invHolder, 9, inventoryName);
|
||||
|
||||
if (App.main.getConfig().contains(path)) {
|
||||
final InventoryHolder invHolder = (InventoryHolder) e.getClickedBlock().getState();
|
||||
final Inventory hopperInv = Bukkit.createInventory(invHolder, 9, inventoryName);
|
||||
|
||||
hopperInv.setContents(Helper.itemStackArrayFromBase64(App.main.getConfig().getString(path)));
|
||||
e.getPlayer().openInventory(hopperInv);
|
||||
hopperInv.setContents(Helper.itemStackArrayFromBase64(App.main.getConfig().getString(path)));
|
||||
e.getPlayer().openInventory(hopperInv);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (IllegalArgumentException | IOException ex) {
|
||||
@@ -116,38 +129,113 @@ public class BetterHoppers implements Listener {
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockBreak(final BlockBreakEvent e) {
|
||||
if (e.getPlayer() != null && e.getPlayer().getGameMode() == GameMode.SURVIVAL) {
|
||||
final Block block = e.getBlock();
|
||||
if (block.getType() == Material.HOPPER) {
|
||||
if (removeFilterHopperData(block)) {
|
||||
e.setCancelled(true);
|
||||
public void onBlockBreak(BlockBreakEvent e) {
|
||||
Location loc = e.getBlock().getLocation();
|
||||
Entity display = getNearbyHopperDisplay(loc);
|
||||
if (display != null) {
|
||||
display.remove();
|
||||
e.getBlock().setType(Material.AIR);
|
||||
String basePath = App.main.getHopperConfigPath(loc).replace(".filterinventory", "");
|
||||
App.main.getConfig().set(basePath, null);
|
||||
App.main.saveConfig();
|
||||
e.setCancelled(true);
|
||||
loc.getWorld().dropItemNaturally(loc, new ItemStack(Material.HOPPER));
|
||||
loc.getWorld().dropItemNaturally(loc, new ItemStack(Material.COMPARATOR));
|
||||
}
|
||||
}
|
||||
|
||||
private Entity getNearbyHopperDisplay(Location loc) {
|
||||
for (Entity entity : loc.getWorld().getNearbyEntities(loc.toCenterLocation(), 0.5, 0.5, 0.5)) {
|
||||
if (entity instanceof ItemDisplay display) {
|
||||
ItemStack item = display.getItemStack();
|
||||
if (item != null && item.getType() == displayHopper) {
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
if (meta != null && meta.hasCustomModelData() && meta.getCustomModelData() == 1001) {
|
||||
return display;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityExplode(final EntityExplodeEvent e) {
|
||||
for (final Block block : e.blockList()) {
|
||||
if (block.getType() == Material.HOPPER) {
|
||||
removeFilterHopperData(block);
|
||||
Location loc = block.getLocation();
|
||||
Entity display = getNearbyHopperDisplay(loc);
|
||||
if (display != null) {
|
||||
display.remove();
|
||||
block.setType(Material.AIR);
|
||||
String basePath = App.main.getHopperConfigPath(loc).replace(".filterinventory", "");
|
||||
App.main.getConfig().set(basePath, null);
|
||||
App.main.saveConfig();
|
||||
block.setType(Material.AIR);
|
||||
loc.getWorld().dropItemNaturally(loc, new ItemStack(Material.HOPPER));
|
||||
loc.getWorld().dropItemNaturally(loc, new ItemStack(Material.COMPARATOR));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean removeFilterHopperData(final Block block) {
|
||||
final Location loc = block.getLocation();
|
||||
final String path = App.main.getHopperConfigPath(loc).replace(".filterinventory", "");
|
||||
if (App.main.getConfig().contains(path + ".filterinventory")) {
|
||||
App.main.getConfig().set(path, null);
|
||||
App.main.saveConfig();
|
||||
block.setType(Material.AIR);
|
||||
block.getWorld().dropItemNaturally(loc, new ItemStack(Material.HOPPER));
|
||||
block.getWorld().dropItemNaturally(loc, new ItemStack(Material.COMPARATOR));
|
||||
return true;
|
||||
public static void spawnDisplay(Location loc) {
|
||||
World world = loc.getWorld();
|
||||
if (world == null)
|
||||
return;
|
||||
|
||||
// Center location of the hopper
|
||||
Location baseLoc = loc.toCenterLocation();
|
||||
|
||||
// Create the item stack to use for all displays
|
||||
ItemStack fakeHopperItem = new ItemStack(displayHopper);
|
||||
ItemMeta meta = fakeHopperItem.getItemMeta();
|
||||
if (meta != null) {
|
||||
meta.setCustomModelData(1001); // Your resource pack model
|
||||
meta.displayName(Component.text("§8Filter Hopper"));
|
||||
fakeHopperItem.setItemMeta(meta);
|
||||
}
|
||||
|
||||
Location offsetLoc = baseLoc.clone().add(0, 0.3, 0);
|
||||
|
||||
ItemDisplay display = world.spawn(offsetLoc, ItemDisplay.class, entity -> {
|
||||
entity.setItemStack(fakeHopperItem);
|
||||
entity.setBillboard(Billboard.FIXED);
|
||||
entity.setGlowing(false);
|
||||
entity.setGravity(false);
|
||||
entity.setPersistent(true);
|
||||
entity.setTransformation(new Transformation(
|
||||
new Vector3f(0f, .05f, .51f), // translation
|
||||
new AxisAngle4f(0f, 0f, 1f, 0f), // rotation
|
||||
new Vector3f(0.4f, 0.4f, 0.4f), // scale (adjust this as needed)
|
||||
new AxisAngle4f(0f, 0f, 0f, 1f) // left rotation
|
||||
));
|
||||
});
|
||||
|
||||
// Optional: Save UUIDs per face if you want to remove later
|
||||
String path = App.main.getHopperConfigPath(loc).replace(".filterinventory", "") + ".display_uuid";
|
||||
App.main.getConfig().set(path, display.getUniqueId().toString());
|
||||
App.main.saveConfig();
|
||||
}
|
||||
|
||||
public static void restoreAllDisplays() {
|
||||
for (String key : App.main.getConfig().getKeys(true)) {
|
||||
if (!key.endsWith(".display_uuid"))
|
||||
continue;
|
||||
|
||||
String locKey = key.replace("hopper.", "").replace(".display_uuid", "");
|
||||
String[] parts = locKey.split(":");
|
||||
try {
|
||||
World world = Bukkit.getWorld(parts[0]);
|
||||
int x = Integer.parseInt(parts[1]);
|
||||
int y = Integer.parseInt(parts[2]);
|
||||
int z = Integer.parseInt(parts[3]);
|
||||
Location loc = new Location(world, x, y, z);
|
||||
spawnDisplay(loc);
|
||||
} catch (Exception ex) {
|
||||
Bukkit.getLogger().log(Level.WARNING, "Failed to restore display for: " + key);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
|
||||
Reference in New Issue
Block a user