54 lines
2.1 KiB
Java
54 lines
2.1 KiB
Java
package com.atsuishio.superbwarfare.client;
|
|
|
|
import com.atsuishio.superbwarfare.data.gun.GunData;
|
|
import com.atsuishio.superbwarfare.data.gun.subdata.Attachment;
|
|
import com.atsuishio.superbwarfare.data.gun.value.AttachmentType;
|
|
import net.minecraft.world.item.ItemStack;
|
|
import software.bernie.geckolib.cache.object.GeoBone;
|
|
|
|
public class ItemModelHelper {
|
|
|
|
public static void handleGunAttachments(GeoBone bone, ItemStack stack, String name) {
|
|
var attachments = GunData.from(stack).attachment;
|
|
|
|
splitBoneName(bone, name, attachments, AttachmentType.SCOPE);
|
|
splitBoneName(bone, name, attachments, AttachmentType.MAGAZINE);
|
|
splitBoneName(bone, name, attachments, AttachmentType.BARREL);
|
|
splitBoneName(bone, name, attachments, AttachmentType.STOCK);
|
|
splitBoneName(bone, name, attachments, AttachmentType.GRIP);
|
|
}
|
|
|
|
private static void splitBoneName(GeoBone bone, String boneName, Attachment attachment, AttachmentType type) {
|
|
try {
|
|
if (boneName.startsWith(type.getName())) {
|
|
String[] parts = boneName.split("(?<=\\D)(?=\\d)");
|
|
if (parts.length == 2) {
|
|
int index = Integer.parseInt(parts[1]);
|
|
bone.setHidden(attachment.get(type) != index);
|
|
}
|
|
}
|
|
} catch (NumberFormatException ignored) {
|
|
}
|
|
}
|
|
|
|
public static void hideAllAttachments(GeoBone bone, String name) {
|
|
splitAndHideBone(bone, name, "Scope");
|
|
splitAndHideBone(bone, name, "Magazine");
|
|
splitAndHideBone(bone, name, "Barrel");
|
|
splitAndHideBone(bone, name, "Stock");
|
|
splitAndHideBone(bone, name, "Grip");
|
|
}
|
|
|
|
private static void splitAndHideBone(GeoBone bone, String boneName, String tagName) {
|
|
try {
|
|
if (boneName.startsWith(tagName)) {
|
|
String[] parts = boneName.split("(?<=\\D)(?=\\d)");
|
|
if (parts.length == 2) {
|
|
int index = Integer.parseInt(parts[1]);
|
|
bone.setHidden(index != 0);
|
|
}
|
|
}
|
|
} catch (NumberFormatException ignored) {
|
|
}
|
|
}
|
|
}
|