Merge branch 'develop-textures' into develop

# Conflicts:
#	.idea/modules.xml
#	src/main/java/eu/mhsl/minecraft/pixelpics/Main.java
#	src/main/java/eu/mhsl/minecraft/pixelpics/render/raytrace/AdvancedRaytracer.java
#	src/main/java/eu/mhsl/minecraft/pixelpics/render/raytrace/DefaultRaytracer.java
#	src/main/java/eu/mhsl/minecraft/pixelpics/render/registry/AdvancedModelRegistry.java
#	src/main/resources/plugin.yml
This commit is contained in:
2025-07-12 10:05:38 +02:00
2221 changed files with 27072 additions and 74 deletions
@@ -1,11 +1,22 @@
package eu.mhsl.minecraft.pixelpics;
package eu.mhsl.minecraft.pixelpic;
import eu.mhsl.minecraft.pixelpics.commands.PixelPicsCommand;
import eu.mhsl.minecraft.pixelpics.render.render.DefaultScreenRenderer;
import eu.mhsl.minecraft.pixelpics.render.render.Renderer;
import eu.mhsl.minecraft.pixelpic.commands.PixelPicCommand;
import eu.mhsl.minecraft.pixelpic.render.render.DefaultScreenRenderer;
import eu.mhsl.minecraft.pixelpic.render.render.Renderer;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.*;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
public final class Main extends JavaPlugin {
private static Main instance;
private Renderer screenRenderer;
@@ -13,68 +24,78 @@ public final class Main extends JavaPlugin {
@Override
public void onEnable() {
instance = this;
Bukkit.getPluginCommand("pixelPics").setExecutor(new PixelPicsCommand());
//
// Bukkit.getPluginCommand("test2").setExecutor((sender, command, label, args) -> {
// if(!(sender instanceof Player player)) return false;
// Bukkit.broadcast(Component.text("HI"));
//
// Resolution.Pixels pixels = Resolution.Pixels._256P;
// Resolution.AspectRatio aspectRatio = Resolution.AspectRatio._1_1;
// Resolution resolution = new Resolution(pixels, aspectRatio);
// BufferedImage image = screenRenderer.render((Player) sender, resolution);
// Bukkit.broadcast(Component.text(image.toString()));
//
// File file = new File(getDataFolder(), "Bild" + ".png");
// try {
// getDataFolder().mkdir();
// ImageIO.write(image, "png", file);
// } catch (Exception e) {
// return true;
// }
//
// ItemStack map = new ItemStack(Material.FILLED_MAP, 1);
// MapMeta meta = (MapMeta) map.getItemMeta();
// MapView mapView = Bukkit.createMap(Bukkit.getWorlds().getFirst());
// mapView.addRenderer(new ImageMapRenderer(image, 0, 0));
// meta.setMapView(mapView);
// map.setItemMeta(meta);
// player.getInventory().addItem(map);
//
// ItemStack map2 = new ItemStack(Material.FILLED_MAP, 1);
// MapMeta meta1 = (MapMeta) map2.getItemMeta();
// MapView mapView4 = Bukkit.createMap(Bukkit.getWorlds().getFirst());
// mapView4.addRenderer(new ImageMapRenderer(image, 1, 0));
// meta1.setMapView(mapView4);
// map2.setItemMeta(meta1);
// player.getInventory().addItem(map2);
//
// ItemStack map3 = new ItemStack(Material.FILLED_MAP, 1);
// MapMeta meta2 = (MapMeta) map3.getItemMeta();
// MapView mapView3 = Bukkit.createMap(Bukkit.getWorlds().getFirst());
// mapView3.addRenderer(new ImageMapRenderer(image, 0, 1));
// meta2.setMapView(mapView3);
// map3.setItemMeta(meta2);
// player.getInventory().addItem(map3);
//
// ItemStack map4 = new ItemStack(Material.FILLED_MAP, 1);
// MapMeta meta3 = (MapMeta) map4.getItemMeta();
// MapView mapView2 = Bukkit.createMap(Bukkit.getWorlds().getFirst());
// mapView2.addRenderer(new ImageMapRenderer(image, 1, 1));
// meta3.setMapView(mapView2);
// map4.setItemMeta(meta3);
// player.getInventory().addItem(map4);
//
// player.updateInventory();
//
// return true;
// });
extractJsonResources();
Bukkit.getPluginCommand("pixelPic").setExecutor(new PixelPicCommand());
Bukkit.getPluginCommand("test").setExecutor((sender, command, label, args) -> {
Material.getMaterial("acacia_button");
Bukkit.broadcast(Component.text(Material.STONE.getBlockTranslationKey().replace("block.minecraft.", "")));
if(!(sender instanceof Player player))
throw new IllegalStateException("Dieser Command kann nur von einem Spieler ausgeführt werden!");
File blockDir = new File(getDataFolder(), "models/block");
for (File file : blockDir.listFiles()) {
String blockName = file.getName().substring(0, file.getName().lastIndexOf('.'));
Material material = Material.getMaterial(blockName.toUpperCase());
System.out.println(material);
if(material == null) {
System.out.println(blockName);
}
}
return true;
});
}
@Override
public void onDisable() {
}
public void extractJsonResources() {
String resourcePath = "models/block/"; // Pfad im JAR
File outputDir = new File(getDataFolder(), resourcePath);
if (outputDir.exists()) return;
outputDir.mkdirs();
try {
URL jarUrl = getClass().getProtectionDomain().getCodeSource().getLocation();
File jarFile = new File(jarUrl.toURI());
try (JarFile jar = new JarFile(jarFile)) {
Enumeration<JarEntry> entries = jar.entries();
while (entries.hasMoreElements()) {
JarEntry entry = entries.nextElement();
String entryName = entry.getName();
// Nur JSON-Dateien im gewünschten Ordner
if (entryName.startsWith(resourcePath) && entryName.endsWith(".json")) {
InputStream in = getResource(entryName);
if (in == null) continue;
File outFile = new File(getDataFolder(), entryName);
outFile.getParentFile().mkdirs(); // Ordnerstruktur sicherstellen
try (OutputStream out = new FileOutputStream(outFile)) {
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
System.out.println("Extrahiert: " + entryName);
}
in.close();
}
}
}
} catch (IOException | URISyntaxException e) {
e.printStackTrace();
}
}
public Renderer getScreenRenderer() {
if(this.screenRenderer == null) this.screenRenderer = new DefaultScreenRenderer();
return this.screenRenderer;