魔改配件系统

This commit is contained in:
17146 2024-10-21 01:53:34 +08:00
parent ab0e3362e4
commit 28ed1fa12d
3 changed files with 79 additions and 62 deletions

View file

@ -0,0 +1,48 @@
package net.mcreator.superbwarfare.client;
import net.minecraft.nbt.CompoundTag;
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) {
CompoundTag tag = stack.getOrCreateTag().getCompound("Attachments");
try {
if (name.startsWith("Scope")) {
String[] parts = name.split("(?<=\\D)(?=\\d)");
if (parts.length == 2) {
int index = Integer.parseInt(parts[1]);
bone.setHidden(tag.getInt("Scope") != index);
}
}
if (name.startsWith("Magazine")) {
String[] parts = name.split("(?<=\\D)(?=\\d)");
if (parts.length == 2) {
int index = Integer.parseInt(parts[1]);
bone.setHidden(tag.getInt("Magazine") != index);
}
}
if (name.startsWith("Barrel")) {
String[] parts = name.split("(?<=\\D)(?=\\d)");
if (parts.length == 2) {
int index = Integer.parseInt(parts[1]);
bone.setHidden(tag.getInt("Barrel") != index);
}
}
if (name.startsWith("Stock")) {
String[] parts = name.split("(?<=\\D)(?=\\d)");
if (parts.length == 2) {
int index = Integer.parseInt(parts[1]);
bone.setHidden(tag.getInt("Stock") != index);
}
}
} catch (NumberFormatException ignored) {
}
}
}

View file

@ -2,6 +2,7 @@ package net.mcreator.superbwarfare.client.renderer.item;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import net.mcreator.superbwarfare.client.ItemModelHelper;
import net.mcreator.superbwarfare.client.layer.AK12Layer; import net.mcreator.superbwarfare.client.layer.AK12Layer;
import net.mcreator.superbwarfare.client.model.item.AK12ItemModel; import net.mcreator.superbwarfare.client.model.item.AK12ItemModel;
import net.mcreator.superbwarfare.item.gun.rifle.AK12Item; import net.mcreator.superbwarfare.item.gun.rifle.AK12Item;
@ -103,42 +104,7 @@ public class AK12ItemRenderer extends GeoItemRenderer<AK12Item> {
} }
} }
if (name.equals("Scope1")) { ItemModelHelper.handleGunAttachments(bone, itemStack, name);
bone.setHidden(itemStack.getOrCreateTag().getInt("scope_type") != 1);
}
if (name.equals("Magazine0")) {
bone.setHidden(itemStack.getOrCreateTag().getInt("magazine_type") != 0);
}
if (name.equals("Magazine1")) {
bone.setHidden(itemStack.getOrCreateTag().getInt("magazine_type") != 1);
}
if (name.equals("Magazine2")) {
bone.setHidden(itemStack.getOrCreateTag().getInt("magazine_type") != 2);
}
if (name.equals("Barrel0")) {
bone.setHidden(itemStack.getOrCreateTag().getInt("barrel_type") != 0);
}
if (name.equals("Barrel1")) {
bone.setHidden(itemStack.getOrCreateTag().getInt("barrel_type") != 1);
}
if (name.equals("Barrel2")) {
bone.setHidden(itemStack.getOrCreateTag().getInt("barrel_type") != 2);
}
if (name.equals("Stock0")) {
bone.setHidden(itemStack.getOrCreateTag().getInt("stock_type") != 0);
}
if (name.equals("Stock1")) {
bone.setHidden(itemStack.getOrCreateTag().getInt("stock_type") != 1);
}
} }

View file

@ -2,6 +2,7 @@ package net.mcreator.superbwarfare.network.message;
import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.init.ModTags;
import net.mcreator.superbwarfare.network.ModVariables; import net.mcreator.superbwarfare.network.ModVariables;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
@ -20,11 +21,11 @@ public class EditMessage {
this.type = buffer.readInt(); this.type = buffer.readInt();
} }
public static void encode(net.mcreator.superbwarfare.network.message.EditMessage message, FriendlyByteBuf buffer) { public static void encode(EditMessage message, FriendlyByteBuf buffer) {
buffer.writeInt(message.type); buffer.writeInt(message.type);
} }
public static void handler(net.mcreator.superbwarfare.network.message.EditMessage message, Supplier<NetworkEvent.Context> contextSupplier) { public static void handler(EditMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
NetworkEvent.Context context = contextSupplier.get(); NetworkEvent.Context context = contextSupplier.get();
context.enqueueWork(() -> pressAction(context.getSender(), message.type)); context.enqueueWork(() -> pressAction(context.getSender(), message.type));
context.setPacketHandled(true); context.setPacketHandled(true);
@ -38,32 +39,34 @@ public class EditMessage {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (stack.is(ModTags.Items.CAN_CUSTOM_GUN) && player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit) { if (stack.is(ModTags.Items.CAN_CUSTOM_GUN) && player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit) {
CompoundTag tag = stack.getOrCreateTag().getCompound("Attachments");
switch (type) { switch (type) {
case 0: case 0 -> {
stack.getOrCreateTag().putInt("scope_type", stack.getOrCreateTag().getInt("scope_type") + 1); int att = tag.getInt("Scope");
if (stack.getOrCreateTag().getInt("scope_type") == 4) { att++;
stack.getOrCreateTag().putInt("scope_type", 0); att %= 4;
tag.putInt("Scope", att);
} }
break; case 1 -> {
case 1: int att = tag.getInt("Barrel");
stack.getOrCreateTag().putInt("barrel_type", stack.getOrCreateTag().getInt("barrel_type") + 1); att++;
if (stack.getOrCreateTag().getInt("barrel_type") == 3) { att %= 3;
stack.getOrCreateTag().putInt("barrel_type", 0); tag.putInt("Barrel", att);
} }
break; case 2 -> {
case 2: int att = tag.getInt("Magazine");
stack.getOrCreateTag().putInt("magazine_type", stack.getOrCreateTag().getInt("magazine_type") + 1); att++;
if (stack.getOrCreateTag().getInt("magazine_type") == 3) { att %= 3;
stack.getOrCreateTag().putInt("magazine_type", 0); tag.putInt("Magazine", att);
} }
break; case 3 -> {
case 3: int att = tag.getInt("Stock");
stack.getOrCreateTag().putInt("stock_type", stack.getOrCreateTag().getInt("stock_type") + 1); att++;
if (stack.getOrCreateTag().getInt("stock_type") == 3) { att %= 3;
stack.getOrCreateTag().putInt("stock_type", 0); tag.putInt("Stock", att);
} }
break;
} }
stack.addTagElement("Attachments", tag);
} }
} }
} }