diff --git a/src/main/java/net/mcreator/superbwarfare/ModUtils.java b/src/main/java/net/mcreator/superbwarfare/ModUtils.java index fce9be2e1..bab0aae81 100644 --- a/src/main/java/net/mcreator/superbwarfare/ModUtils.java +++ b/src/main/java/net/mcreator/superbwarfare/ModUtils.java @@ -125,6 +125,8 @@ public class ModUtils { addNetworkMessage(ShootMessage.class, ShootMessage::encode, ShootMessage::decode, ShootMessage::handler); addNetworkMessage(ShootClientMessage.class, ShootClientMessage::encode, ShootClientMessage::decode, ShootClientMessage::handle, Optional.of(NetworkDirection.PLAY_TO_CLIENT)); addNetworkMessage(DrawClientMessage.class, DrawClientMessage::encode, DrawClientMessage::decode, DrawClientMessage::handle, Optional.of(NetworkDirection.PLAY_TO_CLIENT)); + addNetworkMessage(EditModeMessage.class, EditModeMessage::encode, EditModeMessage::new, EditModeMessage::handler); + addNetworkMessage(EditMessage.class, EditMessage::encode, EditMessage::new, EditMessage::handler); event.enqueueWork(() -> BrewingRecipeRegistry.addRecipe(Ingredient.of(PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER)), Ingredient.of(Items.LIGHTNING_ROD), PotionUtils.setPotion(new ItemStack(Items.POTION), ModPotion.SHOCK.get()))); diff --git a/src/main/java/net/mcreator/superbwarfare/client/model/item/AK12ItemModel.java b/src/main/java/net/mcreator/superbwarfare/client/model/item/AK12ItemModel.java index f4dc9c613..1f8e3dddf 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/model/item/AK12ItemModel.java +++ b/src/main/java/net/mcreator/superbwarfare/client/model/item/AK12ItemModel.java @@ -60,10 +60,29 @@ public class AK12ItemModel extends GeoModel { double fp = ClientEventHandler.firePos; double fr = ClientEventHandler.fireRot; + int type = stack.getOrCreateTag().getInt("scope_type"); + + float posY = 0; + float scaleZ = 0; + gun.setPosX(1.97f * (float) zp); - gun.setPosY(0.351f * (float) zp - (float) (0.2f * zpz)); + if (type == 0) { + posY = 0.781f; + scaleZ = 0.55f; + } else if (type == 1) { + posY = 0.351f; + scaleZ = 0.4f; + } else if (type == 2) { + posY = 0.781f; + scaleZ = 0.55f; + } else if (type == 3) { + posY = 0.781f; + scaleZ = 0.55f; + } + + gun.setPosY(posY * (float) zp - (float) (0.2f * zpz)); gun.setPosZ(2.8f * (float) zp + (float) (0.5f * zpz)); - gun.setScaleZ(1f - (0.4f * (float) zp)); + gun.setScaleZ(1f - (scaleZ * (float) zp)); scope.setScaleZ(1f - (0.4f * (float) zp)); stack.getOrCreateTag().putBoolean("HoloHidden", !(gun.getPosX() > 1.8)); @@ -76,8 +95,8 @@ public class AK12ItemModel extends GeoModel { shen.setRotZ((float) ((0.08f + 0.1 * fr) * ClientEventHandler.recoilHorizon)); shen.setPosX((float) (shen.getPosX() * (1 - 0.5 * zt))); - shen.setPosY((float) (shen.getPosY() * (-1 + 0.4 * zt))); - shen.setPosZ((float) (shen.getPosZ() * (1 - 0.6 * zt))); + shen.setPosY((float) (shen.getPosY() * (-1 + 0.8 * zt))); + shen.setPosZ((float) (shen.getPosZ() * (1 - 0.3 * zt))); shen.setRotX((float) (shen.getRotX() * (1 - 0.9 * zt))); shen.setRotY((float) (shen.getRotY() * (1 - 0.9 * zt))); shen.setRotZ((float) (shen.getRotZ() * (1 - 0.9 * zt))); diff --git a/src/main/java/net/mcreator/superbwarfare/client/renderer/item/AK12ItemRenderer.java b/src/main/java/net/mcreator/superbwarfare/client/renderer/item/AK12ItemRenderer.java index 3d414203c..59ba3e2da 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/renderer/item/AK12ItemRenderer.java +++ b/src/main/java/net/mcreator/superbwarfare/client/renderer/item/AK12ItemRenderer.java @@ -101,7 +101,20 @@ public class AK12ItemRenderer extends GeoItemRenderer { itemStack = player.getMainHandItem(); } if (player != null) { - bone.setHidden(itemStack.getOrCreateTag().getBoolean("HoloHidden") || GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) != GLFW.GLFW_PRESS); + bone.setHidden(itemStack.getOrCreateTag().getBoolean("HoloHidden") + || GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) != GLFW.GLFW_PRESS + || itemStack.getOrCreateTag().getInt("scope_type") != 1); + } + } + + if (name.equals("okp")) { + Player player = Minecraft.getInstance().player; + ItemStack itemStack = null; + if (player != null) { + itemStack = player.getMainHandItem(); + } + if (player != null) { + bone.setHidden(itemStack.getOrCreateTag().getInt("scope_type") != 1); } } diff --git a/src/main/java/net/mcreator/superbwarfare/client/screens/CrossHairOverlay.java b/src/main/java/net/mcreator/superbwarfare/client/screens/CrossHairOverlay.java index 77020d79f..57367bb47 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/screens/CrossHairOverlay.java +++ b/src/main/java/net/mcreator/superbwarfare/client/screens/CrossHairOverlay.java @@ -7,6 +7,7 @@ import net.mcreator.superbwarfare.config.client.DisplayConfig; import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.init.ModItems; import net.mcreator.superbwarfare.init.ModTags; +import net.mcreator.superbwarfare.network.ModVariables; import net.mcreator.superbwarfare.perk.AmmoPerk; import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.PerkHelper; @@ -49,6 +50,8 @@ public class CrossHairOverlay { return; } + if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit) return; + GuiGraphics guiGraphics = event.getGuiGraphics(); ItemStack stack = player.getMainHandItem(); diff --git a/src/main/java/net/mcreator/superbwarfare/client/screens/JavelinHudOverlay.java b/src/main/java/net/mcreator/superbwarfare/client/screens/JavelinHudOverlay.java index 265c3e44d..c9ba81069 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/screens/JavelinHudOverlay.java +++ b/src/main/java/net/mcreator/superbwarfare/client/screens/JavelinHudOverlay.java @@ -5,6 +5,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.init.ModItems; +import net.mcreator.superbwarfare.network.ModVariables; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.RenderType; @@ -33,6 +34,8 @@ public class JavelinHudOverlay { if (player != null) { ItemStack stack = player.getMainHandItem(); + if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit) return; + if ((stack.getItem() == ModItems.JAVELIN.get() && !stack.getOrCreateTag().getBoolean("HoloHidden")) && Minecraft.getInstance().options.getCameraType().isFirstPerson() && GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) == GLFW.GLFW_PRESS) { RenderSystem.disableDepthTest(); RenderSystem.depthMask(false); diff --git a/src/main/java/net/mcreator/superbwarfare/client/screens/M79UIOverlay.java b/src/main/java/net/mcreator/superbwarfare/client/screens/M79UIOverlay.java index 6b4af0117..76c75a9fc 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/screens/M79UIOverlay.java +++ b/src/main/java/net/mcreator/superbwarfare/client/screens/M79UIOverlay.java @@ -5,6 +5,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.entity.ICannonEntity; import net.mcreator.superbwarfare.init.ModItems; +import net.mcreator.superbwarfare.network.ModVariables; import net.minecraft.client.CameraType; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GameRenderer; @@ -24,6 +25,10 @@ public class M79UIOverlay { int w = event.getWindow().getGuiScaledWidth(); int h = event.getWindow().getGuiScaledHeight(); Player player = Minecraft.getInstance().player; + + if (player != null && player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit) + return; + RenderSystem.disableDepthTest(); RenderSystem.depthMask(false); RenderSystem.enableBlend(); diff --git a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java index 0289186b6..a9f1862e5 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java @@ -215,6 +215,7 @@ public class ClientEventHandler { && cantFireTime == 0 && drawTime < 0.01 && !notInGame() + && !player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit || (stack.is(ModItems.MINIGUN.get()) && !player.isSprinting() && stack.getOrCreateTag().getDouble("overheat") == 0 && !player.getCooldowns().isOnCooldown(stack.getItem()) && stack.getOrCreateTag().getDouble("minigun_rotation") >= 10 ))) { double customRpm = 0; @@ -490,7 +491,10 @@ public class ClientEventHandler { ItemStack stack = player.getMainHandItem(); float times = 5 * Minecraft.getInstance().getDeltaFrameTime(); double speed = stack.getOrCreateTag().getDouble("zoom_speed"); - if (GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) == GLFW.GLFW_PRESS && !notInGame() && drawTime < 0.01) { + if (GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) == GLFW.GLFW_PRESS + && !notInGame() + && drawTime < 0.01 + && !player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit) { if (Minecraft.getInstance().player != null) { Minecraft.getInstance().player.getPersistentData().putDouble("noRun", 5); } diff --git a/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java index b0fe2d41e..29329ae4e 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java @@ -287,6 +287,11 @@ public class LivingEventHandler { oldTags.putInt("sentinel_charge_time", 0); } + player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { + capability.edit = false; + capability.syncPlayerVariables(player); + }); + } if (newStack.getItem() instanceof GunItem) { diff --git a/src/main/java/net/mcreator/superbwarfare/init/ModKeyMappings.java b/src/main/java/net/mcreator/superbwarfare/init/ModKeyMappings.java index 59b0a8c56..a4eeb8594 100644 --- a/src/main/java/net/mcreator/superbwarfare/init/ModKeyMappings.java +++ b/src/main/java/net/mcreator/superbwarfare/init/ModKeyMappings.java @@ -103,6 +103,76 @@ public class ModKeyMappings { public static final KeyMapping CONFIG = new KeyMapping("key.superbwarfare.config", KeyConflictContext.IN_GAME, KeyModifier.ALT, InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_O, "key.categories.superbwarfare"); + public static final KeyMapping EDIT_MODE = new KeyMapping("key.superbwarfare.edit_mode", GLFW.GLFW_KEY_H, "key.categories.superbwarfare") { + private boolean isDownOld = false; + + @Override + public void setDown(boolean isDown) { + super.setDown(isDown); + if (isDownOld != isDown && isDown) { + ModUtils.PACKET_HANDLER.sendToServer(new EditModeMessage(0)); + EditModeMessage.pressAction(Minecraft.getInstance().player, 0); + } + isDownOld = isDown; + } + }; + + public static final KeyMapping EDIT_SCOPE = new KeyMapping("key.superbwarfare.edit_scope", GLFW.GLFW_KEY_UP, "key.categories.superbwarfare") { + private boolean isDownOld = false; + + @Override + public void setDown(boolean isDown) { + super.setDown(isDown); + if (isDownOld != isDown && isDown) { + ModUtils.PACKET_HANDLER.sendToServer(new EditMessage(0)); + EditMessage.pressAction(Minecraft.getInstance().player, 0); + } + isDownOld = isDown; + } + }; + + public static final KeyMapping EDIT_BARREL = new KeyMapping("key.superbwarfare.edit_barrel", GLFW.GLFW_KEY_LEFT, "key.categories.superbwarfare") { + private boolean isDownOld = false; + + @Override + public void setDown(boolean isDown) { + super.setDown(isDown); + if (isDownOld != isDown && isDown) { + ModUtils.PACKET_HANDLER.sendToServer(new EditMessage(1)); + EditMessage.pressAction(Minecraft.getInstance().player, 1); + } + isDownOld = isDown; + } + }; + + public static final KeyMapping EDIT_MAGAZINE = new KeyMapping("key.superbwarfare.edit_magazine", GLFW.GLFW_KEY_DOWN, "key.categories.superbwarfare") { + private boolean isDownOld = false; + + @Override + public void setDown(boolean isDown) { + super.setDown(isDown); + if (isDownOld != isDown && isDown) { + ModUtils.PACKET_HANDLER.sendToServer(new EditMessage(2)); + EditMessage.pressAction(Minecraft.getInstance().player, 2); + } + isDownOld = isDown; + } + }; + + public static final KeyMapping EDIT_STOCK = new KeyMapping("key.superbwarfare.edit_stock", GLFW.GLFW_KEY_RIGHT, "key.categories.superbwarfare") { + private boolean isDownOld = false; + + @Override + public void setDown(boolean isDown) { + super.setDown(isDown); + if (isDownOld != isDown && isDown) { + ModUtils.PACKET_HANDLER.sendToServer(new EditMessage(3)); + EditMessage.pressAction(Minecraft.getInstance().player, 3); + } + isDownOld = isDown; + } + }; + @SubscribeEvent public static void registerKeyMappings(RegisterKeyMappingsEvent event) { event.register(RELOAD); @@ -112,6 +182,11 @@ public class ModKeyMappings { event.register(INTERACT); event.register(BREATH); event.register(CONFIG); + event.register(EDIT_MODE); + event.register(EDIT_SCOPE); + event.register(EDIT_BARREL); + event.register(EDIT_MAGAZINE); + event.register(EDIT_STOCK); } @Mod.EventBusSubscriber(value = Dist.CLIENT) diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java index 9dee86755..24a3c6b90 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java @@ -48,6 +48,13 @@ public abstract class GunItem extends Item { return; } +// if (entity instanceof Player player) { +// player.displayClientMessage(Component.literal(new java.text.DecimalFormat("##.##").format(itemstack.getOrCreateTag().getInt("scope_type")) +// + " " + new java.text.DecimalFormat("##.#").format(itemstack.getOrCreateTag().getInt("barrel_type")) +// + " " + new java.text.DecimalFormat("##.#").format(itemstack.getOrCreateTag().getInt("magazine_type")) +// + " " + new java.text.DecimalFormat("##.#").format(itemstack.getOrCreateTag().getInt("stock_type"))), true); +// } + if (!ItemNBTTool.getBoolean(itemstack, "init", false)) { GunsTool.initGun(level, itemstack, this.getDescriptionId().substring(this.getDescriptionId().lastIndexOf('.') + 1)); GunsTool.genUUID(itemstack); diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/AK12Item.java b/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/AK12Item.java index f94121eaa..2e87b7708 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/AK12Item.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/AK12Item.java @@ -10,6 +10,7 @@ import net.mcreator.superbwarfare.init.ModSounds; import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.item.AnimatedItem; import net.mcreator.superbwarfare.item.gun.GunItem; +import net.mcreator.superbwarfare.network.ModVariables; import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.tools.GunsTool; @@ -85,6 +86,10 @@ public class AK12Item extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; + if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak12.edit")); + } + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak12.reload_empty")); } diff --git a/src/main/java/net/mcreator/superbwarfare/network/ModVariables.java b/src/main/java/net/mcreator/superbwarfare/network/ModVariables.java index 50c329f33..0205306c9 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/ModVariables.java +++ b/src/main/java/net/mcreator/superbwarfare/network/ModVariables.java @@ -83,6 +83,7 @@ public class ModVariables { clone.breath = original.breath; clone.breathTime = original.breathTime; clone.breathExhaustion = original.breathExhaustion; + clone.edit = original.edit; if (event.getEntity().level().isClientSide()) return; @@ -222,6 +223,7 @@ public class ModVariables { public boolean breath = false; public int breathTime = 160; public boolean breathExhaustion = false; + public boolean edit = false; public void syncPlayerVariables(Entity entity) { if (entity instanceof ServerPlayer) @@ -245,6 +247,7 @@ public class ModVariables { nbt.putBoolean("breath", breath); nbt.putInt("breathTime", breathTime); nbt.putBoolean("breathExhaustion", breathExhaustion); + nbt.putBoolean("edit", edit); return nbt; } @@ -266,6 +269,7 @@ public class ModVariables { breath = nbt.getBoolean("breath"); breathTime = nbt.getInt("breathTime"); breathExhaustion = nbt.getBoolean("breathExhaustion"); + edit = nbt.getBoolean("edit"); } } @@ -318,6 +322,7 @@ public class ModVariables { variables.breath = message.data.breath; variables.breathTime = message.data.breathTime; variables.breathExhaustion = message.data.breathExhaustion; + variables.edit = message.data.edit; }); } } diff --git a/src/main/java/net/mcreator/superbwarfare/network/message/EditMessage.java b/src/main/java/net/mcreator/superbwarfare/network/message/EditMessage.java new file mode 100644 index 000000000..3ee9cb709 --- /dev/null +++ b/src/main/java/net/mcreator/superbwarfare/network/message/EditMessage.java @@ -0,0 +1,71 @@ +package net.mcreator.superbwarfare.network.message; + +import net.mcreator.superbwarfare.init.ModTags; +import net.mcreator.superbwarfare.network.ModVariables; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public class EditMessage { + private final int type; + + public EditMessage(int type) { + this.type = type; + } + + public EditMessage(FriendlyByteBuf buffer) { + this.type = buffer.readInt(); + } + + public static void encode(net.mcreator.superbwarfare.network.message.EditMessage message, FriendlyByteBuf buffer) { + buffer.writeInt(message.type); + } + + public static void handler(net.mcreator.superbwarfare.network.message.EditMessage message, Supplier contextSupplier) { + NetworkEvent.Context context = contextSupplier.get(); + context.enqueueWork(() -> pressAction(context.getSender(), message.type)); + context.setPacketHandled(true); + } + + public static void pressAction(Player player, int type) { + if (player == null) return; + if (!player.level().isLoaded(player.blockPosition())) + return; + + ItemStack stack = player.getMainHandItem(); + + if (stack.is(ModTags.Items.GUN) && player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit) { + switch (type) { + case 0: + stack.getOrCreateTag().putInt("scope_type", stack.getOrCreateTag().getInt("scope_type") + 1); + if (stack.getOrCreateTag().getInt("scope_type") == 4) { + stack.getOrCreateTag().putInt("scope_type", 0); + } + break; + case 1: + stack.getOrCreateTag().putInt("barrel_type", stack.getOrCreateTag().getInt("barrel_type") + 1); + if (stack.getOrCreateTag().getInt("barrel_type") == 3) { + stack.getOrCreateTag().putInt("barrel_type", 0); + } + break; + case 2: + stack.getOrCreateTag().putInt("magazine_type", stack.getOrCreateTag().getInt("magazine_type") + 1); + if (stack.getOrCreateTag().getInt("magazine_type") == 3) { + stack.getOrCreateTag().putInt("magazine_type", 0); + } + break; + case 3: + stack.getOrCreateTag().putInt("stock_type", stack.getOrCreateTag().getInt("stock_type") + 1); + if (stack.getOrCreateTag().getInt("stock_type") == 3) { + stack.getOrCreateTag().putInt("stock_type", 0); + } + break; + } + } + } +} + + diff --git a/src/main/java/net/mcreator/superbwarfare/network/message/EditModeMessage.java b/src/main/java/net/mcreator/superbwarfare/network/message/EditModeMessage.java new file mode 100644 index 000000000..cab276feb --- /dev/null +++ b/src/main/java/net/mcreator/superbwarfare/network/message/EditModeMessage.java @@ -0,0 +1,54 @@ +package net.mcreator.superbwarfare.network.message; + +import net.mcreator.superbwarfare.init.ModTags; +import net.mcreator.superbwarfare.network.ModVariables; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public class EditModeMessage { + private final int type; + + public EditModeMessage(int type) { + this.type = type; + } + + public EditModeMessage(FriendlyByteBuf buffer) { + this.type = buffer.readInt(); + } + + public static void encode(EditModeMessage message, FriendlyByteBuf buffer) { + buffer.writeInt(message.type); + } + + public static void handler(EditModeMessage message, Supplier contextSupplier) { + NetworkEvent.Context context = contextSupplier.get(); + context.enqueueWork(() -> pressAction(context.getSender(), message.type)); + context.setPacketHandled(true); + } + + public static void pressAction(Player player, int type) { + if (player == null) return; + // security measure to prevent arbitrary chunk generation + if (!player.level().isLoaded(player.blockPosition())) + return; + if (type == 0) { + EditMode(player); + } + } + + public static void EditMode(Player player) { + ItemStack mainHandItem = player.getMainHandItem(); + var cap = player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null); + + if (mainHandItem.is(ModTags.Items.GUN)) { + cap.ifPresent(capability -> { + capability.edit = !cap.orElse(new ModVariables.PlayerVariables()).edit; + capability.syncPlayerVariables(player); + }); + } + } +} diff --git a/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java b/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java index 751d75698..8a55c241f 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java +++ b/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java @@ -73,6 +73,7 @@ public class FireMessage { if (type == 0) { handlePlayerShoot(player); player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { + capability.edit = false; capability.holdFire = true; capability.syncPlayerVariables(player); }); diff --git a/src/main/java/net/mcreator/superbwarfare/network/message/ReloadMessage.java b/src/main/java/net/mcreator/superbwarfare/network/message/ReloadMessage.java index 53c87e0b3..9d4ada47f 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/message/ReloadMessage.java +++ b/src/main/java/net/mcreator/superbwarfare/network/message/ReloadMessage.java @@ -45,6 +45,11 @@ public class ReloadMessage { } if (type == 0) { + player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { + capability.edit = false; + capability.syncPlayerVariables(player); + }); + ItemStack stack = player.getMainHandItem(); var capability = player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()); diff --git a/src/main/java/net/mcreator/superbwarfare/network/message/ZoomMessage.java b/src/main/java/net/mcreator/superbwarfare/network/message/ZoomMessage.java index fea68f9b3..a4260f217 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/message/ZoomMessage.java +++ b/src/main/java/net/mcreator/superbwarfare/network/message/ZoomMessage.java @@ -46,9 +46,11 @@ public class ZoomMessage { if (message.type == 0) { player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { capability.zoom = true; + capability.edit = false; capability.syncPlayerVariables(player); }); + if (player.isPassenger() && player.getVehicle() instanceof ICannonEntity) { SoundTool.playLocalSound(player, ModSounds.CANNON_ZOOM_IN.get(), 2, 1); } diff --git a/src/main/resources/assets/superbwarfare/animations/ak12.animation.json b/src/main/resources/assets/superbwarfare/animations/ak12.animation.json index 71073ee52..840421ef4 100644 --- a/src/main/resources/assets/superbwarfare/animations/ak12.animation.json +++ b/src/main/resources/assets/superbwarfare/animations/ak12.animation.json @@ -4,6 +4,28 @@ "animation.ak12.idle": { "animation_length": 1 }, + "animation.ak12.edit": { + "loop": "hold_on_last_frame", + "animation_length": 0.1, + "bones": { + "0": { + "rotation": { + "vector": [-22.5, -22.5, -22.5] + }, + "position": { + "vector": [0.5, 2.5, -4.75] + } + }, + "Lefthand": { + "rotation": { + "vector": [-20.80188, -23.88158, -14.35972] + }, + "position": { + "vector": [-4, -10, 20] + } + } + } + }, "animation.ak12.run": { "loop": true, "animation_length": 0.8, diff --git a/src/main/resources/assets/superbwarfare/geo/ak12.geo.json b/src/main/resources/assets/superbwarfare/geo/ak12.geo.json index 6a6957e65..0fee378f3 100644 --- a/src/main/resources/assets/superbwarfare/geo/ak12.geo.json +++ b/src/main/resources/assets/superbwarfare/geo/ak12.geo.json @@ -7,8 +7,8 @@ "texture_width": 128, "texture_height": 128, "visible_bounds_width": 29, - "visible_bounds_height": 6, - "visible_bounds_offset": [0, 0, 0] + "visible_bounds_height": 9, + "visible_bounds_offset": [0, 1.5, 0] }, "bones": [ { diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index a28ce09e2..67261f460 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -332,6 +332,11 @@ "key.superbwarfare.interact": "Interact", "key.superbwarfare.breath": "Breathe", "key.superbwarfare.config": "Open Config Screen", + "key.superbwarfare.edit_mode": "Edit Weapon", + "key.superbwarfare.edit_scope": "Switch Scope", + "key.superbwarfare.edit_barrel": "Switch Barrel", + "key.superbwarfare.edit_magazine": "Switch Magazine", + "key.superbwarfare.edit_stock": "Switch Stock", "effect.superbwarfare.shock": "Shock", "item.minecraft.potion.effect.superbwarfare_shock": "Potion of Shock", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index 81c777585..2510d829a 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -332,6 +332,11 @@ "key.superbwarfare.interact": "交互", "key.superbwarfare.breath": "屏息", "key.superbwarfare.config": "打开配置界面", + "key.superbwarfare.edit_mode": "改装", + "key.superbwarfare.edit_scope": "切换瞄准镜", + "key.superbwarfare.edit_barrel": "切换枪管配件", + "key.superbwarfare.edit_magazine": "切换弹匣", + "key.superbwarfare.edit_stock": "切换枪托", "effect.superbwarfare.shock": "电击", "item.minecraft.potion.effect.superbwarfare_shock": "电击药水", diff --git a/src/main/resources/assets/superbwarfare/textures/item/ak12.png b/src/main/resources/assets/superbwarfare/textures/item/ak12.png index b66ac3d3a..b72363c69 100644 Binary files a/src/main/resources/assets/superbwarfare/textures/item/ak12.png and b/src/main/resources/assets/superbwarfare/textures/item/ak12.png differ