Skip to content

Commit e317200

Browse files
committed
feat: remove image process
1 parent 605d61d commit e317200

File tree

22 files changed

+67
-61
lines changed

22 files changed

+67
-61
lines changed

api/src/main/java/kr/toxicity/model/api/data/blueprint/BlueprintImage.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,18 @@
1010
import org.jetbrains.annotations.NotNull;
1111
import org.jetbrains.annotations.Nullable;
1212

13-
import java.awt.image.BufferedImage;
14-
1513
/**
1614
* Blueprint image.
1715
* @param name image name
18-
* @param image buffered image
16+
* @param image image
1917
* @param mcmeta mcmeta
2018
*/
21-
public record BlueprintImage(@NotNull String name, @NotNull BufferedImage image, @Nullable JsonObject mcmeta) {
19+
public record BlueprintImage(@NotNull String name, byte[] image, @Nullable JsonObject mcmeta) {
2220
/**
2321
* Gets estimated size
2422
* @return estimated size
2523
*/
2624
public long estimatedSize() {
27-
return 4L * image.getWidth() * image.getHeight();
25+
return image.length;
2826
}
2927
}

api/src/main/java/kr/toxicity/model/api/data/blueprint/BlueprintTexture.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,20 @@
1414
import kr.toxicity.model.api.util.json.JsonObjectBuilder;
1515
import org.jetbrains.annotations.NotNull;
1616

17-
import java.awt.image.BufferedImage;
18-
1917
/**
2018
* Texture of the model
2119
* @param name texture name
2220
* @param image image
21+
* @param width original width
22+
* @param height original height
2323
* @param uvWidth uv width
2424
* @param uvHeight uv height
2525
*/
2626
public record BlueprintTexture(
2727
@NotNull String name,
28-
@NotNull BufferedImage image,
28+
byte[] image,
29+
int width,
30+
int height,
2931
int uvWidth,
3032
int uvHeight
3133
) {
@@ -35,11 +37,11 @@ public record BlueprintTexture(
3537
*/
3638
public boolean isAnimatedTexture() {
3739
if (uvWidth > 0 && uvHeight > 0) {
38-
var h = (float) image.getHeight() / uvHeight;
39-
var w = (float) image.getWidth() / uvWidth;
40+
var h = (float) height / uvHeight;
41+
var w = (float) width / uvWidth;
4042
return h > w;
4143
} else {
42-
return image.getHeight() / image.getWidth() > 1;
44+
return height > 0 && width > 0 && height / width > 1;
4345
}
4446
}
4547

@@ -108,6 +110,6 @@ public boolean hasUVSize() {
108110
*/
109111
public @NotNull ModelResolution resolution(@NotNull ModelResolution resolution) {
110112
if (!hasUVSize()) return resolution;
111-
return resolution.width() == image.getWidth() && resolution.height() == image.getHeight() ? resolution : new ModelResolution(uvWidth, uvHeight);
113+
return resolution.width() == width && resolution.height() == height ? resolution : new ModelResolution(uvWidth, uvHeight);
112114
}
113115
}

api/src/main/java/kr/toxicity/model/api/data/raw/ModelTexture.java

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,6 @@
1111
import org.jetbrains.annotations.ApiStatus;
1212
import org.jetbrains.annotations.NotNull;
1313

14-
import javax.imageio.ImageIO;
15-
import java.awt.image.BufferedImage;
16-
import java.io.ByteArrayInputStream;
1714
import java.util.Base64;
1815

1916
/**
@@ -39,17 +36,11 @@ public record ModelTexture(
3936
* @return converted textures
4037
*/
4138
public @NotNull BlueprintTexture toBlueprint() {
42-
BufferedImage image;
43-
try (
44-
var input = new ByteArrayInputStream(Base64.getDecoder().decode(source().split(",")[1]))
45-
) {
46-
image = ImageIO.read(input);
47-
} catch (Exception e) {
48-
throw new RuntimeException(e);
49-
}
5039
return new BlueprintTexture(
5140
name().split("\\.")[0],
52-
image,
41+
Base64.getDecoder().decode(source().split(",")[1]),
42+
width(),
43+
height(),
5344
uvWidth(),
5445
uvHeight()
5546
);

api/src/main/java/kr/toxicity/model/api/player/PlayerLimb.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import lombok.RequiredArgsConstructor;
1717
import org.bukkit.entity.ItemDisplay;
1818
import org.jetbrains.annotations.NotNull;
19-
import org.jetbrains.annotations.Nullable;
2019
import org.joml.Vector3f;
2120

2221
import java.util.function.Function;
@@ -194,7 +193,7 @@ public enum PlayerLimb {
194193
private final @NotNull Vector3f slimScale;
195194
private final @NotNull Vector3f offset;
196195
private final @NotNull Vector3f slimOffset;
197-
private final @Nullable Function<SkinData, TransformedItemStack> skinMapper;
196+
private final @NotNull Function<SkinData, TransformedItemStack> skinMapper;
198197
private final @NotNull ItemDisplay.ItemDisplayTransform transform;
199198

200199
@Getter
@@ -208,7 +207,7 @@ public enum PlayerLimb {
208207
public @NotNull TransformedItemStack createItem(@NotNull RenderSource.Profiled profiled) {
209208
var profile = profiled.profile();
210209
var manager = BetterModel.plugin().skinManager();
211-
if (skinMapper != null && manager.supported()) {
210+
if (manager.supported()) {
212211
return skinMapper.apply(manager.getOrRequest(profile));
213212
}
214213
var isSlim = profiled.slim();

api/src/main/java/kr/toxicity/model/api/tracker/EntityTracker.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,9 @@ public EntityTracker(@NotNull EntityTrackerRegistry registry, @NotNull RenderPip
8282
.ifPresent(bone -> {
8383
var box = bone.getGroup().getHitBox();
8484
if (box == null) return;
85-
var shadow = BetterModel.plugin().nms().create(entity.getLocation(), d -> d.moveDuration(1));
85+
var shadow = BetterModel.plugin().nms().create(entity.getLocation(), d -> {
86+
if (entity instanceof Player) d.moveDuration(1);
87+
});
8688
var baseScale = (float) (box.box().x() + box.box().z()) / 4F;
8789
tick(((t, s) -> {
8890
var wPos = bone.hitBoxPosition();

core/src/main/kotlin/kr/toxicity/model/manager/EntityManagerImpl.kt

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import kr.toxicity.model.api.nms.ModelInteractionHand
1818
import kr.toxicity.model.api.pack.PackZipper
1919
import kr.toxicity.model.api.tracker.EntityTracker
2020
import kr.toxicity.model.api.tracker.EntityTrackerRegistry
21-
import kr.toxicity.model.api.tracker.TrackerUpdateAction
2221
import kr.toxicity.model.util.PLUGIN
2322
import kr.toxicity.model.util.registerListener
2423
import org.bukkit.entity.Entity
@@ -31,7 +30,6 @@ import org.bukkit.event.player.PlayerChangedWorldEvent
3130
import org.bukkit.event.player.PlayerInteractAtEntityEvent
3231
import org.bukkit.event.player.PlayerInteractEntityEvent
3332
import org.bukkit.event.player.PlayerQuitEvent
34-
import org.bukkit.event.player.PlayerToggleSneakEvent
3533
import org.bukkit.event.world.EntitiesLoadEvent
3634
import org.bukkit.event.world.EntitiesUnloadEvent
3735
import org.bukkit.inventory.EquipmentSlot
@@ -166,13 +164,6 @@ object EntityManagerImpl : EntityManager, GlobalManager {
166164
it.damageTint()
167165
}
168166
}
169-
@EventHandler
170-
fun PlayerToggleSneakEvent.sneak() {
171-
BetterModel.registryOrNull(player)?.trackers()?.forEach {
172-
it.update(TrackerUpdateAction.moveDuration(0))
173-
it.task { it.update(TrackerUpdateAction.moveDuration(3)) }
174-
}
175-
}
176167
}
177168
private val platformListener = if (BetterModel.IS_PAPER) PaperListener() else SpigotListener()
178169

core/src/main/kotlin/kr/toxicity/model/manager/ModelManagerImpl.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ object ModelManagerImpl : ModelManager, GlobalManager {
112112
val blueprint: ModelBlueprint
113113
) {
114114
val jsonSize = size - blueprint.textures.sumOf {
115-
it.image.height * it.image.width * 4
115+
it.image.size
116116
}
117117
}
118118

@@ -228,7 +228,7 @@ object ModelManagerImpl : ModelManager, GlobalManager {
228228
}
229229
if (hasTexture) load.buildImage(textures.obfuscator()).forEach { image ->
230230
textures.add("${image.name}.png", image.estimatedSize()) {
231-
image.image.toByteArray()
231+
image.toByteArray()
232232
}
233233
image.mcmeta()?.let { meta ->
234234
textures.add("${image.name}.png.mcmeta", -1) {

core/src/main/kotlin/kr/toxicity/model/util/Buffers.kt

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,16 @@
77
package kr.toxicity.model.util
88

99
import com.google.gson.JsonElement
10+
import kr.toxicity.model.api.data.blueprint.BlueprintImage
1011
import kr.toxicity.model.api.data.raw.ModelData
11-
import java.awt.image.RenderedImage
1212
import java.io.ByteArrayOutputStream
1313
import java.io.OutputStreamWriter
1414
import java.nio.charset.StandardCharsets
15-
import javax.imageio.ImageIO
1615

1716
private val IO_BUFFER = ThreadLocal.withInitial { ByteArrayOutputStream(1024) }
1817

19-
fun RenderedImage.toByteArray(): ByteArray {
20-
return IO_BUFFER.get().let { buffer ->
21-
buffer.reset()
22-
ImageIO.write(this, "png", buffer)
23-
buffer.toByteArray()
24-
}
18+
fun BlueprintImage.toByteArray(): ByteArray {
19+
return image
2520
}
2621

2722
fun JsonElement.toByteArray(): ByteArray {

nms/v1_20_R4/src/main/kotlin/kr/toxicity/model/nms/v1_20_R4/HitBoxImpl.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import net.minecraft.world.phys.AABB
4040
import net.minecraft.world.phys.Vec3
4141
import org.bukkit.Bukkit
4242
import org.bukkit.Color
43+
import org.bukkit.Location
4344
import org.bukkit.Particle
4445
import org.bukkit.craftbukkit.CraftServer
4546
import org.bukkit.craftbukkit.entity.CraftArmorStand
@@ -70,7 +71,10 @@ internal class HitBoxImpl(
7071
private var onFly = false
7172

7273
val craftEntity: HitBox by lazy {
73-
object : CraftArmorStand(Bukkit.getServer() as CraftServer, this), HitBox by this {}
74+
object : CraftArmorStand(Bukkit.getServer() as CraftServer, this), HitBox by this {
75+
override fun getLocation(): Location = interaction.bukkitEntity.location
76+
override fun getLocation(loc: Location?): Location? = interaction.bukkitEntity.getLocation(loc)
77+
}
7478
}
7579
private val _rotatedSource = FunctionUtil.throttleTick(Supplier {
7680
source.rotate(Quaterniond(bone.hitBoxViewRotation()))

nms/v1_20_R4/src/main/kotlin/kr/toxicity/model/nms/v1_20_R4/ModelNametagImpl.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ internal class ModelNametagImpl(
4444
EntityType.TEXT_DISPLAY,
4545
MinecraftServer.getServer().overworld()
4646
).apply {
47-
entityData[Display.DATA_POS_ROT_INTERPOLATION_DURATION_ID] = 1
47+
entityData[Display.DATA_POS_ROT_INTERPOLATION_DURATION_ID] = 3
4848
setTransformation(emptyTransformation)
4949
billboardConstraints = Display.BillboardConstraints.CENTER
5050
}

0 commit comments

Comments
 (0)