diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_EzBaum1_20260603_155951.png b/blight-assets/src/main/resources/.impostors/ez_impostor_EzBaum1_20260603_155951.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_EzBaum1_20260603_155951.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_EzBaum1_20260603_155951.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_EzBaum1_20260603_155953.png b/blight-assets/src/main/resources/.impostors/ez_impostor_EzBaum1_20260603_155953.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_EzBaum1_20260603_155953.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_EzBaum1_20260603_155953.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_EzBaum1_20260603_160003.png b/blight-assets/src/main/resources/.impostors/ez_impostor_EzBaum1_20260603_160003.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_EzBaum1_20260603_160003.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_EzBaum1_20260603_160003.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_EzBaum1_20260603_160027.png b/blight-assets/src/main/resources/.impostors/ez_impostor_EzBaum1_20260603_160027.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_EzBaum1_20260603_160027.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_EzBaum1_20260603_160027.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_EzBaum1_20260603_160028.png b/blight-assets/src/main/resources/.impostors/ez_impostor_EzBaum1_20260603_160028.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_EzBaum1_20260603_160028.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_EzBaum1_20260603_160028.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_EzBaum1_20260603_160029.png b/blight-assets/src/main/resources/.impostors/ez_impostor_EzBaum1_20260603_160029.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_EzBaum1_20260603_160029.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_EzBaum1_20260603_160029.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_EzBaum1_20260603_160030.png b/blight-assets/src/main/resources/.impostors/ez_impostor_EzBaum1_20260603_160030.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_EzBaum1_20260603_160030.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_EzBaum1_20260603_160030.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_EzBaum1_20260603_160126.png b/blight-assets/src/main/resources/.impostors/ez_impostor_EzBaum1_20260603_160126.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_EzBaum1_20260603_160126.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_EzBaum1_20260603_160126.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_EzBaum1_20260603_160809.png b/blight-assets/src/main/resources/.impostors/ez_impostor_EzBaum1_20260603_160809.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_EzBaum1_20260603_160809.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_EzBaum1_20260603_160809.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_EzBaum1_20260603_160907.png b/blight-assets/src/main/resources/.impostors/ez_impostor_EzBaum1_20260603_160907.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_EzBaum1_20260603_160907.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_EzBaum1_20260603_160907.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_ash_large_20260608_160327.png b/blight-assets/src/main/resources/.impostors/ez_impostor_ash_large_20260608_160327.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_ash_large_20260608_160327.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_ash_large_20260608_160327.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_aspen_large_20260608_185100.png b/blight-assets/src/main/resources/.impostors/ez_impostor_aspen_large_20260608_185100.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_aspen_large_20260608_185100.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_aspen_large_20260608_185100.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_large_20260606_163631.png b/blight-assets/src/main/resources/.impostors/ez_impostor_oak_large_20260606_163631.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_large_20260606_163631.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_oak_large_20260606_163631.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_large_20260606_163636.png b/blight-assets/src/main/resources/.impostors/ez_impostor_oak_large_20260606_163636.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_large_20260606_163636.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_oak_large_20260606_163636.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_medium_20260603_210057.png b/blight-assets/src/main/resources/.impostors/ez_impostor_oak_medium_20260603_210057.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_medium_20260603_210057.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_oak_medium_20260603_210057.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_medium_20260603_210112.png b/blight-assets/src/main/resources/.impostors/ez_impostor_oak_medium_20260603_210112.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_medium_20260603_210112.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_oak_medium_20260603_210112.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_medium_20260603_210903.png b/blight-assets/src/main/resources/.impostors/ez_impostor_oak_medium_20260603_210903.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_medium_20260603_210903.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_oak_medium_20260603_210903.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_medium_20260606_162818.png b/blight-assets/src/main/resources/.impostors/ez_impostor_oak_medium_20260606_162818.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_medium_20260606_162818.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_oak_medium_20260606_162818.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_medium_20260606_163554.png b/blight-assets/src/main/resources/.impostors/ez_impostor_oak_medium_20260606_163554.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_medium_20260606_163554.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_oak_medium_20260606_163554.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_medium_20260606_190655.png b/blight-assets/src/main/resources/.impostors/ez_impostor_oak_medium_20260606_190655.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_medium_20260606_190655.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_oak_medium_20260606_190655.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_medium_20260607_221049.png b/blight-assets/src/main/resources/.impostors/ez_impostor_oak_medium_20260607_221049.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_medium_20260607_221049.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_oak_medium_20260607_221049.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_medium_20260608_190845.png b/blight-assets/src/main/resources/.impostors/ez_impostor_oak_medium_20260608_190845.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_medium_20260608_190845.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_oak_medium_20260608_190845.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_medium_20260608_191554.png b/blight-assets/src/main/resources/.impostors/ez_impostor_oak_medium_20260608_191554.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_medium_20260608_191554.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_oak_medium_20260608_191554.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_medium_20260608_200434.png b/blight-assets/src/main/resources/.impostors/ez_impostor_oak_medium_20260608_200434.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_oak_medium_20260608_200434.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_oak_medium_20260608_200434.png diff --git a/blight-assets/src/main/resources/Textures/impostor/ez_impostor_pine_large_20260606_190805.png b/blight-assets/src/main/resources/.impostors/ez_impostor_pine_large_20260606_190805.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/ez_impostor_pine_large_20260606_190805.png rename to blight-assets/src/main/resources/.impostors/ez_impostor_pine_large_20260606_190805.png diff --git a/blight-assets/src/main/resources/Textures/impostor/impostor_Baum1.png b/blight-assets/src/main/resources/.impostors/impostor_Baum1.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/impostor_Baum1.png rename to blight-assets/src/main/resources/.impostors/impostor_Baum1.png diff --git a/blight-assets/src/main/resources/Textures/impostor/impostor_Baum1_20260603_160925.png b/blight-assets/src/main/resources/.impostors/impostor_Baum1_20260603_160925.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/impostor_Baum1_20260603_160925.png rename to blight-assets/src/main/resources/.impostors/impostor_Baum1_20260603_160925.png diff --git a/blight-assets/src/main/resources/Textures/impostor/impostor_oak_20260606_163802.png b/blight-assets/src/main/resources/.impostors/impostor_oak_20260606_163802.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/impostor_oak_20260606_163802.png rename to blight-assets/src/main/resources/.impostors/impostor_oak_20260606_163802.png diff --git a/blight-assets/src/main/resources/Textures/impostor/impostor_oak_20260606_163809.png b/blight-assets/src/main/resources/.impostors/impostor_oak_20260606_163809.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/impostor_oak_20260606_163809.png rename to blight-assets/src/main/resources/.impostors/impostor_oak_20260606_163809.png diff --git a/blight-assets/src/main/resources/Textures/impostor/impostor_oak_20260606_163819.png b/blight-assets/src/main/resources/.impostors/impostor_oak_20260606_163819.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/impostor_oak_20260606_163819.png rename to blight-assets/src/main/resources/.impostors/impostor_oak_20260606_163819.png diff --git a/blight-assets/src/main/resources/Textures/impostor/impostor_oak_20260608_155226.png b/blight-assets/src/main/resources/.impostors/impostor_oak_20260608_155226.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/impostor_oak_20260608_155226.png rename to blight-assets/src/main/resources/.impostors/impostor_oak_20260608_155226.png diff --git a/blight-assets/src/main/resources/Textures/impostor/impostor_pine_20260608_143905.png b/blight-assets/src/main/resources/.impostors/impostor_pine_20260608_143905.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/impostor_pine_20260608_143905.png rename to blight-assets/src/main/resources/.impostors/impostor_pine_20260608_143905.png diff --git a/blight-assets/src/main/resources/Textures/impostor/impostor_pine_20260608_152427.png b/blight-assets/src/main/resources/.impostors/impostor_pine_20260608_152427.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/impostor_pine_20260608_152427.png rename to blight-assets/src/main/resources/.impostors/impostor_pine_20260608_152427.png diff --git a/blight-assets/src/main/resources/Textures/impostor/impostor_pine_20260608_160151.png b/blight-assets/src/main/resources/.impostors/impostor_pine_20260608_160151.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/impostor_pine_20260608_160151.png rename to blight-assets/src/main/resources/.impostors/impostor_pine_20260608_160151.png diff --git a/blight-assets/src/main/resources/Textures/impostor/impostor_willow_20260608_152437.png b/blight-assets/src/main/resources/.impostors/impostor_willow_20260608_152437.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/impostor_willow_20260608_152437.png rename to blight-assets/src/main/resources/.impostors/impostor_willow_20260608_152437.png diff --git a/blight-assets/src/main/resources/Textures/impostor/impostor_willow_20260608_152445.png b/blight-assets/src/main/resources/.impostors/impostor_willow_20260608_152445.png similarity index 100% rename from blight-assets/src/main/resources/Textures/impostor/impostor_willow_20260608_152445.png rename to blight-assets/src/main/resources/.impostors/impostor_willow_20260608_152445.png diff --git a/blight-assets/src/main/resources/.thumbnails/Models/manatrank.j3o.thumb.png b/blight-assets/src/main/resources/.thumbnails/Models/manatrank.j3o.thumb.png new file mode 100644 index 0000000..43fde04 Binary files /dev/null and b/blight-assets/src/main/resources/.thumbnails/Models/manatrank.j3o.thumb.png differ diff --git a/blight-assets/src/main/resources/Models/plants/usable/blutagave.j3o.thumb.png b/blight-assets/src/main/resources/.thumbnails/Models/plants/usable/blutagave.j3o.thumb.png similarity index 100% rename from blight-assets/src/main/resources/Models/plants/usable/blutagave.j3o.thumb.png rename to blight-assets/src/main/resources/.thumbnails/Models/plants/usable/blutagave.j3o.thumb.png diff --git a/blight-assets/src/main/resources/Models/plants/usable/erzmoss.j3o.thumb.png b/blight-assets/src/main/resources/.thumbnails/Models/plants/usable/erzmoss.j3o.thumb.png similarity index 100% rename from blight-assets/src/main/resources/Models/plants/usable/erzmoss.j3o.thumb.png rename to blight-assets/src/main/resources/.thumbnails/Models/plants/usable/erzmoss.j3o.thumb.png diff --git a/blight-assets/src/main/resources/Models/plants/usable/geisterfarn.j3o.thumb.png b/blight-assets/src/main/resources/.thumbnails/Models/plants/usable/geisterfarn.j3o.thumb.png similarity index 100% rename from blight-assets/src/main/resources/Models/plants/usable/geisterfarn.j3o.thumb.png rename to blight-assets/src/main/resources/.thumbnails/Models/plants/usable/geisterfarn.j3o.thumb.png diff --git a/blight-assets/src/main/resources/Models/plants/usable/quelllilie.j3o.thumb.png b/blight-assets/src/main/resources/.thumbnails/Models/plants/usable/quelllilie.j3o.thumb.png similarity index 100% rename from blight-assets/src/main/resources/Models/plants/usable/quelllilie.j3o.thumb.png rename to blight-assets/src/main/resources/.thumbnails/Models/plants/usable/quelllilie.j3o.thumb.png diff --git a/blight-assets/src/main/resources/Models/plants/usable/sonnenherz.j3o.thumb.png b/blight-assets/src/main/resources/.thumbnails/Models/plants/usable/sonnenherz.j3o.thumb.png similarity index 100% rename from blight-assets/src/main/resources/Models/plants/usable/sonnenherz.j3o.thumb.png rename to blight-assets/src/main/resources/.thumbnails/Models/plants/usable/sonnenherz.j3o.thumb.png diff --git a/blight-assets/src/main/resources/Models/plants/usable/windschiff.j3o.thumb.png b/blight-assets/src/main/resources/.thumbnails/Models/plants/usable/windschiff.j3o.thumb.png similarity index 100% rename from blight-assets/src/main/resources/Models/plants/usable/windschiff.j3o.thumb.png rename to blight-assets/src/main/resources/.thumbnails/Models/plants/usable/windschiff.j3o.thumb.png diff --git a/blight-assets/src/main/resources/.thumbnails/Models/schwachermanatrank.j3o.thumb.png b/blight-assets/src/main/resources/.thumbnails/Models/schwachermanatrank.j3o.thumb.png new file mode 100644 index 0000000..43fde04 Binary files /dev/null and b/blight-assets/src/main/resources/.thumbnails/Models/schwachermanatrank.j3o.thumb.png differ diff --git a/blight-assets/src/main/resources/.thumbnails/Models/starkermanatrank.j3o.thumb.png b/blight-assets/src/main/resources/.thumbnails/Models/starkermanatrank.j3o.thumb.png new file mode 100644 index 0000000..43fde04 Binary files /dev/null and b/blight-assets/src/main/resources/.thumbnails/Models/starkermanatrank.j3o.thumb.png differ diff --git a/blight-assets/src/main/resources/Models/custom_mesh_0.j3o b/blight-assets/src/main/resources/Models/custom_mesh_0.j3o index 3523f34..611f3b4 100644 Binary files a/blight-assets/src/main/resources/Models/custom_mesh_0.j3o and b/blight-assets/src/main/resources/Models/custom_mesh_0.j3o differ diff --git a/blight-assets/src/main/resources/Models/custom_mesh_1.j3o b/blight-assets/src/main/resources/Models/custom_mesh_1.j3o index cc0a6e7..b589a1c 100644 Binary files a/blight-assets/src/main/resources/Models/custom_mesh_1.j3o and b/blight-assets/src/main/resources/Models/custom_mesh_1.j3o differ diff --git a/blight-assets/src/main/resources/Models/custom_mesh_2.j3o b/blight-assets/src/main/resources/Models/custom_mesh_2.j3o index 5113003..fe75734 100644 Binary files a/blight-assets/src/main/resources/Models/custom_mesh_2.j3o and b/blight-assets/src/main/resources/Models/custom_mesh_2.j3o differ diff --git a/blight-assets/src/main/resources/Models/custom_mesh_3.j3o b/blight-assets/src/main/resources/Models/custom_mesh_3.j3o index d614e41..d02bf01 100644 Binary files a/blight-assets/src/main/resources/Models/custom_mesh_3.j3o and b/blight-assets/src/main/resources/Models/custom_mesh_3.j3o differ diff --git a/blight-assets/src/main/resources/Models/custom_mesh_4.j3o b/blight-assets/src/main/resources/Models/custom_mesh_4.j3o index 9d3f8e0..bc0a9b6 100644 Binary files a/blight-assets/src/main/resources/Models/custom_mesh_4.j3o and b/blight-assets/src/main/resources/Models/custom_mesh_4.j3o differ diff --git a/blight-assets/src/main/resources/Models/custom_mesh_5.j3o b/blight-assets/src/main/resources/Models/custom_mesh_5.j3o index f238959..8c57797 100644 Binary files a/blight-assets/src/main/resources/Models/custom_mesh_5.j3o and b/blight-assets/src/main/resources/Models/custom_mesh_5.j3o differ diff --git a/blight-assets/src/main/resources/Models/custom_mesh_6.j3o b/blight-assets/src/main/resources/Models/custom_mesh_6.j3o index 30d415e..3c54fc3 100644 Binary files a/blight-assets/src/main/resources/Models/custom_mesh_6.j3o and b/blight-assets/src/main/resources/Models/custom_mesh_6.j3o differ diff --git a/blight-assets/src/main/resources/Models/custom_mesh_7.j3o b/blight-assets/src/main/resources/Models/custom_mesh_7.j3o index ab8f287..e018c86 100644 Binary files a/blight-assets/src/main/resources/Models/custom_mesh_7.j3o and b/blight-assets/src/main/resources/Models/custom_mesh_7.j3o differ diff --git a/blight-assets/src/main/resources/Models/manatrank.j3o b/blight-assets/src/main/resources/Models/manatrank.j3o new file mode 100644 index 0000000..d08f1ca Binary files /dev/null and b/blight-assets/src/main/resources/Models/manatrank.j3o differ diff --git a/blight-assets/src/main/resources/Models/manatrank.j3o.meta b/blight-assets/src/main/resources/Models/manatrank.j3o.meta new file mode 100644 index 0000000..2b12563 --- /dev/null +++ b/blight-assets/src/main/resources/Models/manatrank.j3o.meta @@ -0,0 +1,20 @@ +#Tue Jun 09 21:42:20 CEST 2026 +castShadow=true +category= +cullDistance=120.0 +lod1Distance=30.0 +lod1Path= +lod2Distance=80.0 +lod2Path= +name=manatrank +pivotOffsetY=0.0 +placementOffsetY=0.0 +randomScaleMax=1.0 +randomScaleMin=1.0 +receiveShadow=true +scaleX=0.2 +scaleY=0.2 +scaleZ=0.2 +solid=false +tags= +uniformScale=true diff --git a/blight-assets/src/main/resources/Models/schwachermanatrank.j3o b/blight-assets/src/main/resources/Models/schwachermanatrank.j3o new file mode 100644 index 0000000..91e42be Binary files /dev/null and b/blight-assets/src/main/resources/Models/schwachermanatrank.j3o differ diff --git a/blight-assets/src/main/resources/Models/starkermanatrank.j3o b/blight-assets/src/main/resources/Models/starkermanatrank.j3o new file mode 100644 index 0000000..91e42be Binary files /dev/null and b/blight-assets/src/main/resources/Models/starkermanatrank.j3o differ diff --git a/blight-assets/src/main/resources/Textures/vegetation_grass_card_03.png b/blight-assets/src/main/resources/Textures/gras/vegetation_grass_card_03.png similarity index 100% rename from blight-assets/src/main/resources/Textures/vegetation_grass_card_03.png rename to blight-assets/src/main/resources/Textures/gras/vegetation_grass_card_03.png diff --git a/blight-assets/src/main/resources/Textures/ground/Rocks015_1K-JPG_Color.jpg b/blight-assets/src/main/resources/Textures/ground/Rocks015_1K-JPG_Color.jpg new file mode 100644 index 0000000..5a1bf1c Binary files /dev/null and b/blight-assets/src/main/resources/Textures/ground/Rocks015_1K-JPG_Color.jpg differ diff --git a/blight-assets/src/main/resources/Textures/ground/Rocks015_1K-JPG_NormalDX.jpg b/blight-assets/src/main/resources/Textures/ground/Rocks015_1K-JPG_NormalDX.jpg new file mode 100644 index 0000000..83d4b84 Binary files /dev/null and b/blight-assets/src/main/resources/Textures/ground/Rocks015_1K-JPG_NormalDX.jpg differ diff --git a/blight-editor/src/main/java/de/blight/editor/EditorApp.java b/blight-editor/src/main/java/de/blight/editor/EditorApp.java index eab2ddd..bebc82f 100644 --- a/blight-editor/src/main/java/de/blight/editor/EditorApp.java +++ b/blight-editor/src/main/java/de/blight/editor/EditorApp.java @@ -3549,6 +3549,7 @@ public class EditorApp extends Application { Files.deleteIfExists(p); item.getParent().getChildren().remove(item); itemPaths.remove(item); + if (pStr.endsWith(".j3o")) deleteJ3oSideFiles(p); setStatus("Gelöscht: " + p.getFileName()); } catch (IOException ex) { setStatus("Fehler: " + ex.getMessage()); @@ -3837,6 +3838,32 @@ public class EditorApp extends Application { } catch (IOException ignored) {} } + /** + * Löscht Thumbnail und Impostor-Textur, die zu einer .j3o-Datei gehören. + * Impostor-Dateien werden anhand des Zeitstempel-Suffixes (_YYYYMMDD_HHMMSS) ermittelt. + */ + private void deleteJ3oSideFiles(Path j3oPath) { + // Thumbnail + try { + Files.deleteIfExists( + de.blight.editor.state.ThumbnailRenderer.sidecarPath(j3oPath, ASSET_ROOT)); + } catch (IOException ignored) {} + + // Impostor: Zeitstempel aus Dateiname extrahieren und passende Datei suchen + String base = j3oPath.getFileName().toString().replace(".j3o", ""); + java.util.regex.Matcher m = java.util.regex.Pattern + .compile(".*(\\d{8}_\\d{6})$").matcher(base); + if (!m.matches()) return; + String ts = m.group(1); + Path impostorDir = ASSET_ROOT.resolve( + de.blight.editor.state.ThumbnailRenderer.IMPOSTOR_DIR); + if (!Files.isDirectory(impostorDir)) return; + try (var stream = Files.list(impostorDir)) { + stream.filter(f -> f.getFileName().toString().endsWith("_" + ts + ".png")) + .forEach(f -> { try { Files.deleteIfExists(f); } catch (IOException ignored) {} }); + } catch (IOException ignored) {} + } + /** * Befüllt den Asset-Baum vollständig aus dem Dateisystem. * Bekannte Verzeichnisse werden den Kategorie-Feldern zugewiesen; @@ -3851,6 +3878,11 @@ public class EditorApp extends Application { List topDirs; try (var s = Files.list(ASSET_ROOT)) { topDirs = s.filter(Files::isDirectory) + .filter(p -> { + String n = p.getFileName().toString(); + return !n.equals(de.blight.editor.state.ThumbnailRenderer.THUMB_DIR) + && !n.equals(de.blight.editor.state.ThumbnailRenderer.IMPOSTOR_DIR); + }) .sorted(Comparator.comparing(p -> p.getFileName().toString().toLowerCase())) .collect(java.util.stream.Collectors.toList()); } catch (IOException e) { topDirs = List.of(); } diff --git a/blight-editor/src/main/java/de/blight/editor/state/EzTreeState.java b/blight-editor/src/main/java/de/blight/editor/state/EzTreeState.java index 7328e7a..5e024b5 100644 --- a/blight-editor/src/main/java/de/blight/editor/state/EzTreeState.java +++ b/blight-editor/src/main/java/de/blight/editor/state/EzTreeState.java @@ -599,12 +599,12 @@ public class EzTreeState extends BaseAppState { img.setRGB(x, height - 1 - y, (a<<24)|(r<<16)|(g<<8)|b); } } - Path texDir = ASSET_ROOT.resolve("Textures").resolve("impostor"); + Path texDir = ASSET_ROOT.resolve(ThumbnailRenderer.IMPOSTOR_DIR); Files.createDirectories(texDir); File pngFile = texDir.resolve(name + ".png").toFile(); ImageIO.write(img, "PNG", pngFile); try { - return (Texture2D) assets.loadTexture("Textures/impostor/" + name + ".png"); + return (Texture2D) assets.loadTexture(ThumbnailRenderer.IMPOSTOR_DIR + "/" + name + ".png"); } catch (Exception ignored) { pixels.rewind(); Image jmeImg = new Image(Image.Format.RGBA8, width, height, pixels, null, diff --git a/blight-editor/src/main/java/de/blight/editor/state/ModelEditorState.java b/blight-editor/src/main/java/de/blight/editor/state/ModelEditorState.java index dd89689..e0ddcd9 100644 --- a/blight-editor/src/main/java/de/blight/editor/state/ModelEditorState.java +++ b/blight-editor/src/main/java/de/blight/editor/state/ModelEditorState.java @@ -28,6 +28,9 @@ import java.nio.file.Path; */ public class ModelEditorState extends BaseAppState { + private static final java.nio.file.Path ASSET_ROOT = + de.blight.editor.ProjectRoot.resolve("blight-assets", "src", "main", "resources"); + // ── Orbit-Kamera ───────────────────────────────────────────────────────── private static final float ORBIT_SENS = 0.4f; // Grad / Pixel Maus-Delta private static final float ZOOM_FACTOR = 0.1f; @@ -421,7 +424,7 @@ public class ModelEditorState extends BaseAppState { Spatial modelClone = modelWrapper.clone(); byte[] thumb = ThumbnailRenderer.render(modelClone, app.getRenderManager(), app.getRenderer()); if (thumb == null) return; - ThumbnailRenderer.saveSidecar(thumb, j3oPath); + ThumbnailRenderer.saveSidecar(thumb, j3oPath, ASSET_ROOT); embedThumbnail(thumb, j3oPath); } catch (Exception e) { System.err.println("[ModelEditor] Thumbnail-Fehler: " + e.getMessage()); diff --git a/blight-editor/src/main/java/de/blight/editor/state/SceneObjectState.java b/blight-editor/src/main/java/de/blight/editor/state/SceneObjectState.java index 0e4a58b..71ae508 100644 --- a/blight-editor/src/main/java/de/blight/editor/state/SceneObjectState.java +++ b/blight-editor/src/main/java/de/blight/editor/state/SceneObjectState.java @@ -1250,7 +1250,7 @@ public class SceneObjectState extends BaseAppState { ThumbnailRenderer.embed(model, thumb); Files.createDirectories(req.destJ3o().getParent()); BinaryExporter.getInstance().save(model, req.destJ3o().toFile()); - ThumbnailRenderer.saveSidecar(thumb, req.destJ3o()); + ThumbnailRenderer.saveSidecar(thumb, req.destJ3o(), ASSET_ROOT); } else { Files.createDirectories(req.destJ3o().getParent()); BinaryExporter.getInstance().save(model, req.destJ3o().toFile()); diff --git a/blight-editor/src/main/java/de/blight/editor/state/ThumbnailRenderer.java b/blight-editor/src/main/java/de/blight/editor/state/ThumbnailRenderer.java index 4a85369..a64934a 100644 --- a/blight-editor/src/main/java/de/blight/editor/state/ThumbnailRenderer.java +++ b/blight-editor/src/main/java/de/blight/editor/state/ThumbnailRenderer.java @@ -128,19 +128,28 @@ public final class ThumbnailRenderer { public static String getUserDataKey() { return USERDATA_KEY; } - /** Speichert PNG-Bytes als {@code .thumb.png}. */ - public static void saveSidecar(byte[] pngBytes, Path j3oPath) { + /** Name des zentralen Thumbnail-Verzeichnisses (direkt unter assetRoot). */ + public static final String THUMB_DIR = ".thumbnails"; + + /** Name des zentralen Impostor-Textur-Verzeichnisses (direkt unter assetRoot). */ + public static final String IMPOSTOR_DIR = ".impostors"; + + /** Speichert PNG-Bytes ins zentrale Thumbnail-Verzeichnis ({@code assetRoot/.thumbnails/…}). */ + public static void saveSidecar(byte[] pngBytes, Path j3oPath, Path assetRoot) { if (pngBytes == null) return; try { - Files.write(sidecarPath(j3oPath), pngBytes); + Path dest = sidecarPath(j3oPath, assetRoot); + Files.createDirectories(dest.getParent()); + Files.write(dest, pngBytes); } catch (IOException e) { System.err.println("[ThumbnailRenderer] Sidecar-Fehler: " + e.getMessage()); } } - /** Pfad der Sidecar-Datei: {@code .thumb.png}. */ - public static Path sidecarPath(Path j3oPath) { - return j3oPath.resolveSibling(j3oPath.getFileName() + ".thumb.png"); + /** Pfad der Thumbnail-Datei: {@code assetRoot/.thumbnails/.thumb.png}. */ + public static Path sidecarPath(Path j3oPath, Path assetRoot) { + Path rel = assetRoot.relativize(j3oPath); + return assetRoot.resolve(THUMB_DIR).resolve(rel.toString() + ".thumb.png"); } // ── Intern ─────────────────────────────────────────────────────────────── diff --git a/blight-editor/src/main/java/de/blight/editor/state/TreeGeneratorState.java b/blight-editor/src/main/java/de/blight/editor/state/TreeGeneratorState.java index 044086b..5f52fab 100644 --- a/blight-editor/src/main/java/de/blight/editor/state/TreeGeneratorState.java +++ b/blight-editor/src/main/java/de/blight/editor/state/TreeGeneratorState.java @@ -593,14 +593,14 @@ public class TreeGeneratorState extends BaseAppState { img.setRGB(x, height - 1 - y, (a<<24)|(r<<16)|(g<<8)|b); } } - Path texDir = ASSET_ROOT.resolve("Textures").resolve("impostor"); + Path texDir = ASSET_ROOT.resolve(ThumbnailRenderer.IMPOSTOR_DIR); Files.createDirectories(texDir); File pngFile = texDir.resolve(name + ".png").toFile(); ImageIO.write(img, "PNG", pngFile); log.info("[Blight-Baum] Impostor: {}", pngFile.getAbsolutePath()); try { - return (Texture2D) assets.loadTexture("Textures/impostor/" + name + ".png"); + return (Texture2D) assets.loadTexture(ThumbnailRenderer.IMPOSTOR_DIR + "/" + name + ".png"); } catch (Exception loadEx) { pixels.rewind(); Image jmeImg = new Image(Image.Format.RGBA8, width, height, diff --git a/blight-editor/src/main/java/de/blight/editor/ui/ModelChooser.java b/blight-editor/src/main/java/de/blight/editor/ui/ModelChooser.java index e90f82f..b4ef627 100644 --- a/blight-editor/src/main/java/de/blight/editor/ui/ModelChooser.java +++ b/blight-editor/src/main/java/de/blight/editor/ui/ModelChooser.java @@ -8,7 +8,7 @@ import javafx.scene.image.ImageView; import javafx.scene.layout.*; import javafx.stage.Modality; -import java.io.ByteArrayInputStream; +import de.blight.editor.state.ThumbnailRenderer; import java.io.IOException; import java.io.InputStream; import java.nio.file.*; @@ -18,7 +18,7 @@ import java.util.stream.Stream; /** * Dialog zum Auswählen eines .j3o-Modells. - * Zeigt Karten mit 128×128-Thumbnail wenn eine {@code .j3o.thumb.png} Sidecar-Datei vorhanden ist. + * Zeigt Karten mit 128×128-Thumbnail wenn eine Thumbnail-Datei im zentralen {@code .thumbnails}-Verzeichnis vorhanden ist. * Gibt den relativen Asset-Pfad (z.B. "Models/Items/sword.j3o") zurück oder {@code null} bei Abbruch. */ public class ModelChooser extends Dialog { @@ -113,8 +113,7 @@ public class ModelChooser extends Dialog { } private Image loadThumb(Path j3o) { - // Sidecar: .thumb.png - Path sidecar = j3o.resolveSibling(j3o.getFileName() + ".thumb.png"); + Path sidecar = ThumbnailRenderer.sidecarPath(j3o, assetRoot); if (Files.isRegularFile(sidecar)) { try (InputStream is = Files.newInputStream(sidecar)) { return new Image(is, THUMB_SIZE, THUMB_SIZE, true, true); diff --git a/blight-map/src/main/map/blight_map.blm b/blight-map/src/main/map/blight_map.blm index 80b8bd3..e02e8c3 100644 Binary files a/blight-map/src/main/map/blight_map.blm and b/blight-map/src/main/map/blight_map.blm differ diff --git a/blight-map/src/main/map/blight_objects.blo b/blight-map/src/main/map/blight_objects.blo index bb3c009..7618d26 100644 --- a/blight-map/src/main/map/blight_objects.blo +++ b/blight-map/src/main/map/blight_objects.blo @@ -44,3 +44,4 @@ Models/plants/fern/fern_20260608_165628.j3o 162.27063 0.88450 24.03092 0.00000 1 Models/plants/misc/heliconia+plant+3d+model.j3o 152.94803 0.96488 8.99865 0.00000 1.00000 0.00000 0.00000 false true true 30.00000 80.00000 120.00000 Models/plants/misc/heliconia+plant+3d+model.j3o 155.57500 0.96457 10.04861 0.00000 1.00000 0.00000 0.00000 false true true 30.00000 80.00000 120.00000 Models/plants/misc/kaktusfeige.j3o 153.89978 0.98474 38.66549 0.00000 2.50000 0.00000 0.00000 true true true 30.00000 80.00000 120.00000 +@plane 102.97000 1.06000 -172.24001 0.00000 1.00000 0.00000 0.00000 false Textures/ground/Rocks015_1K-JPG_Color.jpg Textures/ground/Rocks015_1K-JPG_NormalDX.jpg Common/MatDefs/Light/Lighting.j3md Models/custom_mesh_7.j3o true true 30.00000 80.00000 120.00000 diff --git a/blight-map/src/main/map/chunks/chunk_15_14.blc b/blight-map/src/main/map/chunks/chunk_15_14.blc index fe3dc4e..36e7b70 100644 Binary files a/blight-map/src/main/map/chunks/chunk_15_14.blc and b/blight-map/src/main/map/chunks/chunk_15_14.blc differ diff --git a/blight-map/src/main/map/chunks/chunk_15_15.blc b/blight-map/src/main/map/chunks/chunk_15_15.blc index aef956b..1c9f183 100644 Binary files a/blight-map/src/main/map/chunks/chunk_15_15.blc and b/blight-map/src/main/map/chunks/chunk_15_15.blc differ diff --git a/blight-map/src/main/map/chunks/chunk_16_14.blc b/blight-map/src/main/map/chunks/chunk_16_14.blc index 7e7cf40..edc4f26 100644 Binary files a/blight-map/src/main/map/chunks/chunk_16_14.blc and b/blight-map/src/main/map/chunks/chunk_16_14.blc differ diff --git a/blight-map/src/main/map/chunks/chunk_16_15.blc b/blight-map/src/main/map/chunks/chunk_16_15.blc index cbb7050..c37914d 100644 Binary files a/blight-map/src/main/map/chunks/chunk_16_15.blc and b/blight-map/src/main/map/chunks/chunk_16_15.blc differ diff --git a/blight-map/src/main/map/chunks/chunk_16_16.blc b/blight-map/src/main/map/chunks/chunk_16_16.blc index 32fa69d..0da6038 100644 Binary files a/blight-map/src/main/map/chunks/chunk_16_16.blc and b/blight-map/src/main/map/chunks/chunk_16_16.blc differ diff --git a/blight-map/src/main/map/chunks/chunk_17_15.blc b/blight-map/src/main/map/chunks/chunk_17_15.blc index 6b4283f..becf35c 100644 Binary files a/blight-map/src/main/map/chunks/chunk_17_15.blc and b/blight-map/src/main/map/chunks/chunk_17_15.blc differ