修改C4命名

This commit is contained in:
Atsuihsio 2025-01-23 00:01:14 +08:00
parent a3ba4acc05
commit 8c82cedeb2
20 changed files with 228 additions and 96 deletions

View file

@ -21,7 +21,6 @@ import com.atsuishio.superbwarfare.tools.TraceTool;
import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.platform.InputConstants;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.sounds.SoundSource; import net.minecraft.sounds.SoundSource;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
@ -477,7 +476,7 @@ public class ClickHandler {
private static void handleLaunchPress(Player player) { private static void handleLaunchPress(Player player) {
ItemStack item = player.getMainHandItem(); ItemStack item = player.getMainHandItem();
if (item.is(ModItems.EXPLOSIVE_MINE.get())) { if (item.is(ModItems.C4_BOMB.get())) {
item.use(player.level(),player,player.getUsedItemHand()); item.use(player.level(),player,player.getUsedItemHand());
} }
} }

View file

@ -1,30 +1,30 @@
package com.atsuishio.superbwarfare.client.model.entity; package com.atsuishio.superbwarfare.client.model.entity;
import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.entity.ExplosiveEntity; import com.atsuishio.superbwarfare.entity.C4Entity;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.model.GeoModel; import software.bernie.geckolib.model.GeoModel;
import java.util.UUID; import java.util.UUID;
public class ExplosiveModel extends GeoModel<ExplosiveEntity> { public class C4Model extends GeoModel<C4Entity> {
@Override @Override
public ResourceLocation getAnimationResource(ExplosiveEntity entity) { public ResourceLocation getAnimationResource(C4Entity entity) {
return ModUtils.loc("animations/c4.animation.json"); return ModUtils.loc("animations/c4.animation.json");
} }
@Override @Override
public ResourceLocation getModelResource(ExplosiveEntity entity) { public ResourceLocation getModelResource(C4Entity entity) {
return ModUtils.loc("geo/c4.geo.json"); return ModUtils.loc("geo/c4.geo.json");
} }
@Override @Override
public ResourceLocation getTextureResource(ExplosiveEntity entity) { public ResourceLocation getTextureResource(C4Entity entity) {
UUID uuid = entity.getUUID(); UUID uuid = entity.getUUID();
if (uuid.getLeastSignificantBits() % 114 == 0) { if (uuid.getLeastSignificantBits() % 114 == 0) {
return ModUtils.loc("textures/entity/c4_alter.png"); return ModUtils.loc("textures/item/c4_alter.png");
} }
return ModUtils.loc("textures/entity/c4.png"); return ModUtils.loc("textures/item/c4.png");
} }
} }

View file

@ -1,7 +1,7 @@
package com.atsuishio.superbwarfare.client.renderer.entity; package com.atsuishio.superbwarfare.client.renderer.entity;
import com.atsuishio.superbwarfare.client.model.entity.ExplosiveModel; import com.atsuishio.superbwarfare.client.model.entity.C4Model;
import com.atsuishio.superbwarfare.entity.ExplosiveEntity; import com.atsuishio.superbwarfare.entity.C4Entity;
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 com.mojang.math.Axis; import com.mojang.math.Axis;
@ -13,20 +13,20 @@ import net.minecraft.util.Mth;
import software.bernie.geckolib.cache.object.BakedGeoModel; import software.bernie.geckolib.cache.object.BakedGeoModel;
import software.bernie.geckolib.renderer.GeoEntityRenderer; import software.bernie.geckolib.renderer.GeoEntityRenderer;
public class ExplosiveRenderer extends GeoEntityRenderer<ExplosiveEntity> { public class C4Renderer extends GeoEntityRenderer<C4Entity> {
public ExplosiveRenderer(EntityRendererProvider.Context renderManager) { public C4Renderer(EntityRendererProvider.Context renderManager) {
super(renderManager, new ExplosiveModel()); super(renderManager, new C4Model());
this.shadowRadius = 0f; this.shadowRadius = 0f;
} }
@Override @Override
public RenderType getRenderType(ExplosiveEntity animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) { public RenderType getRenderType(C4Entity animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) {
return RenderType.entityTranslucent(getTextureLocation(animatable)); return RenderType.entityTranslucent(getTextureLocation(animatable));
} }
@Override @Override
public void preRender(PoseStack poseStack, ExplosiveEntity entity, BakedGeoModel model, MultiBufferSource bufferSource, VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, float red, float green, public void preRender(PoseStack poseStack, C4Entity entity, BakedGeoModel model, MultiBufferSource bufferSource, VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, float red, float green,
float blue, float alpha) { float blue, float alpha) {
float scale = 0.5f; float scale = 0.5f;
this.scaleHeight = scale; this.scaleHeight = scale;
@ -35,7 +35,7 @@ public class ExplosiveRenderer extends GeoEntityRenderer<ExplosiveEntity> {
} }
@Override @Override
public void render(ExplosiveEntity entityIn, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource bufferIn, int packedLightIn) { public void render(C4Entity entityIn, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource bufferIn, int packedLightIn) {
poseStack.pushPose(); poseStack.pushPose();
poseStack.mulPose(Axis.YP.rotationDegrees(-Mth.lerp(partialTicks, entityIn.yRotO, entityIn.getYRot()))); poseStack.mulPose(Axis.YP.rotationDegrees(-Mth.lerp(partialTicks, entityIn.yRotO, entityIn.getYRot())));
super.render(entityIn, entityYaw, partialTicks, poseStack, bufferIn, packedLightIn); super.render(entityIn, entityYaw, partialTicks, poseStack, bufferIn, packedLightIn);
@ -43,12 +43,12 @@ public class ExplosiveRenderer extends GeoEntityRenderer<ExplosiveEntity> {
} }
@Override @Override
protected float getDeathMaxRotation(ExplosiveEntity entityLivingBaseIn) { protected float getDeathMaxRotation(C4Entity entityLivingBaseIn) {
return 0.0F; return 0.0F;
} }
@Override @Override
public boolean shouldShowName(ExplosiveEntity animatable) { public boolean shouldShowName(C4Entity animatable) {
return false; return false;
} }
} }

View file

@ -10,29 +10,19 @@ import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.tools.CustomExplosion; import com.atsuishio.superbwarfare.tools.CustomExplosion;
import com.atsuishio.superbwarfare.tools.EntityFindUtil; import com.atsuishio.superbwarfare.tools.EntityFindUtil;
import com.atsuishio.superbwarfare.tools.ParticleTool; import com.atsuishio.superbwarfare.tools.ParticleTool;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.network.syncher.EntityDataSerializer;
import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.EntityDataSerializers;
import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.network.syncher.SynchedEntityData;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.players.OldUsersConverter; import net.minecraft.server.players.OldUsersConverter;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.*; import net.minecraft.world.entity.*;
import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Explosion; import net.minecraft.world.level.Explosion;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import net.minecraftforge.items.ItemHandlerHelper;
import org.joml.Vector3f;
import software.bernie.geckolib.animatable.GeoEntity; import software.bernie.geckolib.animatable.GeoEntity;
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
import software.bernie.geckolib.core.animation.AnimatableManager; import software.bernie.geckolib.core.animation.AnimatableManager;
@ -43,24 +33,24 @@ import java.util.Comparator;
import java.util.Optional; import java.util.Optional;
import java.util.UUID; import java.util.UUID;
public class ExplosiveEntity extends Entity implements GeoEntity, AnimatedEntity, OwnableEntity { public class C4Entity extends Entity implements GeoEntity, AnimatedEntity, OwnableEntity {
protected static final EntityDataAccessor<Optional<UUID>> OWNER_UUID = SynchedEntityData.defineId(ExplosiveEntity.class, EntityDataSerializers.OPTIONAL_UUID); protected static final EntityDataAccessor<Optional<UUID>> OWNER_UUID = SynchedEntityData.defineId(C4Entity.class, EntityDataSerializers.OPTIONAL_UUID);
protected static final EntityDataAccessor<String> LAST_ATTACKER_UUID = SynchedEntityData.defineId(ExplosiveEntity.class, EntityDataSerializers.STRING); protected static final EntityDataAccessor<String> LAST_ATTACKER_UUID = SynchedEntityData.defineId(C4Entity.class, EntityDataSerializers.STRING);
protected static final EntityDataAccessor<Optional<UUID>> TARGET_UUID = SynchedEntityData.defineId(ExplosiveEntity.class, EntityDataSerializers.OPTIONAL_UUID); protected static final EntityDataAccessor<Optional<UUID>> TARGET_UUID = SynchedEntityData.defineId(C4Entity.class, EntityDataSerializers.OPTIONAL_UUID);
protected static final EntityDataAccessor<Float> REL_X = SynchedEntityData.defineId(ExplosiveEntity.class, EntityDataSerializers.FLOAT); protected static final EntityDataAccessor<Float> REL_X = SynchedEntityData.defineId(C4Entity.class, EntityDataSerializers.FLOAT);
protected static final EntityDataAccessor<Float> REL_Y = SynchedEntityData.defineId(ExplosiveEntity.class, EntityDataSerializers.FLOAT); protected static final EntityDataAccessor<Float> REL_Y = SynchedEntityData.defineId(C4Entity.class, EntityDataSerializers.FLOAT);
protected static final EntityDataAccessor<Float> REL_Z = SynchedEntityData.defineId(ExplosiveEntity.class, EntityDataSerializers.FLOAT); protected static final EntityDataAccessor<Float> REL_Z = SynchedEntityData.defineId(C4Entity.class, EntityDataSerializers.FLOAT);
public static final EntityDataAccessor<Float> HEALTH = SynchedEntityData.defineId(ExplosiveEntity.class, EntityDataSerializers.FLOAT); public static final EntityDataAccessor<Float> HEALTH = SynchedEntityData.defineId(C4Entity.class, EntityDataSerializers.FLOAT);
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
public ExplosiveEntity(EntityType<ExplosiveEntity> type, Level world) { public C4Entity(EntityType<C4Entity> type, Level world) {
super(type, world); super(type, world);
this.noCulling = true; this.noCulling = true;
} }
public ExplosiveEntity(LivingEntity owner, Level level) { public C4Entity(LivingEntity owner, Level level) {
super(ModEntities.EXPLOSIVE.get(), level); super(ModEntities.C_4.get(), level);
this.setOwnerUUID(owner.getUUID()); this.setOwnerUUID(owner.getUUID());
ModUtils.queueServerWork(1, () -> { ModUtils.queueServerWork(1, () -> {
if (this.level().isClientSide()) return; if (this.level().isClientSide()) return;
@ -272,7 +262,7 @@ public class ExplosiveEntity extends Entity implements GeoEntity, AnimatedEntity
public void destroy() { public void destroy() {
if (this.level() instanceof ServerLevel && this.tickCount < ExplosionConfig.C4_EXPLOSION_COUNTDOWN.get()) { if (this.level() instanceof ServerLevel && this.tickCount < ExplosionConfig.C4_EXPLOSION_COUNTDOWN.get()) {
ItemEntity c4 = new ItemEntity(this.level(), this.getX(), this.getY(), this.getZ(), new ItemStack(ModItems.EXPLOSIVE_MINE.get())); ItemEntity c4 = new ItemEntity(this.level(), this.getX(), this.getY(), this.getZ(), new ItemStack(ModItems.C4_BOMB.get()));
c4.setPickUpDelay(10); c4.setPickUpDelay(10);
this.level().addFreshEntity(c4); this.level().addFreshEntity(c4);
this.discard(); this.discard();

View file

@ -328,7 +328,7 @@ public class DroneEntity extends MobileVehicleEntity implements GeoEntity {
if (this.entityData.get(KAMIKAZE_MODE) == 1) { if (this.entityData.get(KAMIKAZE_MODE) == 1) {
ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(ModItems.MORTAR_SHELLS.get())); ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(ModItems.MORTAR_SHELLS.get()));
} else if (this.entityData.get(KAMIKAZE_MODE) == 2) { } else if (this.entityData.get(KAMIKAZE_MODE) == 2) {
ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(ModItems.EXPLOSIVE_MINE.get())); ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(ModItems.C4_BOMB.get()));
} }
player.getInventory().items.stream().filter(stack_ -> stack_.getItem() == ModItems.MONITOR.get()) player.getInventory().items.stream().filter(stack_ -> stack_.getItem() == ModItems.MONITOR.get())
@ -359,7 +359,7 @@ public class DroneEntity extends MobileVehicleEntity implements GeoEntity {
if (player instanceof ServerPlayer serverPlayer) { if (player instanceof ServerPlayer serverPlayer) {
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.BULLET_SUPPLY.get(), SoundSource.PLAYERS, 0.5F, 1); serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.BULLET_SUPPLY.get(), SoundSource.PLAYERS, 0.5F, 1);
} }
} else if (stack.getItem() == ModItems.EXPLOSIVE_MINE.get() && this.entityData.get(AMMO) == 0 && this.entityData.get(KAMIKAZE_MODE) == 0) { } else if (stack.getItem() == ModItems.C4_BOMB.get() && this.entityData.get(AMMO) == 0 && this.entityData.get(KAMIKAZE_MODE) == 0) {
// C4神风 // C4神风
if (!player.isCreative()) { if (!player.isCreative()) {
stack.shrink(1); stack.shrink(1);

View file

@ -223,10 +223,10 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa
float eyeHeight = entity.getEyeHeight(); float eyeHeight = entity.getEyeHeight();
float bodyHeight = entity.getBbHeight(); float bodyHeight = entity.getBbHeight();
if ((eyeHeight - 0.35) < hitBoxPos.y && hitBoxPos.y < (eyeHeight + 0.4) && if ((eyeHeight - 0.35) < hitBoxPos.y && hitBoxPos.y < (eyeHeight + 0.4) &&
!(entity instanceof ExplosiveEntity || entity instanceof ClaymoreEntity || entity instanceof MortarEntity || entity instanceof IArmedVehicleEntity || entity instanceof DroneEntity)) { !(entity instanceof C4Entity || entity instanceof ClaymoreEntity || entity instanceof MortarEntity || entity instanceof IArmedVehicleEntity || entity instanceof DroneEntity)) {
headshot = true; headshot = true;
} }
if (hitBoxPos.y < (0.33 * bodyHeight) && !(entity instanceof ExplosiveEntity || entity instanceof ClaymoreEntity || entity instanceof MortarEntity || if (hitBoxPos.y < (0.33 * bodyHeight) && !(entity instanceof C4Entity || entity instanceof ClaymoreEntity || entity instanceof MortarEntity ||
entity instanceof IArmedVehicleEntity || entity instanceof DroneEntity)) { entity instanceof IArmedVehicleEntity || entity instanceof DroneEntity)) {
legShot = true; legShot = true;
} }

View file

@ -67,7 +67,7 @@ public class ContainerMobileEntity extends MobileVehicleEntity implements HasCus
if (player.getVehicle() == this) return InteractionResult.PASS; if (player.getVehicle() == this) return InteractionResult.PASS;
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (stack.is(ModItems.EXPLOSIVE_MINE.get())) { if (stack.is(ModItems.C4_BOMB.get())) {
stack.use(player.level(), player, hand); stack.use(player.level(), player, hand);
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} }

View file

@ -1,8 +1,8 @@
package com.atsuishio.superbwarfare.entity.vehicle; package com.atsuishio.superbwarfare.entity.vehicle;
import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.entity.C4Entity;
import com.atsuishio.superbwarfare.entity.DroneEntity; import com.atsuishio.superbwarfare.entity.DroneEntity;
import com.atsuishio.superbwarfare.entity.ExplosiveEntity;
import com.atsuishio.superbwarfare.init.ModDamageTypes; import com.atsuishio.superbwarfare.init.ModDamageTypes;
import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModParticleTypes; import com.atsuishio.superbwarfare.init.ModParticleTypes;
@ -225,7 +225,7 @@ public class VehicleEntity extends Entity {
@Override @Override
protected boolean canAddPassenger(Entity pPassenger) { protected boolean canAddPassenger(Entity pPassenger) {
ModUtils.LOGGER.info(pPassenger.getClass().toString()); ModUtils.LOGGER.info(pPassenger.getClass().toString());
return this.getPassengers().size() < this.getMaxPassengers() || pPassenger instanceof ExplosiveEntity; return this.getPassengers().size() < this.getMaxPassengers() || pPassenger instanceof C4Entity;
} }
public int getMaxPassengers() { public int getMaxPassengers() {

View file

@ -31,8 +31,8 @@ public class ModEntities {
.sized(0.6f, 2f)); .sized(0.6f, 2f));
public static final RegistryObject<EntityType<ClaymoreEntity>> CLAYMORE = register("claymore", public static final RegistryObject<EntityType<ClaymoreEntity>> CLAYMORE = register("claymore",
EntityType.Builder.<ClaymoreEntity>of(ClaymoreEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(64).setUpdateInterval(1).sized(0.5f, 0.5f)); EntityType.Builder.<ClaymoreEntity>of(ClaymoreEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(64).setUpdateInterval(1).sized(0.5f, 0.5f));
public static final RegistryObject<EntityType<ExplosiveEntity>> EXPLOSIVE = register("c4", public static final RegistryObject<EntityType<C4Entity>> C_4 = register("c4",
EntityType.Builder.<ExplosiveEntity>of(ExplosiveEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(64).setUpdateInterval(1).sized(0.5f, 0.5f)); EntityType.Builder.<C4Entity>of(C4Entity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(64).setUpdateInterval(1).sized(0.5f, 0.5f));
public static final RegistryObject<EntityType<Mk42Entity>> MK_42 = register("mk_42", public static final RegistryObject<EntityType<Mk42Entity>> MK_42 = register("mk_42",
EntityType.Builder.<Mk42Entity>of(Mk42Entity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(64).setUpdateInterval(3).setCustomClientFactory(Mk42Entity::new).fireImmune().sized(3.4f, 3.5f)); EntityType.Builder.<Mk42Entity>of(Mk42Entity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(64).setUpdateInterval(3).setCustomClientFactory(Mk42Entity::new).fireImmune().sized(3.4f, 3.5f));
public static final RegistryObject<EntityType<Mle1934Entity>> MLE_1934 = register("mle_1934", public static final RegistryObject<EntityType<Mle1934Entity>> MLE_1934 = register("mle_1934",

View file

@ -14,7 +14,7 @@ public class ModEntityRenderers {
event.registerEntityRenderer(ModEntities.MORTAR.get(), MortarRenderer::new); event.registerEntityRenderer(ModEntities.MORTAR.get(), MortarRenderer::new);
event.registerEntityRenderer(ModEntities.SENPAI.get(), SenpaiRenderer::new); event.registerEntityRenderer(ModEntities.SENPAI.get(), SenpaiRenderer::new);
event.registerEntityRenderer(ModEntities.CLAYMORE.get(), ClaymoreRenderer::new); event.registerEntityRenderer(ModEntities.CLAYMORE.get(), ClaymoreRenderer::new);
event.registerEntityRenderer(ModEntities.EXPLOSIVE.get(), ExplosiveRenderer::new); event.registerEntityRenderer(ModEntities.C_4.get(), C4Renderer::new);
event.registerEntityRenderer(ModEntities.TASER_BULLET_PROJECTILE.get(), TaserBulletProjectileRenderer::new); event.registerEntityRenderer(ModEntities.TASER_BULLET_PROJECTILE.get(), TaserBulletProjectileRenderer::new);
event.registerEntityRenderer(ModEntities.GUN_GRENADE.get(), GunGrenadeRenderer::new); event.registerEntityRenderer(ModEntities.GUN_GRENADE.get(), GunGrenadeRenderer::new);
event.registerEntityRenderer(ModEntities.TARGET.get(), TargetRenderer::new); event.registerEntityRenderer(ModEntities.TARGET.get(), TargetRenderer::new);

View file

@ -106,7 +106,7 @@ public class ModItems {
public static final RegistryObject<Item> HAND_GRENADE = AMMO.register("hand_grenade", HandGrenade::new); public static final RegistryObject<Item> HAND_GRENADE = AMMO.register("hand_grenade", HandGrenade::new);
public static final RegistryObject<Item> RGO_GRENADE = AMMO.register("rgo_grenade", RgoGrenade::new); public static final RegistryObject<Item> RGO_GRENADE = AMMO.register("rgo_grenade", RgoGrenade::new);
public static final RegistryObject<Item> CLAYMORE_MINE = AMMO.register("claymore_mine", ClaymoreMine::new); public static final RegistryObject<Item> CLAYMORE_MINE = AMMO.register("claymore_mine", ClaymoreMine::new);
public static final RegistryObject<Item> EXPLOSIVE_MINE = AMMO.register("explosive_mine", ExplosiveMine::new); public static final RegistryObject<Item> C4_BOMB = AMMO.register("c4_bomb", C4Bomb::new);
public static final RegistryObject<Item> HEAVY_AMMO = AMMO.register("heavy_ammo", () -> new Item(new Item.Properties())); public static final RegistryObject<Item> HEAVY_AMMO = AMMO.register("heavy_ammo", () -> new Item(new Item.Properties()));
public static final RegistryObject<Item> ROCKET_70 = AMMO.register("rocket_70", () -> new Item(new Item.Properties())); public static final RegistryObject<Item> ROCKET_70 = AMMO.register("rocket_70", () -> new Item(new Item.Properties()));
public static final RegistryObject<Item> SMALL_SHELL = AMMO.register("small_shell", () -> new Item(new Item.Properties())); public static final RegistryObject<Item> SMALL_SHELL = AMMO.register("small_shell", () -> new Item(new Item.Properties()));

View file

@ -153,7 +153,7 @@ public class ModVillagers {
trades.get(4).add(new BasicItemListing(new ItemStack(Items.EMERALD, 4), trades.get(4).add(new BasicItemListing(new ItemStack(Items.EMERALD, 4),
new ItemStack(ModItems.CLAYMORE_MINE.get(), 1), 16, 5, 0.05f)); new ItemStack(ModItems.CLAYMORE_MINE.get(), 1), 16, 5, 0.05f));
trades.get(4).add(new BasicItemListing(new ItemStack(Items.EMERALD, 4), trades.get(4).add(new BasicItemListing(new ItemStack(Items.EMERALD, 4),
new ItemStack(ModItems.EXPLOSIVE_MINE.get(), 1), 16, 5, 0.05f)); new ItemStack(ModItems.C4_BOMB.get(), 1), 16, 5, 0.05f));
trades.get(4).add(new BasicItemListing(new ItemStack(Items.EMERALD, 4), trades.get(4).add(new BasicItemListing(new ItemStack(Items.EMERALD, 4),
new ItemStack(ModItems.ROCKET.get(), 1), 16, 5, 0.05f)); new ItemStack(ModItems.ROCKET.get(), 1), 16, 5, 0.05f));
@ -167,7 +167,7 @@ public class ModVillagers {
new ItemStack(Items.EMERALD, 2), 32, 5, 0.05f)); new ItemStack(Items.EMERALD, 2), 32, 5, 0.05f));
trades.get(4).add(new BasicItemListing(new ItemStack(ModItems.CLAYMORE_MINE.get(), 1), trades.get(4).add(new BasicItemListing(new ItemStack(ModItems.CLAYMORE_MINE.get(), 1),
new ItemStack(Items.EMERALD, 2), 32, 5, 0.05f)); new ItemStack(Items.EMERALD, 2), 32, 5, 0.05f));
trades.get(4).add(new BasicItemListing(new ItemStack(ModItems.EXPLOSIVE_MINE.get(), 1), trades.get(4).add(new BasicItemListing(new ItemStack(ModItems.C4_BOMB.get(), 1),
new ItemStack(Items.EMERALD, 2), 32, 5, 0.05f)); new ItemStack(Items.EMERALD, 2), 32, 5, 0.05f));
trades.get(4).add(new BasicItemListing(new ItemStack(ModItems.ROCKET.get(), 1), trades.get(4).add(new BasicItemListing(new ItemStack(ModItems.ROCKET.get(), 1),
new ItemStack(Items.EMERALD, 2), 32, 5, 0.05f)); new ItemStack(Items.EMERALD, 2), 32, 5, 0.05f));

View file

@ -1,17 +1,16 @@
package com.atsuishio.superbwarfare.item; package com.atsuishio.superbwarfare.item;
import com.atsuishio.superbwarfare.entity.ExplosiveEntity; import com.atsuishio.superbwarfare.entity.C4Entity;
import com.atsuishio.superbwarfare.tools.EntityFindUtil; import com.atsuishio.superbwarfare.tools.EntityFindUtil;
import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
public class ExplosiveMine extends Item { public class C4Bomb extends Item {
public ExplosiveMine() { public C4Bomb() {
super(new Item.Properties()); super(new Item.Properties());
} }
@ -25,7 +24,7 @@ public class ExplosiveMine extends Item {
} }
} }
if (!level.isClientSide) { if (!level.isClientSide) {
ExplosiveEntity entity = new ExplosiveEntity(player, level); C4Entity entity = new C4Entity(player, level);
entity.moveTo(player.getX(), player.getY() + 1.1, player.getZ(), player.getYRot(), 0); entity.moveTo(player.getX(), player.getY() + 1.1, player.getZ(), player.getYRot(), 0);
entity.setYBodyRot(player.getYRot()); entity.setYBodyRot(player.getYRot());
entity.setYHeadRot(player.getYRot()); entity.setYHeadRot(player.getYRot());

View file

@ -1,7 +1,7 @@
package com.atsuishio.superbwarfare.tools; package com.atsuishio.superbwarfare.tools;
import com.atsuishio.superbwarfare.entity.C4Entity;
import com.atsuishio.superbwarfare.entity.ClaymoreEntity; import com.atsuishio.superbwarfare.entity.ClaymoreEntity;
import com.atsuishio.superbwarfare.entity.ExplosiveEntity;
import com.atsuishio.superbwarfare.entity.projectile.ProjectileEntity; import com.atsuishio.superbwarfare.entity.projectile.ProjectileEntity;
import com.atsuishio.superbwarfare.entity.vehicle.MobileVehicleEntity; import com.atsuishio.superbwarfare.entity.vehicle.MobileVehicleEntity;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
@ -40,7 +40,7 @@ public class SeekTool {
&& e.isAlive() && e.isAlive()
&& e.getVehicle() == null && e.getVehicle() == null
&& !(e instanceof Player player && (player.isSpectator())) && !(e instanceof Player player && (player.isSpectator()))
&& !(e instanceof ItemEntity || e instanceof ExperienceOrb || e instanceof HangingEntity || e instanceof ProjectileEntity || e instanceof Projectile || e instanceof ArmorStand || e instanceof ClaymoreEntity || e instanceof ExplosiveEntity || e instanceof AreaEffectCloud) && !(e instanceof ItemEntity || e instanceof ExperienceOrb || e instanceof HangingEntity || e instanceof ProjectileEntity || e instanceof Projectile || e instanceof ArmorStand || e instanceof ClaymoreEntity || e instanceof C4Entity || e instanceof AreaEffectCloud)
) { ) {
return level.clip(new ClipContext(entity.getEyePosition(), e.getEyePosition(), return level.clip(new ClipContext(entity.getEyePosition(), e.getEyePosition(),
ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, entity)).getType() != HitResult.Type.BLOCK; ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, entity)).getType() != HitResult.Type.BLOCK;
@ -55,7 +55,7 @@ public class SeekTool {
if (e.distanceTo(entity) <= seekRange && calculateAngle(e, entity) < seekAngle if (e.distanceTo(entity) <= seekRange && calculateAngle(e, entity) < seekAngle
&& e != entity && e != entity
&& e.isAlive() && e.isAlive()
&& !(e instanceof ItemEntity || e instanceof ExperienceOrb || e instanceof HangingEntity || e instanceof ProjectileEntity || e instanceof Projectile || e instanceof ArmorStand || e instanceof ClaymoreEntity || e instanceof ExplosiveEntity || e instanceof AreaEffectCloud) && !(e instanceof ItemEntity || e instanceof ExperienceOrb || e instanceof HangingEntity || e instanceof ProjectileEntity || e instanceof Projectile || e instanceof ArmorStand || e instanceof ClaymoreEntity || e instanceof C4Entity || e instanceof AreaEffectCloud)
&& e.getVehicle() == null && e.getVehicle() == null
&& !(e instanceof Player player && (player.isSpectator())) && !(e instanceof Player player && (player.isSpectator()))
&& (!e.isAlliedTo(entity) || e.getTeam() == null || e.getTeam().getName().equals("TDM"))) { && (!e.isAlliedTo(entity) || e.getTeam() == null || e.getTeam().getName().equals("TDM"))) {
@ -72,7 +72,7 @@ public class SeekTool {
if (e.distanceTo(entity) <= seekRange && calculateAngle(e, entity) < seekAngle if (e.distanceTo(entity) <= seekRange && calculateAngle(e, entity) < seekAngle
&& e != entity && e != entity
&& e.isAlive() && e.isAlive()
&& !(e instanceof ItemEntity || e instanceof ExperienceOrb || e instanceof HangingEntity || e instanceof ProjectileEntity || e instanceof Projectile || e instanceof ArmorStand || e instanceof ClaymoreEntity || e instanceof ExplosiveEntity || e instanceof AreaEffectCloud) && !(e instanceof ItemEntity || e instanceof ExperienceOrb || e instanceof HangingEntity || e instanceof ProjectileEntity || e instanceof Projectile || e instanceof ArmorStand || e instanceof ClaymoreEntity || e instanceof C4Entity || e instanceof AreaEffectCloud)
&& e.getVehicle() == null && e.getVehicle() == null
&& !(e instanceof Player player && (player.isSpectator())) && !(e instanceof Player player && (player.isSpectator()))
&& (!e.isAlliedTo(entity) || e.getTeam() == null || e.getTeam().getName().equals("TDM"))) { && (!e.isAlliedTo(entity) || e.getTeam() == null || e.getTeam().getName().equals("TDM"))) {
@ -87,7 +87,7 @@ public class SeekTool {
return StreamSupport.stream(EntityFindUtil.getEntities(level).getAll().spliterator(), false) return StreamSupport.stream(EntityFindUtil.getEntities(level).getAll().spliterator(), false)
.filter(e -> e.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) <= range * range .filter(e -> e.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) <= range * range
&& e.isAlive() && e.isAlive()
&& !(e instanceof ItemEntity || e instanceof ExperienceOrb || e instanceof HangingEntity || e instanceof ProjectileEntity || e instanceof Projectile || e instanceof ArmorStand || e instanceof ClaymoreEntity || e instanceof ExplosiveEntity || e instanceof AreaEffectCloud) && !(e instanceof ItemEntity || e instanceof ExperienceOrb || e instanceof HangingEntity || e instanceof ProjectileEntity || e instanceof Projectile || e instanceof ArmorStand || e instanceof ClaymoreEntity || e instanceof C4Entity || e instanceof AreaEffectCloud)
&& !(e instanceof Player player && player.isSpectator())) && !(e instanceof Player player && player.isSpectator()))
.toList(); .toList();
} }

View file

@ -174,7 +174,7 @@
"item.superbwarfare.mortar_barrel": "Mortar Barrel", "item.superbwarfare.mortar_barrel": "Mortar Barrel",
"item.superbwarfare.mortar_deployer": "Mortar", "item.superbwarfare.mortar_deployer": "Mortar",
"item.superbwarfare.claymore_mine": "Claymore", "item.superbwarfare.claymore_mine": "Claymore",
"item.superbwarfare.explosive_mine": "C4", "item.superbwarfare.c4_bomb": "C4",
"item.superbwarfare.seeker": "Seeker", "item.superbwarfare.seeker": "Seeker",
"item.superbwarfare.missile_engine": "Missile Engine", "item.superbwarfare.missile_engine": "Missile Engine",
"item.superbwarfare.fusee": "Fusee", "item.superbwarfare.fusee": "Fusee",

View file

@ -174,7 +174,7 @@
"item.superbwarfare.mortar_barrel": "迫击炮管", "item.superbwarfare.mortar_barrel": "迫击炮管",
"item.superbwarfare.mortar_deployer": "迫击炮", "item.superbwarfare.mortar_deployer": "迫击炮",
"item.superbwarfare.claymore_mine": "阔剑地雷", "item.superbwarfare.claymore_mine": "阔剑地雷",
"item.superbwarfare.explosive_mine": "C4炸药", "item.superbwarfare.c4_bomb": "C4炸药",
"item.superbwarfare.seeker": "导引头", "item.superbwarfare.seeker": "导引头",
"item.superbwarfare.missile_engine": "导弹发动机", "item.superbwarfare.missile_engine": "导弹发动机",
"item.superbwarfare.fusee": "引信", "item.superbwarfare.fusee": "引信",

View file

@ -2,6 +2,7 @@
"credit": "Made with Blockbench", "credit": "Made with Blockbench",
"texture_size": [32, 32], "texture_size": [32, 32],
"textures": { "textures": {
"0": "superbwarfare:entity/c4",
"particle": "superbwarfare:entity/c4" "particle": "superbwarfare:entity/c4"
}, },
"elements": [ "elements": [
@ -11,12 +12,12 @@
"to": [15, 3, 14], "to": [15, 3, 14],
"rotation": {"angle": 0, "axis": "y", "origin": [15, 0, 3]}, "rotation": {"angle": 0, "axis": "y", "origin": [15, 0, 3]},
"faces": { "faces": {
"north": {"uv": [7, 7, 14, 8.5], "texture": "#1"}, "north": {"uv": [7, 7, 14, 8.5], "texture": "#0"},
"east": {"uv": [7, 10, 12.5, 11.5], "texture": "#1"}, "east": {"uv": [7, 10, 12.5, 11.5], "texture": "#0"},
"south": {"uv": [7, 8.5, 14, 10], "texture": "#1"}, "south": {"uv": [7, 8.5, 14, 10], "texture": "#0"},
"west": {"uv": [10.5, 0, 16, 1.5], "texture": "#1"}, "west": {"uv": [10.5, 0, 16, 1.5], "texture": "#0"},
"up": {"uv": [7, 5.5, 0, 0], "texture": "#1"}, "up": {"uv": [7, 5.5, 0, 0], "texture": "#0"},
"down": {"uv": [7, 5.5, 0, 11], "texture": "#1"} "down": {"uv": [7, 5.5, 0, 11], "texture": "#0"}
} }
}, },
{ {
@ -25,12 +26,12 @@
"to": [14, 4, 13], "to": [14, 4, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [14, 3, 4]}, "rotation": {"angle": 0, "axis": "y", "origin": [14, 3, 4]},
"faces": { "faces": {
"north": {"uv": [5.5, 11.5, 6.5, 12], "texture": "#1"}, "north": {"uv": [5.5, 11.5, 6.5, 12], "texture": "#0"},
"east": {"uv": [10.5, 6, 15, 6.5], "texture": "#1"}, "east": {"uv": [10.5, 6, 15, 6.5], "texture": "#0"},
"south": {"uv": [11.5, 5.5, 12.5, 6], "texture": "#1"}, "south": {"uv": [11.5, 5.5, 12.5, 6], "texture": "#0"},
"west": {"uv": [10.5, 6.5, 15, 7], "texture": "#1"}, "west": {"uv": [10.5, 6.5, 15, 7], "texture": "#0"},
"up": {"uv": [11.5, 6, 10.5, 1.5], "texture": "#1"}, "up": {"uv": [11.5, 6, 10.5, 1.5], "texture": "#0"},
"down": {"uv": [1, 11, 0, 15.5], "texture": "#1"} "down": {"uv": [1, 11, 0, 15.5], "texture": "#0"}
} }
}, },
{ {
@ -39,12 +40,12 @@
"to": [10, 4, 12], "to": [10, 4, 12],
"rotation": {"angle": 0, "axis": "y", "origin": [10, 3, 5]}, "rotation": {"angle": 0, "axis": "y", "origin": [10, 3, 5]},
"faces": { "faces": {
"north": {"uv": [1, 11, 4.5, 11.5], "texture": "#1"}, "north": {"uv": [1, 11, 4.5, 11.5], "texture": "#0"},
"east": {"uv": [1, 11.5, 4.5, 12], "texture": "#1"}, "east": {"uv": [1, 11.5, 4.5, 12], "texture": "#0"},
"south": {"uv": [11.5, 1.5, 15, 2], "texture": "#1"}, "south": {"uv": [11.5, 1.5, 15, 2], "texture": "#0"},
"west": {"uv": [11.5, 2, 15, 2.5], "texture": "#1"}, "west": {"uv": [11.5, 2, 15, 2.5], "texture": "#0"},
"up": {"uv": [10.5, 3.5, 7, 0], "texture": "#1"}, "up": {"uv": [10.5, 3.5, 7, 0], "texture": "#0"},
"down": {"uv": [10.5, 3.5, 7, 7], "texture": "#1"} "down": {"uv": [10.5, 3.5, 7, 7], "texture": "#0"}
} }
}, },
{ {
@ -53,12 +54,12 @@
"to": [10, 2, 3], "to": [10, 2, 3],
"rotation": {"angle": 0, "axis": "y", "origin": [10, 1, 2]}, "rotation": {"angle": 0, "axis": "y", "origin": [10, 1, 2]},
"faces": { "faces": {
"north": {"uv": [4.5, 11, 7, 11.5], "texture": "#1"}, "north": {"uv": [4.5, 11, 7, 11.5], "texture": "#0"},
"east": {"uv": [7.5, 11.5, 8, 12], "texture": "#1"}, "east": {"uv": [7.5, 11.5, 8, 12], "texture": "#0"},
"south": {"uv": [11.5, 2.5, 14, 3], "texture": "#1"}, "south": {"uv": [11.5, 2.5, 14, 3], "texture": "#0"},
"west": {"uv": [8, 11.5, 8.5, 12], "texture": "#1"}, "west": {"uv": [8, 11.5, 8.5, 12], "texture": "#0"},
"up": {"uv": [14, 3.5, 11.5, 3], "texture": "#1"}, "up": {"uv": [14, 3.5, 11.5, 3], "texture": "#0"},
"down": {"uv": [14, 3.5, 11.5, 4], "texture": "#1"} "down": {"uv": [14, 3.5, 11.5, 4], "texture": "#0"}
} }
}, },
{ {
@ -67,12 +68,12 @@
"to": [14, 2, 3], "to": [14, 2, 3],
"rotation": {"angle": 0, "axis": "y", "origin": [14, 1, 2]}, "rotation": {"angle": 0, "axis": "y", "origin": [14, 1, 2]},
"faces": { "faces": {
"north": {"uv": [11.5, 4, 12.5, 4.5], "texture": "#1"}, "north": {"uv": [11.5, 4, 12.5, 4.5], "texture": "#0"},
"east": {"uv": [6.5, 11.5, 7, 12], "texture": "#1"}, "east": {"uv": [6.5, 11.5, 7, 12], "texture": "#0"},
"south": {"uv": [4.5, 11.5, 5.5, 12], "texture": "#1"}, "south": {"uv": [4.5, 11.5, 5.5, 12], "texture": "#0"},
"west": {"uv": [7, 11.5, 7.5, 12], "texture": "#1"}, "west": {"uv": [7, 11.5, 7.5, 12], "texture": "#0"},
"up": {"uv": [12.5, 5, 11.5, 4.5], "texture": "#1"}, "up": {"uv": [12.5, 5, 11.5, 4.5], "texture": "#0"},
"down": {"uv": [12.5, 5, 11.5, 5.5], "texture": "#1"} "down": {"uv": [12.5, 5, 11.5, 5.5], "texture": "#0"}
} }
} }
], ],

View file

@ -0,0 +1,143 @@
{
"credit": "Made with Blockbench",
"texture_size": [32, 32],
"textures": {
"0": "superbwarfare:item/c4",
"particle": "superbwarfare:item/c4"
},
"elements": [
{
"name": "body",
"from": [0, 0, 3],
"to": [15, 3, 14],
"rotation": {"angle": 0, "axis": "y", "origin": [15, 0, 3]},
"faces": {
"north": {"uv": [7, 7, 14, 8.5], "texture": "#0"},
"east": {"uv": [7, 10, 12.5, 11.5], "texture": "#0"},
"south": {"uv": [7, 8.5, 14, 10], "texture": "#0"},
"west": {"uv": [10.5, 0, 16, 1.5], "texture": "#0"},
"up": {"uv": [7, 5.5, 0, 0], "texture": "#0"},
"down": {"uv": [7, 5.5, 0, 11], "texture": "#0"}
}
},
{
"name": "screen",
"from": [12, 3, 4],
"to": [14, 4, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [14, 3, 4]},
"faces": {
"north": {"uv": [5.5, 11.5, 6.5, 12], "texture": "#0"},
"east": {"uv": [10.5, 6, 15, 6.5], "texture": "#0"},
"south": {"uv": [11.5, 5.5, 12.5, 6], "texture": "#0"},
"west": {"uv": [10.5, 6.5, 15, 7], "texture": "#0"},
"up": {"uv": [11.5, 6, 10.5, 1.5], "texture": "#0"},
"down": {"uv": [1, 11, 0, 15.5], "texture": "#0"}
}
},
{
"name": "panel",
"from": [3, 3, 5],
"to": [10, 4, 12],
"rotation": {"angle": 0, "axis": "y", "origin": [10, 3, 5]},
"faces": {
"north": {"uv": [1, 11, 4.5, 11.5], "texture": "#0"},
"east": {"uv": [1, 11.5, 4.5, 12], "texture": "#0"},
"south": {"uv": [11.5, 1.5, 15, 2], "texture": "#0"},
"west": {"uv": [11.5, 2, 15, 2.5], "texture": "#0"},
"up": {"uv": [10.5, 3.5, 7, 0], "texture": "#0"},
"down": {"uv": [10.5, 3.5, 7, 7], "texture": "#0"}
}
},
{
"name": "black",
"from": [5, 1, 2],
"to": [10, 2, 3],
"rotation": {"angle": 0, "axis": "y", "origin": [10, 1, 2]},
"faces": {
"north": {"uv": [4.5, 11, 7, 11.5], "texture": "#0"},
"east": {"uv": [7.5, 11.5, 8, 12], "texture": "#0"},
"south": {"uv": [11.5, 2.5, 14, 3], "texture": "#0"},
"west": {"uv": [8, 11.5, 8.5, 12], "texture": "#0"},
"up": {"uv": [14, 3.5, 11.5, 3], "texture": "#0"},
"down": {"uv": [14, 3.5, 11.5, 4], "texture": "#0"}
}
},
{
"name": "swtich",
"from": [12, 1, 2],
"to": [14, 2, 3],
"rotation": {"angle": 0, "axis": "y", "origin": [14, 1, 2]},
"faces": {
"north": {"uv": [11.5, 4, 12.5, 4.5], "texture": "#0"},
"east": {"uv": [6.5, 11.5, 7, 12], "texture": "#0"},
"south": {"uv": [4.5, 11.5, 5.5, 12], "texture": "#0"},
"west": {"uv": [7, 11.5, 7.5, 12], "texture": "#0"},
"up": {"uv": [12.5, 5, 11.5, 4.5], "texture": "#0"},
"down": {"uv": [12.5, 5, 11.5, 5.5], "texture": "#0"}
}
}
],
"gui_light": "front",
"display": {
"thirdperson_righthand": {
"rotation": [45, 50, 85],
"translation": [-2, 0, 1.5],
"scale": [0.3, 0.3, 0.3]
},
"thirdperson_lefthand": {
"rotation": [45, 50, 85],
"translation": [-2, 0, 1.5],
"scale": [0.3, 0.3, 0.3]
},
"firstperson_righthand": {
"rotation": [0, 50, 85],
"translation": [0, 1.5, 0],
"scale": [0.5, 0.5, 0.5]
},
"firstperson_lefthand": {
"rotation": [0, -130, -85],
"translation": [0, 1.5, 0],
"scale": [0.5, 0.5, 0.5]
},
"ground": {
"translation": [0, 2, 0],
"scale": [0.5, 0.5, 0.5]
},
"gui": {
"rotation": [90, 90, 0],
"scale": [0.8, 0.8, 0.8]
},
"head": {
"rotation": [90, 90, 0],
"translation": [0, -12, 4.75],
"scale": [0.2, 0.2, 0.2]
},
"fixed": {
"rotation": [-90, -90, 0],
"translation": [0, 0, -7]
}
},
"groups": [
{
"name": "c4",
"origin": [8, 0, 8],
"color": 0,
"children": [
0,
1,
{
"name": "button_group",
"origin": [10, 3, 5],
"color": 0,
"children": [2]
},
{
"name": "triggers",
"origin": [8, 0, 8],
"color": 0,
"children": [3, 4]
}
]
}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 370 B

View file

Before

Width:  |  Height:  |  Size: 377 B

After

Width:  |  Height:  |  Size: 377 B