From 63f43ae96e0d78e0b04f503399c7f93571e97dc8 Mon Sep 17 00:00:00 2001 From: MikhailTapio Date: Tue, 13 Feb 2024 12:13:30 +0800 Subject: [PATCH] :sparkles: Update to Minecraft 1.20.1 --- build.gradle | 64 ++- gradle.properties | 18 + src/main/java/com/mrcrayfish/guns/Config.java | 2 +- src/main/java/com/mrcrayfish/guns/GunMod.java | 12 +- .../mrcrayfish/guns/client/BulletTrail.java | 2 +- .../mrcrayfish/guns/client/ClientHandler.java | 138 +++---- .../guns/client/GunButtonBindings.java | 6 +- .../guns/client/GunConflictContext.java | 3 +- .../handler/BulletTrailRenderingHandler.java | 2 +- .../client/handler/ControllerHandler.java | 229 ++++++----- .../guns/client/handler/CrosshairHandler.java | 2 +- .../client/handler/GunRenderingHandler.java | 377 +++++++----------- .../guns/client/handler/RecoilHandler.java | 3 +- .../client/render/entity/GrenadeRenderer.java | 3 +- .../client/render/entity/MissileRenderer.java | 3 +- .../render/entity/ProjectileRenderer.java | 5 +- .../entity/ThrowableGrenadeRenderer.java | 3 +- .../client/render/pose/OneHandedPose.java | 2 +- .../client/render/pose/TwoHandedPose.java | 2 +- .../guns/client/screen/AttachmentScreen.java | 218 ++++------ .../guns/client/screen/CheckBox.java | 40 +- .../guns/client/screen/WorkbenchScreen.java | 333 ++++++---------- .../guns/client/screen/widget/MiniButton.java | 11 +- .../guns/client/util/RenderUtil.java | 11 +- .../mrcrayfish/guns/common/AmmoContext.java | 15 +- .../java/com/mrcrayfish/guns/common/Gun.java | 19 +- .../mrcrayfish/guns/common/ReloadTracker.java | 19 +- .../common/container/slot/AttachmentSlot.java | 2 +- .../common/network/ServerPlayHandler.java | 17 +- .../guns/compat/BackpackHelper.java | 14 +- .../guns/compat/SophisticatedHelper.java | 34 ++ .../guns/compat/TravelersBackpackHelper.java | 32 ++ .../debug/client/screen/EditorScreen.java | 26 +- .../client/screen/widget/DebugButton.java | 16 +- .../client/screen/widget/DebugSlider.java | 23 +- .../mrcrayfish/guns/entity/MissileEntity.java | 10 +- .../guns/entity/ProjectileEntity.java | 74 ++-- .../guns/entity/ThrowableGrenadeEntity.java | 4 +- .../guns/entity/ThrowableItemEntity.java | 9 +- .../entity/ThrowableStunGrenadeEntity.java | 136 +++---- .../com/mrcrayfish/guns/init/ModBlocks.java | 17 +- .../mrcrayfish/guns/init/ModContainers.java | 2 +- .../mrcrayfish/guns/init/ModDamageTypes.java | 42 +- .../com/mrcrayfish/guns/item/GrenadeItem.java | 6 +- .../guns/jei/WorkbenchCategory.java | 48 +-- .../guns/mixin/client/GameRendererMixin.java | 14 +- .../common/LayeredCauldronBlockMixin.java | 43 ++ .../guns/mixin/common/LivingEntityMixin.java | 8 +- .../mrcrayfish/guns/particles/TrailData.java | 17 +- src/main/resources/META-INF/mods.toml | 8 +- src/main/resources/assets/cgm/lang/en_gb.json | 240 +++++------ src/main/resources/assets/cgm/lang/en_us.json | 244 ++++++------ .../resources/assets/cgm/lang/fil_ph.json | 236 +++++------ src/main/resources/assets/cgm/lang/fr_fr.json | 234 +++++------ src/main/resources/assets/cgm/lang/it_it.json | 234 +++++------ src/main/resources/assets/cgm/lang/ja_jp.json | 240 +++++------ src/main/resources/assets/cgm/lang/ko_kr.json | 224 +++++------ src/main/resources/assets/cgm/lang/nl_nl.json | 234 +++++------ src/main/resources/assets/cgm/lang/pt_br.json | 244 ++++++------ src/main/resources/assets/cgm/lang/ru_ru.json | 236 +++++------ src/main/resources/assets/cgm/lang/zh_cn.json | 240 +++++------ src/main/resources/assets/cgm/lang/zh_tw.json | 234 +++++------ .../cgm/models/item/advanced_bullet.json | 9 +- .../assets/cgm/models/item/basic_bullet.json | 1 + .../assets/cgm/models/item/missile.json | 2 +- .../assets/cgm/models/item/shell.json | 15 +- .../sounds/entity/stun_grenade/explosion.ogg | Bin 25941 -> 6890 bytes src/main/resources/cgm.mixins.json | 45 ++- src/main/resources/pack.mcmeta | 2 +- 69 files changed, 2430 insertions(+), 2628 deletions(-) create mode 100644 src/main/java/com/mrcrayfish/guns/compat/SophisticatedHelper.java create mode 100644 src/main/java/com/mrcrayfish/guns/compat/TravelersBackpackHelper.java create mode 100644 src/main/java/com/mrcrayfish/guns/mixin/common/LayeredCauldronBlockMixin.java diff --git a/build.gradle b/build.gradle index 6b9f7291e..8c2452444 100644 --- a/build.gradle +++ b/build.gradle @@ -3,10 +3,11 @@ plugins { id 'maven-publish' id 'net.minecraftforge.gradle' version '5.1.+' id 'org.spongepowered.mixin' version '0.7.+' + id 'org.parchmentmc.librarian.forgegradle' version '1.+' } -archivesBaseName = "cgm" -version = "1.3.7-1.19.4" +archivesBaseName = archive_base_name +version = "${mod_version}-${minecraft_version}" group = "com.mrcrayfish" java.toolchain.languageVersion = JavaLanguageVersion.of(17) @@ -14,12 +15,12 @@ java.toolchain.languageVersion = JavaLanguageVersion.of(17) sourceSets.main.resources { srcDir 'src/generated/resources' } mixin { - add sourceSets.main, "cgm.refmap.json" - config 'cgm.mixins.json' + add sourceSets.main, "${mod_id}.refmap.json" + config "${mod_id}.mixins.json" } minecraft { - mappings channel: 'official', version: '1.19.4' + mappings channel: mappings_channel, version: mappings_version runs { client { @@ -41,7 +42,7 @@ minecraft { property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' property 'forge.logging.console.level', 'debug' - arg '-mixin.config=cgm.mixins.json' + arg "-mixin.config=${mod_id}.mixins.json" mods { cgm { source sourceSets.main @@ -55,8 +56,8 @@ minecraft { property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' property 'forge.logging.console.level', 'debug' - args '--mod', 'cgm', '--all', '--output', file('src/generated/resources/') - arg '-mixin.config=cgm.mixins.json' + args '--mod', mod_id, '--all', '--output', file('src/generated/resources/') + arg '-mixin.config=${mod_id}.mixins.json' mods { cgm { source sourceSets.main @@ -66,14 +67,6 @@ minecraft { } } -//processResources { -// doLast { -// fileTree(dir: outputs.files.asPath, include: "**/*.json").each { -// File file -> file.text = JsonOutput.toJson(new JsonSlurper().parse(file)) -// } -// } -//} - repositories { mavenLocal() maven { @@ -86,29 +79,32 @@ repositories { } dependencies { - minecraft 'net.minecraftforge:forge:1.19.4-45.1.0' - implementation fg.deobf('curse.maven:framework-549225:4718249') - implementation fg.deobf('curse.maven:configured-457570:4462894') - implementation fg.deobf('curse.maven:catalogue-459701:4496718') - implementation fg.deobf('curse.maven:backpacked-352835:4510383') - compileOnly fg.deobf('curse.maven:controllable-317269:4511169') - compileOnly fg.deobf("mezz.jei:jei-1.19.4-common-api:13.1.0.11") - compileOnly fg.deobf("mezz.jei:jei-1.19.4-forge-api:13.1.0.11") - runtimeOnly fg.deobf("mezz.jei:jei-1.19.4-forge:13.1.0.11") + minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" + implementation fg.deobf("curse.maven:framework-549225:${framework_file_id}") + compileOnly fg.deobf("curse.maven:configured-457570:${configured_file_id}") // Configured for 1.20 is not released + implementation fg.deobf("curse.maven:catalogue-459701:${catalogue_file_id}") + implementation fg.deobf("curse.maven:backpacked-352835:${backpacked_file_id}") + implementation fg.deobf("curse.maven:sophisticated-core-618298:${sop_core_file_id}") + implementation fg.deobf("curse.maven:sophisticated-backpacks-422301:${sop_backpacks_file_id}") + implementation fg.deobf("curse.maven:travelers-backpack-321117:${travelers_backpack_file_id}") + compileOnly fg.deobf("curse.maven:controllable-317269:${controllable_file_id}") + compileOnly fg.deobf("mezz.jei:jei-1.20.1-common-api:${jei_version}") + compileOnly fg.deobf("mezz.jei:jei-1.20.1-forge-api:${jei_version}") + runtimeOnly fg.deobf("mezz.jei:jei-1.20.1-forge:${jei_version}") annotationProcessor('org.spongepowered:mixin:0.8.5:processor') } jar { manifest { attributes([ - "Specification-Title": "Gun Mod", - "Specification-Vendor": "MrCrayfish", - "Specification-Version": "1", - "Implementation-Title": "Gun Mod", - "Implementation-Version": project.version, - "Implementation-Vendor" : "MrCrayfish", - "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), - "MixinConfigs": "cgm.mixins.json" + "Specification-Title": "Gun Mod", + "Specification-Vendor": "MrCrayfish", + "Specification-Version": "1", + "Implementation-Title": "Gun Mod", + "Implementation-Version": project.version, + "Implementation-Vendor" : "MrCrayfish", + "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), + "MixinConfigs": "${mod_id}.mixins.json" ]) } } @@ -130,4 +126,4 @@ publishing { url "file:///X:/localmaven/mcmods" } } -} +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 784899a6d..1f9518c43 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,3 +2,21 @@ # This is required to provide enough memory for the Minecraft decompilation process. org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false + +mod_id=cgm +archive_base_name=cgm +mod_version=1.4.0 +forge_version=47.1.3 +minecraft_version=1.20.1 +mappings_channel=parchment +mappings_version=2023.09.03-1.20.1 + +framework_file_id=4718251 +configured_file_id=4462894 +catalogue_file_id=4766090 +backpacked_file_id=4725669 +controllable_file_id=4598985 +sop_core_file_id=4993651 +sop_backpacks_file_id=4993659 +travelers_backpack_file_id=4985852 +jei_version=15.2.0.27 \ No newline at end of file diff --git a/src/main/java/com/mrcrayfish/guns/Config.java b/src/main/java/com/mrcrayfish/guns/Config.java index 9dace1cb3..11b7389ce 100644 --- a/src/main/java/com/mrcrayfish/guns/Config.java +++ b/src/main/java/com/mrcrayfish/guns/Config.java @@ -209,7 +209,7 @@ public Gameplay(ForgeConfigSpec.Builder builder) this.criticalDamageMultiplier = builder.comment("The value to multiply the damage by if projectile is a critical hit").defineInRange("criticalDamageMultiplier", 1.5, 1.0, Double.MAX_VALUE); this.ignoreLeaves = builder.comment("If true, projectiles will ignore leaves when checking for collision").define("ignoreLeaves", true); this.enableKnockback = builder.comment("If true, projectiles will cause knockback when an entity is hit. By default this is set to true to match the behaviour of Minecraft.").define("enableKnockback", true); - this.knockbackStrength = builder.comment("Sets the strengthof knockback when shot by a bullet projectile. Knockback must be enabled for this to take effect. If value is equal to zero, knockback will use default minecraft value").defineInRange("knockbackStrength", 0.15, 0.0, 1.0); + this.knockbackStrength = builder.comment("Sets the strength of knockback when shot by a bullet projectile. Knockback must be enabled for this to take effect. If value is equal to zero, knockback will use default minecraft value").defineInRange("knockbackStrength", 0.15, 0.0, 1.0); this.improvedHitboxes = builder.comment("If true, improves the accuracy of weapons by considering the ping of the player. This has no affect on singleplayer. This will add a little overhead if enabled.").define("improvedHitboxes", false); } builder.pop(); diff --git a/src/main/java/com/mrcrayfish/guns/GunMod.java b/src/main/java/com/mrcrayfish/guns/GunMod.java index 1aac2af98..c04ce4d8b 100644 --- a/src/main/java/com/mrcrayfish/guns/GunMod.java +++ b/src/main/java/com/mrcrayfish/guns/GunMod.java @@ -11,11 +11,7 @@ import com.mrcrayfish.guns.common.NetworkGunManager; import com.mrcrayfish.guns.common.ProjectileManager; import com.mrcrayfish.guns.crafting.WorkbenchIngredient; -import com.mrcrayfish.guns.datagen.BlockTagGen; -import com.mrcrayfish.guns.datagen.GunGen; -import com.mrcrayfish.guns.datagen.ItemTagGen; -import com.mrcrayfish.guns.datagen.LootTableGen; -import com.mrcrayfish.guns.datagen.RecipeGen; +import com.mrcrayfish.guns.datagen.*; import com.mrcrayfish.guns.entity.GrenadeEntity; import com.mrcrayfish.guns.entity.MissileEntity; import com.mrcrayfish.guns.init.*; @@ -50,6 +46,8 @@ public class GunMod public static boolean controllableLoaded = false; public static boolean backpackedLoaded = false; public static boolean playerReviveLoaded = false; + public static boolean sopLoaded = false; + public static boolean travelersBackpackLoaded = false; public static final Logger LOGGER = LogManager.getLogger(Reference.MOD_ID); public GunMod() @@ -74,15 +72,17 @@ public GunMod() bus.addListener(this::onGatherData); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { FrameworkClientAPI.registerDataLoader(MetaLoader.getInstance()); + ClientHandler.registerCreativeTab(bus); bus.addListener(KeyBinds::registerKeyMappings); bus.addListener(CrosshairHandler::onConfigReload); bus.addListener(ClientHandler::onRegisterReloadListener); - bus.addListener(ClientHandler::onRegisterCreativeTab); bus.addListener(ClientHandler::registerAdditional); }); controllableLoaded = ModList.get().isLoaded("controllable"); backpackedLoaded = ModList.get().isLoaded("backpacked"); playerReviveLoaded = ModList.get().isLoaded("playerrevive"); + sopLoaded = ModList.get().isLoaded("sophisticatedbackpacks"); + travelersBackpackLoaded = ModList.get().isLoaded("travelersbackpack"); } private void onCommonSetup(FMLCommonSetupEvent event) diff --git a/src/main/java/com/mrcrayfish/guns/client/BulletTrail.java b/src/main/java/com/mrcrayfish/guns/client/BulletTrail.java index 4a5af6cbe..664eee6b7 100644 --- a/src/main/java/com/mrcrayfish/guns/client/BulletTrail.java +++ b/src/main/java/com/mrcrayfish/guns/client/BulletTrail.java @@ -72,7 +72,7 @@ public void tick() Entity shooter = this.getShooter(); if(shooter instanceof Player && ((Player) shooter).isLocalPlayer()) { - Level world = shooter.level; + Level world = shooter.level(); world.addAlwaysVisibleParticle(this.particleData, true, this.position.x(), this.position.y(), this.position.z(), this.motion.x, this.motion.y, this.motion.z); } diff --git a/src/main/java/com/mrcrayfish/guns/client/ClientHandler.java b/src/main/java/com/mrcrayfish/guns/client/ClientHandler.java index 9d97fd96f..1d8e84b18 100644 --- a/src/main/java/com/mrcrayfish/guns/client/ClientHandler.java +++ b/src/main/java/com/mrcrayfish/guns/client/ClientHandler.java @@ -1,7 +1,6 @@ package com.mrcrayfish.guns.client; import com.mrcrayfish.guns.GunMod; -import com.mrcrayfish.guns.Reference; import com.mrcrayfish.guns.client.handler.*; import com.mrcrayfish.guns.client.render.gun.ModelOverrides; import com.mrcrayfish.guns.client.render.gun.model.GrenadeLauncherModel; @@ -29,6 +28,7 @@ import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.renderer.ItemBlockRenderTypes; import net.minecraft.client.renderer.RenderType; +import net.minecraft.core.registries.Registries; import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -44,25 +44,26 @@ import net.minecraftforge.client.event.RegisterClientReloadListenersEvent; import net.minecraftforge.client.event.ScreenEvent; import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.CreativeModeTabEvent; +import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.util.ObfuscationReflectionHelper; +import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import org.lwjgl.glfw.GLFW; import java.lang.reflect.Field; +import static com.mrcrayfish.guns.Reference.MOD_ID; + /** * Author: MrCrayfish */ -@Mod.EventBusSubscriber(modid = Reference.MOD_ID, value = Dist.CLIENT) -public class ClientHandler -{ +@Mod.EventBusSubscriber(modid = MOD_ID, value = Dist.CLIENT) +public class ClientHandler { private static Field mouseOptionsField; - public static void setup() - { + public static void setup() { MinecraftForge.EVENT_BUS.register(AimingHandler.get()); MinecraftForge.EVENT_BUS.register(BulletTrailRenderingHandler.get()); MinecraftForge.EVENT_BUS.register(CrosshairHandler.get()); @@ -74,9 +75,8 @@ public static void setup() MinecraftForge.EVENT_BUS.register(new PlayerModelHandler()); /* Only register controller events if Controllable is loaded otherwise it will crash */ - if(GunMod.controllableLoaded) - { - MinecraftForge.EVENT_BUS.register(new ControllerHandler()); + if (GunMod.controllableLoaded) { + ControllerHandler.init(); GunButtonBindings.register(); } @@ -86,46 +86,38 @@ public static void setup() registerScreenFactories(); } - private static void setupRenderLayers() - { + private static void setupRenderLayers() { ItemBlockRenderTypes.setRenderLayer(ModBlocks.WORKBENCH.get(), RenderType.cutout()); } - private static void registerColors() - { + private static void registerColors() { ItemColor color = (stack, index) -> { - if(!IColored.isDyeable(stack)) - { + if (!IColored.isDyeable(stack)) { return -1; } - if(index == 0 && stack.hasTag() && stack.getTag().contains("Color", Tag.TAG_INT)) - { + if (index == 0 && stack.hasTag() && stack.getTag().contains("Color", Tag.TAG_INT)) { return stack.getTag().getInt("Color"); } - if(index == 0 && stack.getItem() instanceof IAttachment) - { + if (index == 0 && stack.getItem() instanceof IAttachment) { ItemStack renderingWeapon = GunRenderingHandler.get().getRenderingWeapon(); - if(renderingWeapon != null) - { + if (renderingWeapon != null) { return Minecraft.getInstance().getItemColors().getColor(renderingWeapon, index); } } - if(index == 2) // Reticle colour + if (index == 2) // Reticle colour { return PropertyHelper.getReticleColor(stack); } return -1; }; ForgeRegistries.ITEMS.forEach(item -> { - if(item instanceof IColored) - { + if (item instanceof IColored) { Minecraft.getInstance().getItemColors().register(color, item); } }); } - private static void registerModelOverrides() - { + private static void registerModelOverrides() { /* Weapons */ ModelOverrides.register(ModItems.ASSAULT_RIFLE.get(), new SimpleModel(SpecialModels.ASSAULT_RIFLE::getModel)); ModelOverrides.register(ModItems.BAZOOKA.get(), new SimpleModel(SpecialModels.BAZOOKA::getModel)); @@ -138,43 +130,33 @@ private static void registerModelOverrides() ModelOverrides.register(ModItems.SHOTGUN.get(), new SimpleModel(SpecialModels.SHOTGUN::getModel)); } - private static void registerScreenFactories() - { + private static void registerScreenFactories() { MenuScreens.register(ModContainers.WORKBENCH.get(), WorkbenchScreen::new); MenuScreens.register(ModContainers.ATTACHMENTS.get(), AttachmentScreen::new); } @SubscribeEvent - public static void onScreenInit(ScreenEvent.Init.Post event) - { - if(event.getScreen() instanceof MouseSettingsScreen screen) - { - if(mouseOptionsField == null) - { + public static void onScreenInit(ScreenEvent.Init.Post event) { + if (event.getScreen() instanceof MouseSettingsScreen screen) { + if (mouseOptionsField == null) { mouseOptionsField = ObfuscationReflectionHelper.findField(MouseSettingsScreen.class, "f_96218_"); mouseOptionsField.setAccessible(true); } - try - { + try { OptionsList list = (OptionsList) mouseOptionsField.get(screen); //list.addBig(OptionInstance.createBoolean("t", true)); //list.addSmall(GunOptions.ADS_SENSITIVITY, GunOptions.CROSSHAIR); - } - catch(IllegalAccessException e) - { + } catch (IllegalAccessException e) { e.printStackTrace(); } } } @SubscribeEvent - public static void onKeyPressed(InputEvent.Key event) - { + public static void onKeyPressed(InputEvent.Key event) { Minecraft mc = Minecraft.getInstance(); - if(mc.player != null && mc.screen == null && event.getAction() == GLFW.GLFW_PRESS) - { - if(KeyBinds.KEY_ATTACHMENTS.isDown()) - { + if (mc.player != null && mc.screen == null && event.getAction() == GLFW.GLFW_PRESS) { + if (KeyBinds.KEY_ATTACHMENTS.isDown()) { PacketHandler.getPlayChannel().sendToServer(new C2SMessageAttachments()); } /*else if(event.getKey() == GLFW.GLFW_KEY_KP_9) @@ -184,55 +166,49 @@ public static void onKeyPressed(InputEvent.Key event) } } - public static void onRegisterReloadListener(RegisterClientReloadListenersEvent event) - { + public static void onRegisterReloadListener(RegisterClientReloadListenersEvent event) { event.registerReloadListener((ResourceManagerReloadListener) manager -> { PropertyHelper.resetCache(); }); } - public static void registerAdditional(ModelEvent.RegisterAdditional event) - { - event.register(new ResourceLocation(Reference.MOD_ID, "special/test")); + public static void registerAdditional(ModelEvent.RegisterAdditional event) { + event.register(new ResourceLocation(MOD_ID, "special/test")); } - public static void onRegisterCreativeTab(CreativeModeTabEvent.Register event) - { - event.registerCreativeModeTab(new ResourceLocation(Reference.MOD_ID, "creative_tab"), builder -> + public static void registerCreativeTab(IEventBus bus) { + DeferredRegister register = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MOD_ID); + CreativeModeTab.Builder builder = CreativeModeTab.builder(); + builder.title(Component.translatable("itemGroup." + MOD_ID)); + builder.icon(() -> { + ItemStack stack = new ItemStack(ModItems.PISTOL.get()); + stack.getOrCreateTag().putBoolean("IgnoreAmmo", true); + return stack; + }); + builder.displayItems((flags, output) -> { - builder.title(Component.translatable("itemGroup." + Reference.MOD_ID)); - builder.icon(() -> { - ItemStack stack = new ItemStack(ModItems.PISTOL.get()); - stack.getOrCreateTag().putBoolean("IgnoreAmmo", true); - return stack; - }); - builder.displayItems((flags, output) -> + ModItems.REGISTER.getEntries().forEach(registryObject -> { - ModItems.REGISTER.getEntries().forEach(registryObject -> - { - if(registryObject.get() instanceof GunItem item) - { - ItemStack stack = new ItemStack(item); - stack.getOrCreateTag().putInt("AmmoCount", item.getGun().getGeneral().getMaxAmmo()); - output.accept(stack); - return; - } - output.accept(registryObject.get()); - }); - CustomGunManager.fill(output); - for(Enchantment enchantment : ForgeRegistries.ENCHANTMENTS) - { - if(enchantment.category == EnchantmentTypes.GUN || enchantment.category == EnchantmentTypes.SEMI_AUTO_GUN) - { - output.accept(EnchantedBookItem.createForEnchantment(new EnchantmentInstance(enchantment, enchantment.getMaxLevel())), CreativeModeTab.TabVisibility.PARENT_TAB_ONLY); - } + if (registryObject.get() instanceof GunItem item) { + ItemStack stack = new ItemStack(item); + stack.getOrCreateTag().putInt("AmmoCount", item.getGun().getGeneral().getMaxAmmo()); + output.accept(stack); + return; } + output.accept(registryObject.get()); }); + CustomGunManager.fill(output); + for (Enchantment enchantment : ForgeRegistries.ENCHANTMENTS) { + if (enchantment.category == EnchantmentTypes.GUN || enchantment.category == EnchantmentTypes.SEMI_AUTO_GUN) { + output.accept(EnchantedBookItem.createForEnchantment(new EnchantmentInstance(enchantment, enchantment.getMaxLevel())), CreativeModeTab.TabVisibility.PARENT_TAB_ONLY); + } + } }); + register.register("creative_tab", builder::build); + register.register(bus); } - public static Screen createEditorScreen(IEditorMenu menu) - { + public static Screen createEditorScreen(IEditorMenu menu) { return new EditorScreen(Minecraft.getInstance().screen, menu); } diff --git a/src/main/java/com/mrcrayfish/guns/client/GunButtonBindings.java b/src/main/java/com/mrcrayfish/guns/client/GunButtonBindings.java index beefee3dd..6c29e722e 100644 --- a/src/main/java/com/mrcrayfish/guns/client/GunButtonBindings.java +++ b/src/main/java/com/mrcrayfish/guns/client/GunButtonBindings.java @@ -1,8 +1,8 @@ package com.mrcrayfish.guns.client; -import com.mrcrayfish.controllable.client.BindingRegistry; -import com.mrcrayfish.controllable.client.ButtonBinding; -import com.mrcrayfish.controllable.client.Buttons; +import com.mrcrayfish.controllable.client.binding.BindingRegistry; +import com.mrcrayfish.controllable.client.binding.ButtonBinding; +import com.mrcrayfish.controllable.client.input.Buttons; /** * Author: MrCrayfish diff --git a/src/main/java/com/mrcrayfish/guns/client/GunConflictContext.java b/src/main/java/com/mrcrayfish/guns/client/GunConflictContext.java index fa65860ab..4906d4bbc 100644 --- a/src/main/java/com/mrcrayfish/guns/client/GunConflictContext.java +++ b/src/main/java/com/mrcrayfish/guns/client/GunConflictContext.java @@ -1,9 +1,8 @@ package com.mrcrayfish.guns.client; -import com.mrcrayfish.controllable.client.IBindingContext; +import com.mrcrayfish.controllable.client.binding.IBindingContext; import com.mrcrayfish.guns.item.GunItem; import net.minecraft.client.Minecraft; -import net.minecraftforge.client.settings.IKeyConflictContext; import net.minecraftforge.client.settings.KeyConflictContext; /** diff --git a/src/main/java/com/mrcrayfish/guns/client/handler/BulletTrailRenderingHandler.java b/src/main/java/com/mrcrayfish/guns/client/handler/BulletTrailRenderingHandler.java index 4a696d5e7..5ada104ad 100644 --- a/src/main/java/com/mrcrayfish/guns/client/handler/BulletTrailRenderingHandler.java +++ b/src/main/java/com/mrcrayfish/guns/client/handler/BulletTrailRenderingHandler.java @@ -165,7 +165,7 @@ private void renderBulletTrail(BulletTrail trail, PoseStack poseStack, float del poseStack.mulPose(Axis.YP.rotationDegrees((trail.getAge() + deltaTicks) * (float) 50)); poseStack.scale(0.275F, 0.275F, 0.275F); - int combinedLight = LevelRenderer.getLightColor(entity.level, BlockPos.containing(entity.position())); + int combinedLight = LevelRenderer.getLightColor(entity.level(), BlockPos.containing(entity.position())); ItemStack stack = trail.getItem(); RenderUtil.renderModel(stack, ItemDisplayContext.NONE, poseStack, renderTypeBuffer, combinedLight, OverlayTexture.NO_OVERLAY, null, null); } diff --git a/src/main/java/com/mrcrayfish/guns/client/handler/ControllerHandler.java b/src/main/java/com/mrcrayfish/guns/client/handler/ControllerHandler.java index 1375be0e3..d7bc537a5 100644 --- a/src/main/java/com/mrcrayfish/guns/client/handler/ControllerHandler.java +++ b/src/main/java/com/mrcrayfish/guns/client/handler/ControllerHandler.java @@ -4,9 +4,7 @@ import com.mrcrayfish.controllable.client.Action; import com.mrcrayfish.controllable.client.gui.navigation.BasicNavigationPoint; import com.mrcrayfish.controllable.client.input.Controller; -import com.mrcrayfish.controllable.event.ControllerEvent; -import com.mrcrayfish.controllable.event.GatherActionsEvent; -import com.mrcrayfish.controllable.event.GatherNavigationPointsEvent; +import com.mrcrayfish.controllable.event.ControllerEvents; import com.mrcrayfish.guns.Config; import com.mrcrayfish.guns.client.GunButtonBindings; import com.mrcrayfish.guns.client.screen.WorkbenchScreen; @@ -24,6 +22,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.TickEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -32,121 +31,141 @@ */ public class ControllerHandler { - private int reloadCounter = -1; - - @SubscribeEvent - public void onButtonInput(ControllerEvent.ButtonInput event) - { - Player player = Minecraft.getInstance().player; - Level world = Minecraft.getInstance().level; - if(player != null && world != null && Minecraft.getInstance().screen == null) - { - ItemStack heldItem = player.getMainHandItem(); - int button = event.getButton(); - if(button == GunButtonBindings.SHOOT.getButton()) + private static int reloadCounter = -1; + + public static void init() { + MinecraftForge.EVENT_BUS.register(new ControllerHandler()); + ControllerEvents.INPUT.register((controller, newButton, originalButton, state) -> { + Player player = Minecraft.getInstance().player; + Level world = Minecraft.getInstance().level; + boolean shouldCancel = false; + if(player != null && world != null && Minecraft.getInstance().screen == null) { - if(heldItem.getItem() instanceof GunItem) + ItemStack heldItem = player.getMainHandItem(); + if(originalButton == GunButtonBindings.SHOOT.getButton()) { - event.setCanceled(true); - if(event.getState()) + if(heldItem.getItem() instanceof GunItem) { - ShootingHandler.get().fire(player, heldItem); + shouldCancel = true; + if(state) + { + ShootingHandler.get().fire(player, heldItem); + } } } - } - else if(button == GunButtonBindings.AIM.getButton()) - { - if(heldItem.getItem() instanceof GunItem) + else if(originalButton == GunButtonBindings.AIM.getButton()) { - event.setCanceled(true); + if(heldItem.getItem() instanceof GunItem) + { + shouldCancel = true; + } } - } - else if(button == GunButtonBindings.STEADY_AIM.getButton()) - { - if(heldItem.getItem() instanceof GunItem) + else if(originalButton == GunButtonBindings.STEADY_AIM.getButton()) { - event.setCanceled(true); + if(heldItem.getItem() instanceof GunItem) + { + shouldCancel = true; + } } - } - else if(button == GunButtonBindings.RELOAD.getButton()) - { - if(heldItem.getItem() instanceof GunItem) + else if(originalButton == GunButtonBindings.RELOAD.getButton()) { - event.setCanceled(true); - if(event.getState()) + if(heldItem.getItem() instanceof GunItem) { - this.reloadCounter = 0; + shouldCancel = true; + if(state) + { + ControllerHandler.reloadCounter = 0; + } } } - } - else if(button == GunButtonBindings.OPEN_ATTACHMENTS.getButton()) - { - if(heldItem.getItem() instanceof GunItem && Minecraft.getInstance().screen == null) + else if(originalButton == GunButtonBindings.OPEN_ATTACHMENTS.getButton()) { - event.setCanceled(true); - if(event.getState()) + if(heldItem.getItem() instanceof GunItem && Minecraft.getInstance().screen == null) { - PacketHandler.getPlayChannel().sendToServer(new C2SMessageAttachments()); + shouldCancel = true; + if(state) + { + PacketHandler.getPlayChannel().sendToServer(new C2SMessageAttachments()); + } } } } - } - } - - @SubscribeEvent - public void onControllerTurn(ControllerEvent.Turn event) - { - Player player = Minecraft.getInstance().player; - if(player != null) - { - ItemStack heldItem = player.getMainHandItem(); - if(heldItem.getItem() instanceof GunItem && AimingHandler.get().isAiming()) + return shouldCancel; + }); + ControllerEvents.UPDATE_CAMERA.register((yawSpeed, pitchSpeed) -> { + Player player = Minecraft.getInstance().player; + if(player != null) { - double adsSensitivity = Config.CLIENT.controls.aimDownSightSensitivity.get(); - event.setYawSpeed(10.0F * (float) adsSensitivity); - event.setPitchSpeed(7.5F * (float) adsSensitivity); - - Scope scope = Gun.getScope(heldItem); - Controller controller = Controllable.getController(); - if(scope != null && scope.isStable() && controller != null && controller.isButtonPressed(GunButtonBindings.STEADY_AIM.getButton())) + ItemStack heldItem = player.getMainHandItem(); + if(heldItem.getItem() instanceof GunItem && AimingHandler.get().isAiming()) { - event.setYawSpeed(event.getYawSpeed() / 2.0F); - event.setPitchSpeed(event.getPitchSpeed() / 2.0F); + double adsSensitivity = Config.CLIENT.controls.aimDownSightSensitivity.get(); + yawSpeed.set(10.0F * (float) adsSensitivity); + pitchSpeed.set(7.5F * (float) adsSensitivity); + + Scope scope = Gun.getScope(heldItem); + Controller controller = Controllable.getController(); + if(scope != null && scope.isStable() && controller != null && controller.isButtonPressed(GunButtonBindings.STEADY_AIM.getButton())) + { + yawSpeed.set(yawSpeed.get() / 2.0F); + pitchSpeed.set(pitchSpeed.get() / 2.0F); + } } } - } - } + return false; + }); + ControllerEvents.GATHER_ACTIONS.register((actions, visibility) -> { + Minecraft mc = Minecraft.getInstance(); + if(mc.screen != null) return; + + Player player = Minecraft.getInstance().player; + if(player != null) + { + ItemStack heldItem = player.getMainHandItem(); + if(heldItem.getItem() instanceof GunItem) + { + actions.put(GunButtonBindings.AIM, new Action(Component.translatable("cgm.action.aim"), Action.Side.RIGHT)); + actions.put(GunButtonBindings.SHOOT, new Action(Component.translatable("cgm.action.shoot"), Action.Side.RIGHT)); - @SubscribeEvent - public void updateAvailableActions(GatherActionsEvent event) - { - Minecraft mc = Minecraft.getInstance(); - if(mc.screen != null) return; + GunItem gunItem = (GunItem) heldItem.getItem(); + Gun modifiedGun = gunItem.getModifiedGun(heldItem); + CompoundTag tag = heldItem.getTag(); + if(tag != null && tag.getInt("AmmoCount") < GunEnchantmentHelper.getAmmoCapacity(heldItem, modifiedGun)) + { + actions.put(GunButtonBindings.RELOAD, new Action(Component.translatable("cgm.action.reload"), Action.Side.LEFT)); + } - Player player = Minecraft.getInstance().player; - if(player != null) - { - ItemStack heldItem = player.getMainHandItem(); - if(heldItem.getItem() instanceof GunItem) + Scope scope = Gun.getScope(heldItem); + if(scope != null && scope.isStable() && AimingHandler.get().isAiming()) + { + actions.put(GunButtonBindings.STEADY_AIM, new Action(Component.translatable("cgm.action.steady_aim"), Action.Side.RIGHT)); + } + } + } + }); + ControllerEvents.GATHER_NAVIGATION_POINTS.register(points -> { + Minecraft mc = Minecraft.getInstance(); + if(mc.screen instanceof WorkbenchScreen) { - event.getActions().put(GunButtonBindings.AIM, new Action(Component.translatable("cgm.action.aim"), Action.Side.RIGHT)); - event.getActions().put(GunButtonBindings.SHOOT, new Action(Component.translatable("cgm.action.shoot"), Action.Side.RIGHT)); + WorkbenchScreen workbench = (WorkbenchScreen) mc.screen; + int startX = workbench.getGuiLeft(); + int startY = workbench.getGuiTop(); - GunItem gunItem = (GunItem) heldItem.getItem(); - Gun modifiedGun = gunItem.getModifiedGun(heldItem); - CompoundTag tag = heldItem.getTag(); - if(tag != null && tag.getInt("AmmoCount") < GunEnchantmentHelper.getAmmoCapacity(heldItem, modifiedGun)) + for(int i = 0; i < workbench.getTabs().size(); i++) { - event.getActions().put(GunButtonBindings.RELOAD, new Action(Component.translatable("cgm.action.reload"), Action.Side.LEFT)); + int tabX = startX + 28 * i + (28 / 2); + int tabY = startY - (28 / 2); + points.add(new BasicNavigationPoint(tabX, tabY)); } - Scope scope = Gun.getScope(heldItem); - if(scope != null && scope.isStable() && AimingHandler.get().isAiming()) + for(int i = 0; i < 6; i++) { - event.getActions().put(GunButtonBindings.STEADY_AIM, new Action(Component.translatable("cgm.action.steady_aim"), Action.Side.RIGHT)); + int itemX = startX + 172 + (80 / 2); + int itemY = startY + i * 19 + 63 + (19 / 2); + points.add(new BasicNavigationPoint(itemX, itemY)); } } - } + }); } @SubscribeEvent @@ -177,24 +196,24 @@ public void onRender(TickEvent.RenderTickEvent event) } } - if(mc.screen == null && this.reloadCounter != -1) + if(mc.screen == null && reloadCounter != -1) { if(controller.isButtonPressed(GunButtonBindings.RELOAD.getButton())) { - this.reloadCounter++; + reloadCounter++; } } - if(this.reloadCounter > 40) + if(reloadCounter > 40) { ReloadHandler.get().setReloading(false); PacketHandler.getPlayChannel().sendToServer(new C2SMessageUnload()); - this.reloadCounter = -1; + reloadCounter = -1; } - else if(this.reloadCounter > 0 && !controller.isButtonPressed(GunButtonBindings.RELOAD.getButton())) + else if(reloadCounter > 0 && !controller.isButtonPressed(GunButtonBindings.RELOAD.getButton())) { ReloadHandler.get().setReloading(!ModSyncedDataKeys.RELOADING.getValue(player)); - this.reloadCounter = -1; + reloadCounter = -1; } } @@ -209,30 +228,4 @@ public static boolean isShooting() Controller controller = Controllable.getController(); return controller != null && controller.isButtonPressed(GunButtonBindings.SHOOT.getButton()); } - - @SubscribeEvent - public void onGatherNavigationPoints(GatherNavigationPointsEvent event) - { - Minecraft mc = Minecraft.getInstance(); - if(mc.screen instanceof WorkbenchScreen) - { - WorkbenchScreen workbench = (WorkbenchScreen) mc.screen; - int startX = workbench.getGuiLeft(); - int startY = workbench.getGuiTop(); - - for(int i = 0; i < workbench.getTabs().size(); i++) - { - int tabX = startX + 28 * i + (28 / 2); - int tabY = startY - (28 / 2); - event.addPoint(new BasicNavigationPoint(tabX, tabY)); - } - - for(int i = 0; i < 6; i++) - { - int itemX = startX + 172 + (80 / 2); - int itemY = startY + i * 19 + 63 + (19 / 2); - event.addPoint(new BasicNavigationPoint(itemX, itemY)); - } - } - } } diff --git a/src/main/java/com/mrcrayfish/guns/client/handler/CrosshairHandler.java b/src/main/java/com/mrcrayfish/guns/client/handler/CrosshairHandler.java index 8ff2623e1..f449c4aa8 100644 --- a/src/main/java/com/mrcrayfish/guns/client/handler/CrosshairHandler.java +++ b/src/main/java/com/mrcrayfish/guns/client/handler/CrosshairHandler.java @@ -142,7 +142,7 @@ public void onRenderOverlay(RenderGuiOverlayEvent.Pre event) if(mc.player.getUseItem().getItem() == Items.SHIELD) return; - PoseStack stack = event.getPoseStack(); + PoseStack stack = event.getGuiGraphics().pose(); stack.pushPose(); int scaledWidth = event.getWindow().getGuiScaledWidth(); int scaledHeight = event.getWindow().getGuiScaledHeight(); diff --git a/src/main/java/com/mrcrayfish/guns/client/handler/GunRenderingHandler.java b/src/main/java/com/mrcrayfish/guns/client/handler/GunRenderingHandler.java index 5daa5bc41..75ee33bce 100644 --- a/src/main/java/com/mrcrayfish/guns/client/handler/GunRenderingHandler.java +++ b/src/main/java/com/mrcrayfish/guns/client/handler/GunRenderingHandler.java @@ -27,14 +27,12 @@ import com.mrcrayfish.guns.util.GunModifierHelper; import net.minecraft.client.CameraType; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiComponent; -import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.ItemInHandRenderer; import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.core.BlockPos; @@ -60,67 +58,53 @@ import net.minecraftforge.fml.util.ObfuscationReflectionHelper; import net.minecraftforge.registries.ForgeRegistries; import org.joml.Matrix4f; +import org.joml.Quaternionf; import javax.annotation.Nullable; import java.lang.reflect.Field; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Objects; -import java.util.Random; -import java.util.Set; - -public class GunRenderingHandler -{ - private static GunRenderingHandler instance; - - public static GunRenderingHandler get() - { - if(instance == null) - { - instance = new GunRenderingHandler(); - } - return instance; - } +import java.util.*; +public class GunRenderingHandler { public static final ResourceLocation MUZZLE_FLASH_TEXTURE = new ResourceLocation(Reference.MOD_ID, "textures/effect/muzzle_flash.png"); - + public static final ResourceLocation GUI_ICONS_LOCATION = new ResourceLocation( "textures/gui/icons.png"); // Kinda hacky + private static GunRenderingHandler instance; private final Random random = new Random(); private final Set entityIdForMuzzleFlash = new HashSet<>(); private final Set entityIdForDrawnMuzzleFlash = new HashSet<>(); private final Map entityIdToRandomValue = new HashMap<>(); - private int sprintTransition; private int prevSprintTransition; private int sprintCooldown; private float sprintIntensity; - private float offhandTranslate; private float prevOffhandTranslate; - private Field equippedProgressMainHandField; private Field prevEquippedProgressMainHandField; - private float immersiveRoll; private float prevImmersiveRoll; private float fallSway; private float prevFallSway; - @Nullable private ItemStack renderingWeapon; - private GunRenderingHandler() {} + private GunRenderingHandler() { + } + + public static GunRenderingHandler get() { + if (instance == null) { + instance = new GunRenderingHandler(); + } + return instance; + } @Nullable - public ItemStack getRenderingWeapon() - { + public ItemStack getRenderingWeapon() { return this.renderingWeapon; } @SubscribeEvent - public void onTick(TickEvent.ClientTickEvent event) - { - if(event.phase != TickEvent.Phase.END) + public void onTick(TickEvent.ClientTickEvent event) { + if (event.phase != TickEvent.Phase.END) return; this.updateSprinting(); @@ -129,48 +113,39 @@ public void onTick(TickEvent.ClientTickEvent event) this.updateImmersiveCamera(); } - private void updateSprinting() - { + private void updateSprinting() { this.prevSprintTransition = this.sprintTransition; Minecraft mc = Minecraft.getInstance(); - if(mc.player != null && mc.player.isSprinting() && !ModSyncedDataKeys.SHOOTING.getValue(mc.player) && !ModSyncedDataKeys.RELOADING.getValue(mc.player) && !AimingHandler.get().isAiming() && this.sprintCooldown == 0) - { - if(this.sprintTransition < 5) - { + if (mc.player != null && mc.player.isSprinting() && !ModSyncedDataKeys.SHOOTING.getValue(mc.player) && !ModSyncedDataKeys.RELOADING.getValue(mc.player) && !AimingHandler.get().isAiming() && this.sprintCooldown == 0) { + if (this.sprintTransition < 5) { this.sprintTransition++; } - } - else if(this.sprintTransition > 0) - { + } else if (this.sprintTransition > 0) { this.sprintTransition--; } - if(this.sprintCooldown > 0) - { + if (this.sprintCooldown > 0) { this.sprintCooldown--; } } - private void updateMuzzleFlash() - { + private void updateMuzzleFlash() { this.entityIdForMuzzleFlash.removeAll(this.entityIdForDrawnMuzzleFlash); this.entityIdToRandomValue.keySet().removeAll(this.entityIdForDrawnMuzzleFlash); this.entityIdForDrawnMuzzleFlash.clear(); this.entityIdForDrawnMuzzleFlash.addAll(this.entityIdForMuzzleFlash); } - private void updateOffhandTranslate() - { + private void updateOffhandTranslate() { this.prevOffhandTranslate = this.offhandTranslate; Minecraft mc = Minecraft.getInstance(); - if(mc.player == null) + if (mc.player == null) return; boolean down = false; ItemStack heldItem = mc.player.getMainHandItem(); - if(heldItem.getItem() instanceof GunItem) - { + if (heldItem.getItem() instanceof GunItem) { Gun modifiedGun = ((GunItem) heldItem.getItem()).getModifiedGun(heldItem); down = !modifiedGun.getGeneral().getGripType().getHeldAnimation().canRenderOffhandItem(); } @@ -180,9 +155,8 @@ private void updateOffhandTranslate() } @SubscribeEvent - public void onGunFire(GunFireEvent.Post event) - { - if(!event.isClient()) + public void onGunFire(GunFireEvent.Post event) { + if (!event.isClient()) return; this.sprintTransition = 0; @@ -191,14 +165,12 @@ public void onGunFire(GunFireEvent.Post event) ItemStack heldItem = event.getStack(); GunItem gunItem = (GunItem) heldItem.getItem(); Gun modifiedGun = gunItem.getModifiedGun(heldItem); - if(modifiedGun.getDisplay().getFlash() != null) - { + if (modifiedGun.getDisplay().getFlash() != null) { this.showMuzzleFlashForPlayer(Minecraft.getInstance().player.getId()); } } - public void showMuzzleFlashForPlayer(int entityId) - { + public void showMuzzleFlashForPlayer(int entityId) { this.entityIdForMuzzleFlash.add(entityId); this.entityIdToRandomValue.put(entityId, this.random.nextFloat()); } @@ -210,24 +182,23 @@ public void showMuzzleFlashForPlayer(int entityId) * avoids having to render the game twice, which saves a lot of performance. */ @SubscribeEvent - public void onComputeFov(ViewportEvent.ComputeFov event) - { + public void onComputeFov(ViewportEvent.ComputeFov event) { // We only want to modify the FOV of the viewport for rendering hand/items in first person - if(event.usedConfiguredFov()) + if (event.usedConfiguredFov()) return; // Test if the gun has a scope LocalPlayer player = Objects.requireNonNull(Minecraft.getInstance().player); ItemStack heldItem = player.getMainHandItem(); - if(!(heldItem.getItem() instanceof GunItem gunItem)) + if (!(heldItem.getItem() instanceof GunItem gunItem)) return; Gun modifiedGun = gunItem.getModifiedGun(heldItem); - if(!modifiedGun.canAimDownSight()) + if (!modifiedGun.canAimDownSight()) return; // Change the FOV of the first person viewport based on the scope and aim progress - if(AimingHandler.get().getNormalisedAdsProgress() <= 0) + if (AimingHandler.get().getNormalisedAdsProgress() <= 0) return; // Calculate the time curve @@ -242,18 +213,15 @@ public void onComputeFov(ViewportEvent.ComputeFov event) } @SubscribeEvent - public void onRenderOverlay(RenderHandEvent event) - { + public void onRenderOverlay(RenderHandEvent event) { PoseStack poseStack = event.getPoseStack(); boolean right = Minecraft.getInstance().options.mainHand().get() == HumanoidArm.RIGHT ? event.getHand() == InteractionHand.MAIN_HAND : event.getHand() == InteractionHand.OFF_HAND; HumanoidArm hand = right ? HumanoidArm.RIGHT : HumanoidArm.LEFT; ItemStack heldItem = event.getItemStack(); - if(event.getHand() == InteractionHand.OFF_HAND) - { - if(heldItem.getItem() instanceof GunItem) - { + if (event.getHand() == InteractionHand.OFF_HAND) { + if (heldItem.getItem() instanceof GunItem) { event.setCanceled(true); return; } @@ -262,11 +230,9 @@ public void onRenderOverlay(RenderHandEvent event) poseStack.translate(0, offhand * -0.6F, 0); Player player = Minecraft.getInstance().player; - if(player != null && player.getMainHandItem().getItem() instanceof GunItem) - { + if (player != null && player.getMainHandItem().getItem() instanceof GunItem) { Gun modifiedGun = ((GunItem) player.getMainHandItem().getItem()).getModifiedGun(player.getMainHandItem()); - if(!modifiedGun.getGeneral().getGripType().getHeldAnimation().canRenderOffhandItem()) - { + if (!modifiedGun.getGeneral().getGripType().getHeldAnimation().canRenderOffhandItem()) { return; } } @@ -275,8 +241,7 @@ public void onRenderOverlay(RenderHandEvent event) poseStack.translate(0, -1 * AimingHandler.get().getNormalisedAdsProgress(), 0); } - if(!(heldItem.getItem() instanceof GunItem gunItem)) - { + if (!(heldItem.getItem() instanceof GunItem gunItem)) { return; } @@ -284,16 +249,14 @@ public void onRenderOverlay(RenderHandEvent event) event.setCanceled(true); ItemStack overrideModel = ItemStack.EMPTY; - if(heldItem.getTag() != null) - { - if(heldItem.getTag().contains("Model", Tag.TAG_COMPOUND)) - { + if (heldItem.getTag() != null) { + if (heldItem.getTag().contains("Model", Tag.TAG_COMPOUND)) { overrideModel = ItemStack.of(heldItem.getTag().getCompound("Model")); } } LocalPlayer player = Objects.requireNonNull(Minecraft.getInstance().player); - BakedModel model = Minecraft.getInstance().getItemRenderer().getModel(overrideModel.isEmpty() ? heldItem : overrideModel, player.level, player, 0); + BakedModel model = Minecraft.getInstance().getItemRenderer().getModel(overrideModel.isEmpty() ? heldItem : overrideModel, player.level(), player, 0); float scaleX = model.getTransforms().firstPersonRightHand.scale.x(); float scaleY = model.getTransforms().firstPersonRightHand.scale.y(); float scaleZ = model.getTransforms().firstPersonRightHand.scale.z(); @@ -304,10 +267,8 @@ public void onRenderOverlay(RenderHandEvent event) poseStack.pushPose(); Gun modifiedGun = gunItem.getModifiedGun(heldItem); - if(AimingHandler.get().getNormalisedAdsProgress() > 0 && modifiedGun.canAimDownSight()) - { - if(event.getHand() == InteractionHand.MAIN_HAND) - { + if (AimingHandler.get().getNormalisedAdsProgress() > 0 && modifiedGun.canAimDownSight()) { + if (event.getHand() == InteractionHand.MAIN_HAND) { double xOffset = translateX; double yOffset = translateY; double zOffset = translateZ; @@ -325,8 +286,7 @@ public void onRenderOverlay(RenderHandEvent event) /* Creates the required offsets to position the scope into the middle of the screen. */ Scope scope = Gun.getScope(heldItem); - if(modifiedGun.canAttachType(IAttachment.Type.SCOPE) && scope != null) - { + if (modifiedGun.canAttachType(IAttachment.Type.SCOPE) && scope != null) { /* Translate to the mounting position of scopes */ Vec3 scopePosition = PropertyHelper.getAttachmentPosition(heldItem, modifiedGun, IAttachment.Type.SCOPE).subtract(gunOrigin); xOffset += scopePosition.x * 0.0625 * scaleX; @@ -341,9 +301,7 @@ public void onRenderOverlay(RenderHandEvent event) xOffset += scopeCamera.x * 0.0625 * scaleX * scopeScale.x; yOffset += scopeCamera.y * 0.0625 * scaleY * scopeScale.y; zOffset += scopeCamera.z * 0.0625 * scaleZ * scopeScale.z; - } - else - { + } else { /* Translate to iron sight */ Vec3 ironSightCamera = PropertyHelper.getIronSightCamera(heldItem, modifiedGun, gunOrigin).subtract(gunOrigin); xOffset += ironSightCamera.x * 0.0625 * scaleX; @@ -351,8 +309,7 @@ public void onRenderOverlay(RenderHandEvent event) zOffset += ironSightCamera.z * 0.0625 * scaleZ; /* Need to add this to ensure old method still works */ - if(PropertyHelper.isLegacyIronSight(heldItem)) - { + if (PropertyHelper.isLegacyIronSight(heldItem)) { zOffset += 0.72; } } @@ -395,10 +352,10 @@ public void onRenderOverlay(RenderHandEvent event) this.applyShieldTransforms(poseStack, player, modifiedGun, event.getPartialTick()); /* Determines the lighting for the weapon. Weapon will appear bright from muzzle flash or light sources */ - int blockLight = player.isOnFire() ? 15 : player.level.getBrightness(LightLayer.BLOCK, BlockPos.containing(player.getEyePosition(event.getPartialTick()))); + int blockLight = player.isOnFire() ? 15 : player.level().getBrightness(LightLayer.BLOCK, BlockPos.containing(player.getEyePosition(event.getPartialTick()))); blockLight += (this.entityIdForMuzzleFlash.contains(player.getId()) ? 3 : 0); blockLight = Math.min(blockLight, 15); - int packedLight = LightTexture.pack(blockLight, player.level.getBrightness(LightLayer.SKY, BlockPos.containing(player.getEyePosition(event.getPartialTick())))); + int packedLight = LightTexture.pack(blockLight, player.level().getBrightness(LightLayer.SKY, BlockPos.containing(player.getEyePosition(event.getPartialTick())))); /* Renders the first persons arms from the grip type of the weapon */ poseStack.pushPose(); @@ -412,11 +369,9 @@ public void onRenderOverlay(RenderHandEvent event) poseStack.popPose(); } - private void applyBobbingTransforms(PoseStack poseStack, float partialTicks) - { + private void applyBobbingTransforms(PoseStack poseStack, float partialTicks) { Minecraft mc = Minecraft.getInstance(); - if(mc.options.bobView().get() && mc.getCameraEntity() instanceof Player player) - { + if (mc.options.bobView().get() && mc.getCameraEntity() instanceof Player player) { float deltaDistanceWalked = player.walkDist - player.walkDistO; float distanceWalked = -(player.walkDist + deltaDistanceWalked * partialTicks); float bobbing = Mth.lerp(partialTicks, player.oBob, player.bob); @@ -438,10 +393,8 @@ private void applyBobbingTransforms(PoseStack poseStack, float partialTicks) } } - private void applyAimingTransforms(PoseStack poseStack, ItemStack heldItem, Gun modifiedGun, float x, float y, float z, int offset) - { - if(!Config.CLIENT.display.oldAnimations.get()) - { + private void applyAimingTransforms(PoseStack poseStack, ItemStack heldItem, Gun modifiedGun, float x, float y, float z, int offset) { + if (!Config.CLIENT.display.oldAnimations.get()) { poseStack.translate(x * offset, y, z); poseStack.translate(0, -0.25, 0.25); float aiming = (float) Math.sin(Math.toRadians(AimingHandler.get().getNormalisedAdsProgress() * 180F)); @@ -454,10 +407,8 @@ private void applyAimingTransforms(PoseStack poseStack, ItemStack heldItem, Gun } } - private void applySwayTransforms(PoseStack poseStack, Gun modifiedGun, LocalPlayer player, float x, float y, float z, float partialTicks) - { - if(Config.CLIENT.display.weaponSway.get() && player != null) - { + private void applySwayTransforms(PoseStack poseStack, Gun modifiedGun, LocalPlayer player, float x, float y, float z, float partialTicks) { + if (Config.CLIENT.display.weaponSway.get() && player != null) { poseStack.translate(x, y, z); double zOffset = modifiedGun.getGeneral().getGripType().getHeldAnimation().getFallSwayZOffset(); @@ -481,10 +432,8 @@ private void applySwayTransforms(PoseStack poseStack, Gun modifiedGun, LocalPlay } } - private void applySprintingTransforms(Gun modifiedGun, HumanoidArm hand, PoseStack poseStack, float partialTicks) - { - if(Config.CLIENT.display.sprintAnimation.get() && modifiedGun.getGeneral().getGripType().getHeldAnimation().canApplySprintingAnimation()) - { + private void applySprintingTransforms(Gun modifiedGun, HumanoidArm hand, PoseStack poseStack, float partialTicks) { + if (Config.CLIENT.display.sprintAnimation.get() && modifiedGun.getGeneral().getGripType().getHeldAnimation().canApplySprintingAnimation()) { float leftHanded = hand == HumanoidArm.LEFT ? -1 : 1; float transition = (this.prevSprintTransition + (this.sprintTransition - this.prevSprintTransition) * partialTicks) / 5F; transition = (float) Math.sin((transition * Math.PI) / 2); @@ -494,19 +443,16 @@ private void applySprintingTransforms(Gun modifiedGun, HumanoidArm hand, PoseSta } } - private void applyReloadTransforms(PoseStack poseStack, float partialTicks) - { + private void applyReloadTransforms(PoseStack poseStack, float partialTicks) { float reloadProgress = ReloadHandler.get().getReloadProgress(partialTicks); poseStack.translate(0, 0.35 * reloadProgress, 0); poseStack.translate(0, 0, -0.1 * reloadProgress); poseStack.mulPose(Axis.XP.rotationDegrees(45F * reloadProgress)); } - private void applyRecoilTransforms(PoseStack poseStack, ItemStack item, Gun gun) - { + private void applyRecoilTransforms(PoseStack poseStack, ItemStack item, Gun gun) { double recoilNormal = RecoilHandler.get().getGunRecoilNormal(); - if(Gun.hasAttachmentEquipped(item, gun, IAttachment.Type.SCOPE)) - { + if (Gun.hasAttachmentEquipped(item, gun, IAttachment.Type.SCOPE)) { recoilNormal -= recoilNormal * (0.5 * AimingHandler.get().getNormalisedAdsProgress()); } float kickReduction = 1.0F - GunModifierHelper.getKickReduction(item); @@ -523,10 +469,8 @@ private void applyRecoilTransforms(PoseStack poseStack, ItemStack item, Gun gun) poseStack.translate(0, 0, -0.15); } - private void applyShieldTransforms(PoseStack poseStack, LocalPlayer player, Gun modifiedGun, float partialTick) - { - if(player.isUsingItem() && player.getOffhandItem().getItem() == Items.SHIELD && modifiedGun.getGeneral().getGripType() == GripType.ONE_HANDED) - { + private void applyShieldTransforms(PoseStack poseStack, LocalPlayer player, Gun modifiedGun, float partialTick) { + if (player.isUsingItem() && player.getOffhandItem().getItem() == Items.SHIELD && modifiedGun.getGeneral().getGripType() == GripType.ONE_HANDED) { double time = Mth.clamp((player.getTicksUsingItem() + partialTick), 0.0, 4.0) / 4.0; poseStack.translate(0, 0.35 * time, 0); poseStack.mulPose(Axis.XP.rotationDegrees(45F * (float) time)); @@ -534,37 +478,33 @@ private void applyShieldTransforms(PoseStack poseStack, LocalPlayer player, Gun } @SubscribeEvent - public void onTick(TickEvent.RenderTickEvent event) - { - if(event.phase.equals(TickEvent.Phase.START)) + public void onTick(TickEvent.RenderTickEvent event) { + if (event.phase.equals(TickEvent.Phase.START)) return; Minecraft mc = Minecraft.getInstance(); - if(!mc.isWindowActive()) + if (!mc.isWindowActive()) return; Player player = mc.player; - if(player == null) + if (player == null) return; - if(Minecraft.getInstance().options.getCameraType() != CameraType.FIRST_PERSON) + if (Minecraft.getInstance().options.getCameraType() != CameraType.FIRST_PERSON) return; ItemStack heldItem = player.getItemInHand(InteractionHand.MAIN_HAND); - if(heldItem.isEmpty()) + if (heldItem.isEmpty()) return; - if(player.isUsingItem() && player.getUsedItemHand() == InteractionHand.MAIN_HAND && heldItem.getItem() instanceof GrenadeItem) - { - if(!((GrenadeItem) heldItem.getItem()).canCook()) + if (player.isUsingItem() && player.getUsedItemHand() == InteractionHand.MAIN_HAND && heldItem.getItem() instanceof GrenadeItem) { + if (!((GrenadeItem) heldItem.getItem()).canCook()) return; int duration = player.getTicksUsingItem(); - if(duration >= 10) - { + if (duration >= 10) { float cookTime = 1.0F - ((float) (duration - 10) / (float) (player.getUseItem().getUseDuration() - 10)); - if(cookTime > 0.0F) - { + if (cookTime > 0.0F) { float scale = 3; Window window = mc.getWindow(); int i = (int) ((window.getGuiScaledHeight() / 2 - 7 - 60) / scale); @@ -574,13 +514,13 @@ public void onTick(TickEvent.RenderTickEvent event) RenderSystem.defaultBlendFunc(); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, GuiComponent.GUI_ICONS_LOCATION); + RenderSystem.setShaderTexture(0, GUI_ICONS_LOCATION); - PoseStack stack = new PoseStack(); - stack.scale(scale, scale, scale); + GuiGraphics graphics = new GuiGraphics(mc, mc.renderBuffers().bufferSource()); + graphics.pose().scale(scale, scale, scale); int progress = (int) Math.ceil((cookTime) * 17.0F) - 1; - Screen.blit(stack, j, i, 36, 94, 16, 4, 256, 256); - Screen.blit(stack, j, i, 52, 94, progress, 4, 256, 256); + graphics.blit(GUI_ICONS_LOCATION, j, i, 36, 94, 16, 4, 256, 256); + graphics.blit(GUI_ICONS_LOCATION, j, i, 52, 94, progress, 4, 256, 256); RenderSystem.disableBlend(); } @@ -588,14 +528,11 @@ public void onTick(TickEvent.RenderTickEvent event) return; } - if(Config.CLIENT.display.cooldownIndicator.get() && heldItem.getItem() instanceof GunItem) - { + if (Config.CLIENT.display.cooldownIndicator.get() && heldItem.getItem() instanceof GunItem) { Gun gun = ((GunItem) heldItem.getItem()).getGun(); - if(!gun.getGeneral().isAuto()) - { + if (!gun.getGeneral().isAuto()) { float coolDown = player.getCooldowns().getCooldownPercent(heldItem.getItem(), event.renderTickTime); - if(coolDown > 0.0F) - { + if (coolDown > 0.0F) { float scale = 3; Window window = mc.getWindow(); int i = (int) ((window.getGuiScaledHeight() / 2 - 7 - 60) / scale); @@ -605,13 +542,13 @@ public void onTick(TickEvent.RenderTickEvent event) RenderSystem.defaultBlendFunc(); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, GuiComponent.GUI_ICONS_LOCATION); + RenderSystem.setShaderTexture(0, GUI_ICONS_LOCATION); - PoseStack stack = new PoseStack(); - stack.scale(scale, scale, scale); + GuiGraphics graphics = new GuiGraphics(mc, mc.renderBuffers().bufferSource()); + graphics.pose().scale(scale, scale, scale); int progress = (int) Math.ceil((coolDown + 0.05) * 17.0F) - 1; - Screen.blit(stack, j, i, 36, 94, 16, 4, 256, 256); - Screen.blit(stack, j, i, 52, 94, progress, 4, 256, 256); + graphics.blit(GUI_ICONS_LOCATION, j, i, 36, 94, 16, 4, 256, 256); + graphics.blit(GUI_ICONS_LOCATION, j, i, 52, 94, progress, 4, 256, 256); RenderSystem.disableBlend(); } @@ -619,30 +556,23 @@ public void onTick(TickEvent.RenderTickEvent event) } } - public void applyWeaponScale(ItemStack heldItem, PoseStack stack) - { - if(heldItem.getTag() != null) - { + public void applyWeaponScale(ItemStack heldItem, PoseStack stack) { + if (heldItem.getTag() != null) { CompoundTag compound = heldItem.getTag(); - if(compound.contains("Scale", Tag.TAG_FLOAT)) - { + if (compound.contains("Scale", Tag.TAG_FLOAT)) { float scale = compound.getFloat("Scale"); stack.scale(scale, scale, scale); } } } - public boolean renderWeapon(@Nullable LivingEntity entity, ItemStack stack, ItemDisplayContext display, PoseStack poseStack, MultiBufferSource renderTypeBuffer, int light, float partialTicks) - { - if(stack.getItem() instanceof GunItem) - { + public boolean renderWeapon(@Nullable LivingEntity entity, ItemStack stack, ItemDisplayContext display, PoseStack poseStack, MultiBufferSource renderTypeBuffer, int light, float partialTicks) { + if (stack.getItem() instanceof GunItem) { poseStack.pushPose(); ItemStack model = ItemStack.EMPTY; - if(stack.getTag() != null) - { - if(stack.getTag().contains("Model", Tag.TAG_COMPOUND)) - { + if (stack.getTag() != null) { + if (stack.getTag().contains("Model", Tag.TAG_COMPOUND)) { model = ItemStack.of(stack.getTag().getCompound("Model")); } } @@ -661,39 +591,29 @@ public boolean renderWeapon(@Nullable LivingEntity entity, ItemStack stack, Item return false; } - private void renderGun(@Nullable LivingEntity entity, ItemDisplayContext display, ItemStack stack, PoseStack poseStack, MultiBufferSource renderTypeBuffer, int light, float partialTicks) - { - if(ModelOverrides.hasModel(stack)) - { + private void renderGun(@Nullable LivingEntity entity, ItemDisplayContext display, ItemStack stack, PoseStack poseStack, MultiBufferSource renderTypeBuffer, int light, float partialTicks) { + if (ModelOverrides.hasModel(stack)) { IOverrideModel model = ModelOverrides.getModel(stack); - if(model != null) - { + if (model != null) { model.render(partialTicks, display, stack, ItemStack.EMPTY, entity, poseStack, renderTypeBuffer, light, OverlayTexture.NO_OVERLAY); } - } - else - { - Level level = entity != null ? entity.level : null; + } else { + Level level = entity != null ? entity.level() : null; BakedModel bakedModel = Minecraft.getInstance().getItemRenderer().getModel(stack, level, entity, 0); Minecraft.getInstance().getItemRenderer().render(stack, ItemDisplayContext.NONE, false, poseStack, renderTypeBuffer, light, OverlayTexture.NO_OVERLAY, bakedModel); } } - private void renderAttachments(@Nullable LivingEntity entity, ItemDisplayContext display, ItemStack stack, PoseStack poseStack, MultiBufferSource renderTypeBuffer, int light, float partialTicks) - { - if(stack.getItem() instanceof GunItem) - { + private void renderAttachments(@Nullable LivingEntity entity, ItemDisplayContext display, ItemStack stack, PoseStack poseStack, MultiBufferSource renderTypeBuffer, int light, float partialTicks) { + if (stack.getItem() instanceof GunItem) { Gun modifiedGun = ((GunItem) stack.getItem()).getModifiedGun(stack); CompoundTag gunTag = stack.getOrCreateTag(); CompoundTag attachments = gunTag.getCompound("Attachments"); - for(String tagKey : attachments.getAllKeys()) - { + for (String tagKey : attachments.getAllKeys()) { IAttachment.Type type = IAttachment.Type.byTagKey(tagKey); - if(type != null && modifiedGun.canAttachType(type)) - { + if (type != null && modifiedGun.canAttachType(type)) { ItemStack attachmentStack = Gun.getAttachment(type, stack); - if(!attachmentStack.isEmpty()) - { + if (!attachmentStack.isEmpty()) { poseStack.pushPose(); /* Translates the attachment to a standard position by removing the origin */ @@ -716,13 +636,10 @@ private void renderAttachments(@Nullable LivingEntity entity, ItemDisplayContext poseStack.translate(-center.x, -center.y, -center.z); IOverrideModel model = ModelOverrides.getModel(attachmentStack); - if(model != null) - { + if (model != null) { model.render(partialTicks, display, attachmentStack, stack, entity, poseStack, renderTypeBuffer, light, OverlayTexture.NO_OVERLAY); - } - else - { - Level level = entity != null ? entity.level : null; + } else { + Level level = entity != null ? entity.level() : null; BakedModel bakedModel = Minecraft.getInstance().getItemRenderer().getModel(attachmentStack, level, entity, 0); Minecraft.getInstance().getItemRenderer().render(attachmentStack, ItemDisplayContext.NONE, false, poseStack, renderTypeBuffer, light, OverlayTexture.NO_OVERLAY, GunModel.wrap(bakedModel)); } @@ -734,25 +651,23 @@ private void renderAttachments(@Nullable LivingEntity entity, ItemDisplayContext } } - private void renderMuzzleFlash(@Nullable LivingEntity entity, PoseStack poseStack, MultiBufferSource buffer, ItemStack weapon, ItemDisplayContext display, float partialTicks) - { + private void renderMuzzleFlash(@Nullable LivingEntity entity, PoseStack poseStack, MultiBufferSource buffer, ItemStack weapon, ItemDisplayContext display, float partialTicks) { Gun modifiedGun = ((GunItem) weapon.getItem()).getModifiedGun(weapon); - if(modifiedGun.getDisplay().getFlash() == null) + if (modifiedGun.getDisplay().getFlash() == null) return; - if(display != ItemDisplayContext.FIRST_PERSON_RIGHT_HAND && display != ItemDisplayContext.THIRD_PERSON_RIGHT_HAND && display != ItemDisplayContext.FIRST_PERSON_LEFT_HAND && display != ItemDisplayContext.THIRD_PERSON_LEFT_HAND) + if (display != ItemDisplayContext.FIRST_PERSON_RIGHT_HAND && display != ItemDisplayContext.THIRD_PERSON_RIGHT_HAND && display != ItemDisplayContext.FIRST_PERSON_LEFT_HAND && display != ItemDisplayContext.THIRD_PERSON_LEFT_HAND) return; - if(entity == null || !this.entityIdForMuzzleFlash.contains(entity.getId())) + if (entity == null || !this.entityIdForMuzzleFlash.contains(entity.getId())) return; float randomValue = this.entityIdToRandomValue.get(entity.getId()); this.drawMuzzleFlash(weapon, modifiedGun, randomValue, randomValue >= 0.5F, poseStack, buffer, partialTicks); } - private void drawMuzzleFlash(ItemStack weapon, Gun modifiedGun, float random, boolean flip, PoseStack poseStack, MultiBufferSource buffer, float partialTicks) - { - if(!PropertyHelper.hasMuzzleFlash(weapon, modifiedGun)) + private void drawMuzzleFlash(ItemStack weapon, Gun modifiedGun, float random, boolean flip, PoseStack poseStack, MultiBufferSource buffer, float partialTicks) { + if (!PropertyHelper.hasMuzzleFlash(weapon, modifiedGun)) return; poseStack.pushPose(); @@ -766,8 +681,7 @@ private void drawMuzzleFlash(ItemStack weapon, Gun modifiedGun, float random, bo // Legacy method to move muzzle flash to be at the end of the barrel attachment ItemStack barrelStack = Gun.getAttachment(IAttachment.Type.BARREL, weapon); - if(!barrelStack.isEmpty() && barrelStack.getItem() instanceof IBarrel barrel && !PropertyHelper.isUsingBarrelMuzzleFlash(barrelStack)) - { + if (!barrelStack.isEmpty() && barrelStack.getItem() instanceof IBarrel barrel && !PropertyHelper.isUsingBarrelMuzzleFlash(barrelStack)) { Vec3 scale = PropertyHelper.getAttachmentScale(weapon, modifiedGun, IAttachment.Type.BARREL); double length = barrel.getProperties().getLength(); poseStack.translate(0, 0, -length * 0.0625 * scale.z); @@ -799,14 +713,13 @@ private void drawMuzzleFlash(ItemStack weapon, Gun modifiedGun, float random, bo poseStack.popPose(); } - private void renderReloadArm(PoseStack poseStack, MultiBufferSource buffer, int light, Gun modifiedGun, ItemStack stack, HumanoidArm hand, float translateX) - { + private void renderReloadArm(PoseStack poseStack, MultiBufferSource buffer, int light, Gun modifiedGun, ItemStack stack, HumanoidArm hand, float translateX) { Minecraft mc = Minecraft.getInstance(); - if(mc.player == null || mc.player.tickCount < ReloadHandler.get().getStartReloadTick() || ReloadHandler.get().getReloadTimer() != 5) + if (mc.player == null || mc.player.tickCount < ReloadHandler.get().getStartReloadTick() || ReloadHandler.get().getReloadTimer() != 5) return; Item item = ForgeRegistries.ITEMS.getValue(modifiedGun.getProjectile().getItem()); - if(item == null) + if (item == null) return; poseStack.pushPose(); @@ -817,8 +730,7 @@ private void renderReloadArm(PoseStack poseStack, MultiBufferSource buffer, int float interval = GunEnchantmentHelper.getReloadInterval(stack); float reload = ((mc.player.tickCount - ReloadHandler.get().getStartReloadTick() + mc.getFrameTime()) % interval) / interval; float percent = 1.0F - reload; - if(percent >= 0.5F) - { + if (percent >= 0.5F) { percent = 1.0F - percent; } percent *= 2F; @@ -835,8 +747,7 @@ private void renderReloadArm(PoseStack poseStack, MultiBufferSource buffer, int RenderUtil.renderFirstPersonArm(mc.player, hand.getOpposite(), poseStack, buffer, light); - if(reload < 0.5F) - { + if (reload < 0.5F) { poseStack.pushPose(); poseStack.translate(-side * 5 * 0.0625, 15 * 0.0625, -1 * 0.0625); poseStack.mulPose(Axis.XP.rotationDegrees(180F)); @@ -846,20 +757,17 @@ private void renderReloadArm(PoseStack poseStack, MultiBufferSource buffer, int boolean isModel = model.isGui3d(); this.random.setSeed(Item.getId(item)); int count = Math.min(modifiedGun.getGeneral().getReloadAmount(), 5); - for(int i = 0; i < count; ++i) - { + final Quaternionf rotation = new Quaternionf().rotationZYX(22.5F, 0.0F, 150.0F); + for (int i = 0; i < count; ++i) { poseStack.pushPose(); - if(i > 0) - { - if(isModel) - { + poseStack.mulPose(rotation); + if (i > 0) { + if (isModel) { float x = (this.random.nextFloat() * 2.0F - 1.0F) * 0.15F; float y = (this.random.nextFloat() * 2.0F - 1.0F) * 0.15F; float z = (this.random.nextFloat() * 2.0F - 1.0F) * 0.15F; poseStack.translate(x, y, z); - } - else - { + } else { float x = (this.random.nextFloat() * 2.0F - 1.0F) * 0.15F * 0.5F; float y = (this.random.nextFloat() * 2.0F - 1.0F) * 0.15F * 0.5F; poseStack.translate(x, y, 0); @@ -869,8 +777,7 @@ private void renderReloadArm(PoseStack poseStack, MultiBufferSource buffer, int RenderUtil.renderModel(ammo, ItemDisplayContext.THIRD_PERSON_LEFT_HAND, poseStack, buffer, light, OverlayTexture.NO_OVERLAY, null); poseStack.popPose(); - if(!isModel) - { + if (!isModel) { poseStack.translate(0.0, 0.0, 0.09375F); } } @@ -881,45 +788,39 @@ private void renderReloadArm(PoseStack poseStack, MultiBufferSource buffer, int /** * A temporary hack to get the equip progress until Forge fixes the issue. + * * @return */ - private float getEquipProgress(float partialTicks) - { - if(this.equippedProgressMainHandField == null) - { + private float getEquipProgress(float partialTicks) { + if (this.equippedProgressMainHandField == null) { this.equippedProgressMainHandField = ObfuscationReflectionHelper.findField(ItemInHandRenderer.class, "f_109302_"); this.equippedProgressMainHandField.setAccessible(true); } - if(this.prevEquippedProgressMainHandField == null) - { + if (this.prevEquippedProgressMainHandField == null) { this.prevEquippedProgressMainHandField = ObfuscationReflectionHelper.findField(ItemInHandRenderer.class, "f_109303_"); this.prevEquippedProgressMainHandField.setAccessible(true); } ItemInHandRenderer firstPersonRenderer = Minecraft.getInstance().getEntityRenderDispatcher().getItemInHandRenderer(); - try - { + try { float equippedProgressMainHand = (float) this.equippedProgressMainHandField.get(firstPersonRenderer); float prevEquippedProgressMainHand = (float) this.prevEquippedProgressMainHandField.get(firstPersonRenderer); return 1.0F - Mth.lerp(partialTicks, prevEquippedProgressMainHand, equippedProgressMainHand); - } - catch(IllegalAccessException e) - { + } catch (IllegalAccessException e) { e.printStackTrace(); } return 0.0F; } - private void updateImmersiveCamera() - { + private void updateImmersiveCamera() { this.prevImmersiveRoll = this.immersiveRoll; this.prevFallSway = this.fallSway; Minecraft mc = Minecraft.getInstance(); - if(mc.player == null) + if (mc.player == null) return; ItemStack heldItem = mc.player.getMainHandItem(); - float targetAngle = heldItem.getItem() instanceof GunItem || !Config.CLIENT.display.restrictCameraRollToWeapons.get() ? mc.player.input.leftImpulse: 0F; + float targetAngle = heldItem.getItem() instanceof GunItem || !Config.CLIENT.display.restrictCameraRollToWeapons.get() ? mc.player.input.leftImpulse : 0F; float speed = mc.player.input.leftImpulse != 0 ? 0.1F : 0.15F; this.immersiveRoll = Mth.lerp(speed, this.immersiveRoll, targetAngle); @@ -933,10 +834,8 @@ private void updateImmersiveCamera() } @SubscribeEvent - public void onCameraSetup(ViewportEvent.ComputeCameraAngles event) - { - if(Config.CLIENT.display.cameraRollEffect.get()) - { + public void onCameraSetup(ViewportEvent.ComputeCameraAngles event) { + if (Config.CLIENT.display.cameraRollEffect.get()) { float roll = (float) Mth.lerp(event.getPartialTick(), this.prevImmersiveRoll, this.immersiveRoll); roll = (float) Math.sin((roll * Math.PI) / 2.0); roll *= Config.CLIENT.display.cameraRollAngle.get().floatValue(); diff --git a/src/main/java/com/mrcrayfish/guns/client/handler/RecoilHandler.java b/src/main/java/com/mrcrayfish/guns/client/handler/RecoilHandler.java index febe4b2a4..9888a592e 100644 --- a/src/main/java/com/mrcrayfish/guns/client/handler/RecoilHandler.java +++ b/src/main/java/com/mrcrayfish/guns/client/handler/RecoilHandler.java @@ -103,10 +103,9 @@ public void onRenderOverlay(RenderHandEvent event) return; ItemStack heldItem = event.getItemStack(); - if(!(heldItem.getItem() instanceof GunItem)) + if(!(heldItem.getItem() instanceof GunItem gunItem)) return; - GunItem gunItem = (GunItem) heldItem.getItem(); Gun modifiedGun = gunItem.getModifiedGun(heldItem); ItemCooldowns tracker = Minecraft.getInstance().player.getCooldowns(); float cooldown = tracker.getCooldownPercent(gunItem, Minecraft.getInstance().getFrameTime()); diff --git a/src/main/java/com/mrcrayfish/guns/client/render/entity/GrenadeRenderer.java b/src/main/java/com/mrcrayfish/guns/client/render/entity/GrenadeRenderer.java index ffd3d76e6..3d90d3b73 100644 --- a/src/main/java/com/mrcrayfish/guns/client/render/entity/GrenadeRenderer.java +++ b/src/main/java/com/mrcrayfish/guns/client/render/entity/GrenadeRenderer.java @@ -5,7 +5,6 @@ import com.mrcrayfish.guns.entity.GrenadeEntity; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.texture.OverlayTexture; @@ -49,7 +48,7 @@ public void render(GrenadeEntity entity, float entityYaw, float partialTicks, Po poseStack.translate(0.0, 0.5, 0.0); - Minecraft.getInstance().getItemRenderer().renderStatic(entity.getItem(), ItemDisplayContext.NONE, light, OverlayTexture.NO_OVERLAY, poseStack, renderTypeBuffer, entity.level, 0); + Minecraft.getInstance().getItemRenderer().renderStatic(entity.getItem(), ItemDisplayContext.NONE, light, OverlayTexture.NO_OVERLAY, poseStack, renderTypeBuffer, entity.level(), 0); poseStack.popPose(); } } diff --git a/src/main/java/com/mrcrayfish/guns/client/render/entity/MissileRenderer.java b/src/main/java/com/mrcrayfish/guns/client/render/entity/MissileRenderer.java index 3a73ac167..8b571c01c 100644 --- a/src/main/java/com/mrcrayfish/guns/client/render/entity/MissileRenderer.java +++ b/src/main/java/com/mrcrayfish/guns/client/render/entity/MissileRenderer.java @@ -7,7 +7,6 @@ import com.mrcrayfish.guns.entity.MissileEntity; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.texture.OverlayTexture; @@ -42,7 +41,7 @@ public void render(MissileEntity entity, float entityYaw, float partialTicks, Po poseStack.mulPose(Axis.YP.rotationDegrees(180F)); poseStack.mulPose(Axis.YP.rotationDegrees(entityYaw)); poseStack.mulPose(Axis.XP.rotationDegrees(entity.getXRot() - 90)); - Minecraft.getInstance().getItemRenderer().renderStatic(entity.getItem(), ItemDisplayContext.NONE, 15728880, OverlayTexture.NO_OVERLAY, poseStack, renderTypeBuffer, entity.level, 0); + Minecraft.getInstance().getItemRenderer().renderStatic(entity.getItem(), ItemDisplayContext.NONE, 15728880, OverlayTexture.NO_OVERLAY, poseStack, renderTypeBuffer, entity.level(), 0); poseStack.translate(0, -1, 0); RenderUtil.renderModel(SpecialModels.FLAME.getModel(), entity.getItem(), poseStack, renderTypeBuffer, 15728880, OverlayTexture.NO_OVERLAY); poseStack.popPose(); diff --git a/src/main/java/com/mrcrayfish/guns/client/render/entity/ProjectileRenderer.java b/src/main/java/com/mrcrayfish/guns/client/render/entity/ProjectileRenderer.java index dcab3867c..7161331b3 100644 --- a/src/main/java/com/mrcrayfish/guns/client/render/entity/ProjectileRenderer.java +++ b/src/main/java/com/mrcrayfish/guns/client/render/entity/ProjectileRenderer.java @@ -6,7 +6,6 @@ import com.mrcrayfish.guns.entity.ProjectileEntity; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.texture.OverlayTexture; @@ -40,14 +39,14 @@ public void render(ProjectileEntity entity, float entityYaw, float partialTicks, { poseStack.mulPose(this.entityRenderDispatcher.cameraOrientation()); poseStack.mulPose(Axis.YP.rotationDegrees(180.0F)); - Minecraft.getInstance().getItemRenderer().renderStatic(entity.getItem(), ItemDisplayContext.GROUND, light, OverlayTexture.NO_OVERLAY, poseStack, renderTypeBuffer, entity.level, 0); + Minecraft.getInstance().getItemRenderer().renderStatic(entity.getItem(), ItemDisplayContext.GROUND, light, OverlayTexture.NO_OVERLAY, poseStack, renderTypeBuffer, entity.level(), 0); } else { poseStack.mulPose(Axis.YP.rotationDegrees(180F)); poseStack.mulPose(Axis.YP.rotationDegrees(entityYaw)); poseStack.mulPose(Axis.XP.rotationDegrees(entity.getXRot())); - Minecraft.getInstance().getItemRenderer().renderStatic(entity.getItem(), ItemDisplayContext.NONE, light, OverlayTexture.NO_OVERLAY, poseStack, renderTypeBuffer, entity.level, 0); + Minecraft.getInstance().getItemRenderer().renderStatic(entity.getItem(), ItemDisplayContext.NONE, light, OverlayTexture.NO_OVERLAY, poseStack, renderTypeBuffer, entity.level(), 0); } poseStack.popPose(); diff --git a/src/main/java/com/mrcrayfish/guns/client/render/entity/ThrowableGrenadeRenderer.java b/src/main/java/com/mrcrayfish/guns/client/render/entity/ThrowableGrenadeRenderer.java index 763da8a80..0ecc9ce78 100644 --- a/src/main/java/com/mrcrayfish/guns/client/render/entity/ThrowableGrenadeRenderer.java +++ b/src/main/java/com/mrcrayfish/guns/client/render/entity/ThrowableGrenadeRenderer.java @@ -6,7 +6,6 @@ import com.mrcrayfish.guns.entity.ThrowableStunGrenadeEntity; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.texture.OverlayTexture; @@ -57,7 +56,7 @@ public void render(ThrowableGrenadeEntity entity, float entityYaw, float partial poseStack.translate(0.0, 0.5, 0.0); - Minecraft.getInstance().getItemRenderer().renderStatic(entity.getItem(), ItemDisplayContext.NONE, light, OverlayTexture.NO_OVERLAY, poseStack, renderTypeBuffer, entity.level, 0); + Minecraft.getInstance().getItemRenderer().renderStatic(entity.getItem(), ItemDisplayContext.NONE, light, OverlayTexture.NO_OVERLAY, poseStack, renderTypeBuffer, entity.level(), 0); poseStack.popPose(); } diff --git a/src/main/java/com/mrcrayfish/guns/client/render/pose/OneHandedPose.java b/src/main/java/com/mrcrayfish/guns/client/render/pose/OneHandedPose.java index 75471a58d..cf64e9253 100644 --- a/src/main/java/com/mrcrayfish/guns/client/render/pose/OneHandedPose.java +++ b/src/main/java/com/mrcrayfish/guns/client/render/pose/OneHandedPose.java @@ -44,7 +44,7 @@ public void renderFirstPersonArms(Player player, HumanoidArm hand, ItemStack sta { poseStack.mulPose(Axis.YP.rotationDegrees(180F)); - BakedModel model = Minecraft.getInstance().getItemRenderer().getModel(stack, player.level, player, 0); + BakedModel model = Minecraft.getInstance().getItemRenderer().getModel(stack, player.level(), player, 0); float translateX = model.getTransforms().firstPersonRightHand.translation.x(); float translateZ = model.getTransforms().firstPersonRightHand.translation.z(); int side = hand.getOpposite() == HumanoidArm.RIGHT ? 1 : -1; diff --git a/src/main/java/com/mrcrayfish/guns/client/render/pose/TwoHandedPose.java b/src/main/java/com/mrcrayfish/guns/client/render/pose/TwoHandedPose.java index 507fb63b2..14baa3c80 100644 --- a/src/main/java/com/mrcrayfish/guns/client/render/pose/TwoHandedPose.java +++ b/src/main/java/com/mrcrayfish/guns/client/render/pose/TwoHandedPose.java @@ -124,7 +124,7 @@ public void renderFirstPersonArms(Player player, HumanoidArm hand, ItemStack sta { poseStack.mulPose(Axis.YP.rotationDegrees(180F)); - BakedModel model = Minecraft.getInstance().getItemRenderer().getModel(stack, player.level, player, 0); + BakedModel model = Minecraft.getInstance().getItemRenderer().getModel(stack, player.level(), player, 0); float translateX = model.getTransforms().firstPersonRightHand.translation.x(); int side = hand.getOpposite() == HumanoidArm.RIGHT ? 1 : -1; poseStack.translate(translateX * side, 0, 0); diff --git a/src/main/java/com/mrcrayfish/guns/client/screen/AttachmentScreen.java b/src/main/java/com/mrcrayfish/guns/client/screen/AttachmentScreen.java index 6a7159b68..52e5ba18c 100644 --- a/src/main/java/com/mrcrayfish/guns/client/screen/AttachmentScreen.java +++ b/src/main/java/com/mrcrayfish/guns/client/screen/AttachmentScreen.java @@ -1,6 +1,5 @@ package com.mrcrayfish.guns.client.screen; -import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; @@ -15,12 +14,11 @@ import com.mrcrayfish.guns.item.attachment.IAttachment; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Tooltip; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.resources.language.I18n; import net.minecraft.network.chat.ClickEvent; import net.minecraft.network.chat.Component; @@ -36,7 +34,6 @@ import net.minecraftforge.fml.ModList; import org.joml.Matrix4f; import org.lwjgl.glfw.GLFW; -import org.lwjgl.opengl.GL11; import java.util.ArrayList; import java.util.Arrays; @@ -46,8 +43,7 @@ /** * Author: MrCrayfish */ -public class AttachmentScreen extends AbstractContainerScreen -{ +public class AttachmentScreen extends AbstractContainerScreen { private static final ResourceLocation GUI_TEXTURES = new ResourceLocation("cgm:textures/gui/attachments.png"); private static final Component CONFIG_TOOLTIP = Component.translatable("cgm.button.config.tooltip"); @@ -62,8 +58,7 @@ public class AttachmentScreen extends AbstractContainerScreen buttons = this.gatherButtons(); - for(int i = 0; i < buttons.size(); i++) - { + for (int i = 0; i < buttons.size(); i++) { MiniButton button = buttons.get(i); - switch(Config.CLIENT.buttonAlignment.get()) - { - case LEFT -> - { + switch (Config.CLIENT.buttonAlignment.get()) { + case LEFT -> { int titleWidth = this.minecraft.font.width(this.title); button.setX(this.leftPos + titleWidth + 8 + 3 + i * 13); } - case RIGHT -> - { + case RIGHT -> { button.setX(this.leftPos + this.imageWidth - 7 - 10 - (buttons.size() - 1 - i) * 13); } } @@ -96,11 +86,9 @@ protected void init() } } - private List gatherButtons() - { + private List gatherButtons() { List buttons = new ArrayList<>(); - if(!Config.CLIENT.hideConfigButton.get()) - { + if (!Config.CLIENT.hideConfigButton.get()) { MiniButton configButton = new MiniButton(0, 0, 192, 0, GUI_TEXTURES, onPress -> this.openConfigScreen()); configButton.setTooltip(Tooltip.create(CONFIG_TOOLTIP)); buttons.add(configButton); @@ -109,160 +97,134 @@ private List gatherButtons() } @Override - public void containerTick() - { + public void containerTick() { super.containerTick(); - if(this.minecraft != null && this.minecraft.player != null) - { - if(!(this.minecraft.player.getMainHandItem().getItem() instanceof GunItem)) - { + if (this.minecraft != null && this.minecraft.player != null) { + if (!(this.minecraft.player.getMainHandItem().getItem() instanceof GunItem)) { Minecraft.getInstance().setScreen(null); } } } @Override - public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) - { - this.renderBackground(poseStack); - super.render(poseStack, mouseX, mouseY, partialTicks); - this.renderTooltip(poseStack, mouseX, mouseY); //Render tool tips + public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { + this.renderBackground(graphics); + super.render(graphics, mouseX, mouseY, partialTicks); + this.renderTooltip(graphics, mouseX, mouseY); //Render tool tips int startX = (this.width - this.imageWidth) / 2; int startY = (this.height - this.imageHeight) / 2; - for(int i = 0; i < IAttachment.Type.values().length; i++) - { - if(RenderUtil.isMouseWithin(mouseX, mouseY, startX + 7, startY + 16 + i * 18, 18, 18)) - { + for (int i = 0; i < IAttachment.Type.values().length; i++) { + if (RenderUtil.isMouseWithin(mouseX, mouseY, startX + 7, startY + 16 + i * 18, 18, 18)) { IAttachment.Type type = IAttachment.Type.values()[i]; - if(!this.menu.getSlot(i).isActive()) - { - this.renderComponentTooltip(poseStack, Arrays.asList(Component.translatable("slot.cgm.attachment." + type.getTranslationKey()), Component.translatable("slot.cgm.attachment.not_applicable")), mouseX, mouseY); - } - else if(this.menu.getSlot(i) instanceof AttachmentSlot slot && slot.getItem().isEmpty() && !this.isCompatible(this.menu.getCarried(), slot)) - { - this.renderComponentTooltip(poseStack, Arrays.asList(Component.translatable("slot.cgm.attachment.incompatible").withStyle(ChatFormatting.YELLOW)), mouseX, mouseY); - } - else if(this.weaponInventory.getItem(i).isEmpty()) - { - this.renderComponentTooltip(poseStack, Collections.singletonList(Component.translatable("slot.cgm.attachment." + type.getTranslationKey())), mouseX, mouseY); + if (!this.menu.getSlot(i).isActive()) { + graphics.renderComponentTooltip(this.font, Arrays.asList(Component.translatable("slot.cgm.attachment." + type.getTranslationKey()), Component.translatable("slot.cgm.attachment.not_applicable")), mouseX, mouseY); + } else if (this.menu.getSlot(i) instanceof AttachmentSlot slot && slot.getItem().isEmpty() && !this.isCompatible(this.menu.getCarried(), slot)) { + graphics.renderComponentTooltip(this.font, Arrays.asList(Component.translatable("slot.cgm.attachment.incompatible").withStyle(ChatFormatting.YELLOW)), mouseX, mouseY); + } else if (this.weaponInventory.getItem(i).isEmpty()) { + graphics.renderComponentTooltip(this.font, Collections.singletonList(Component.translatable("slot.cgm.attachment." + type.getTranslationKey())), mouseX, mouseY); } } } } @Override - protected void renderLabels(PoseStack poseStack, int mouseX, int mouseY) - { + protected void renderLabels(GuiGraphics graphics, int mouseX, int mouseY) { Minecraft minecraft = Minecraft.getInstance(); - this.font.draw(poseStack, this.title, (float) this.titleLabelX, (float) this.titleLabelY, 4210752); - this.font.draw(poseStack, this.playerInventory.getDisplayName(), (float) this.inventoryLabelX, (float) this.inventoryLabelY + 19, 4210752); + graphics.drawString(this.font, this.title, this.titleLabelX, this.titleLabelY, 4210752, false); + graphics.drawString(this.font, this.playerInventory.getDisplayName(), this.inventoryLabelX, this.inventoryLabelY + 19, 4210752, false); int left = (this.width - this.imageWidth) / 2; int top = (this.height - this.imageHeight) / 2; - GuiComponent.enableScissor(left + 26, top + 17, left + 26 + 142, top + 17 + 70); - poseStack.pushPose(); - poseStack.translate(96, 50, 150); - poseStack.translate(this.windowX + (this.mouseGrabbed && this.mouseGrabbedButton == 0 ? mouseX - this.mouseClickedX : 0), 0, 0); - poseStack.translate(0, this.windowY + (this.mouseGrabbed && this.mouseGrabbedButton == 0 ? mouseY - this.mouseClickedY : 0), 0); - poseStack.mulPose(Axis.XP.rotationDegrees(-30F)); - poseStack.mulPose(Axis.XP.rotationDegrees(this.windowRotationY - (this.mouseGrabbed && this.mouseGrabbedButton == 1 ? mouseY - this.mouseClickedY : 0))); - poseStack.mulPose(Axis.YP.rotationDegrees(this.windowRotationX + (this.mouseGrabbed && this.mouseGrabbedButton == 1 ? mouseX - this.mouseClickedX : 0))); - poseStack.mulPose(Axis.YP.rotationDegrees(150F)); - poseStack.scale(this.windowZoom / 10F, this.windowZoom / 10F, this.windowZoom / 10F); - poseStack.mulPose(Axis.YP.rotationDegrees(90F)); - poseStack.mulPoseMatrix((new Matrix4f()).scaling(1.0F, -1.0F, 1.0F)); - poseStack.scale(90.0F, 90.0F, 90.0F); + graphics.enableScissor(left + 26, top + 17, left + 26 + 142, top + 17 + 70); + graphics.pose().pushPose(); + graphics.pose().translate(96, 50, 150); + graphics.pose().translate(this.windowX + (this.mouseGrabbed && this.mouseGrabbedButton == 0 ? mouseX - this.mouseClickedX : 0), 0, 0); + graphics.pose().translate(0, this.windowY + (this.mouseGrabbed && this.mouseGrabbedButton == 0 ? mouseY - this.mouseClickedY : 0), 0); + graphics.pose().mulPose(Axis.XP.rotationDegrees(-30F)); + graphics.pose().mulPose(Axis.XP.rotationDegrees(this.windowRotationY - (this.mouseGrabbed && this.mouseGrabbedButton == 1 ? mouseY - this.mouseClickedY : 0))); + graphics.pose().mulPose(Axis.YP.rotationDegrees(this.windowRotationX + (this.mouseGrabbed && this.mouseGrabbedButton == 1 ? mouseX - this.mouseClickedX : 0))); + graphics.pose().mulPose(Axis.YP.rotationDegrees(150F)); + graphics.pose().scale(this.windowZoom / 10F, this.windowZoom / 10F, this.windowZoom / 10F); + graphics.pose().mulPose(Axis.YP.rotationDegrees(90F)); + graphics.pose().mulPoseMatrix((new Matrix4f()).scaling(1.0F, -1.0F, 1.0F)); + graphics.pose().scale(90.0F, 90.0F, 90.0F); PoseStack modelStack = RenderSystem.getModelViewStack(); modelStack.pushPose(); - modelStack.mulPoseMatrix(poseStack.last().pose()); + modelStack.mulPoseMatrix(graphics.pose().last().pose()); RenderSystem.applyModelViewMatrix(); MultiBufferSource.BufferSource buffer = this.minecraft.renderBuffers().bufferSource(); GunRenderingHandler.get().renderWeapon(this.minecraft.player, this.minecraft.player.getMainHandItem(), ItemDisplayContext.GROUND, new PoseStack(), buffer, 15728880, 0F); buffer.endBatch(); - poseStack.popPose(); + graphics.pose().popPose(); modelStack.popPose(); RenderSystem.applyModelViewMatrix(); - GuiComponent.disableScissor(); - - if(this.showHelp) - { - poseStack.pushPose(); - poseStack.scale(0.5F, 0.5F, 0.5F); - minecraft.font.draw(poseStack, I18n.get("container.cgm.attachments.window_help"), 56, 38, 0xFFFFFF); - poseStack.popPose(); + graphics.disableScissor(); + + if (this.showHelp) { + graphics.pose().pushPose(); + graphics.pose().scale(0.5F, 0.5F, 0.5F); + graphics.drawString(minecraft.font, I18n.get("container.cgm.attachments.window_help"), 56, 38, 0xFFFFFF, false); + graphics.pose().popPose(); } } @Override - protected void renderBg(PoseStack poseStack, float partialTicks, int mouseX, int mouseY) - { - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.setShaderTexture(0, GUI_TEXTURES); + protected void renderBg(GuiGraphics graphics, float partialTicks, int mouseX, int mouseY) { + graphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); int left = (this.width - this.imageWidth) / 2; int top = (this.height - this.imageHeight) / 2; - this.blit(poseStack, left, top, 0, 0, this.imageWidth, this.imageHeight); + graphics.blit(GUI_TEXTURES, left, top, 0, 0, this.imageWidth, this.imageHeight); /* Draws the icons for each attachment slot. If not applicable * for the weapon, it will draw a cross instead. */ - for(int i = 0; i < IAttachment.Type.values().length; i++) - { - if(!this.canPlaceAttachmentInSlot(this.menu.getCarried(), this.menu.getSlot(i))) - { - this.blit(poseStack, left + 8, top + 17 + i * 18, 176, 0, 16, 16); - } - else if(this.weaponInventory.getItem(i).isEmpty()) - { - this.blit(poseStack, left + 8, top + 17 + i * 18, 176, 16 + i * 16, 16, 16); + for (int i = 0; i < IAttachment.Type.values().length; i++) { + if (!this.canPlaceAttachmentInSlot(this.menu.getCarried(), this.menu.getSlot(i))) { + graphics.blit(GUI_TEXTURES, left + 8, top + 17 + i * 18, 176, 0, 16, 16); + } else if (this.weaponInventory.getItem(i).isEmpty()) { + graphics.blit(GUI_TEXTURES, left + 8, top + 17 + i * 18, 176, 16 + i * 16, 16, 16); } } } - private boolean canPlaceAttachmentInSlot(ItemStack stack, Slot slot) - { - if(!slot.isActive()) return false; + private boolean canPlaceAttachmentInSlot(ItemStack stack, Slot slot) { + if (!slot.isActive()) return false; - if(!slot.equals(this.getSlotUnderMouse())) return true; + if (!slot.equals(this.getSlotUnderMouse())) return true; - if(!slot.getItem().isEmpty()) return true; + if (!slot.getItem().isEmpty()) return true; - if(!(slot instanceof AttachmentSlot s)) return true; + if (!(slot instanceof AttachmentSlot s)) return true; - if(!(stack.getItem() instanceof IAttachment a)) return true; + if (!(stack.getItem() instanceof IAttachment a)) return true; - if(!s.getType().equals(a.getType())) return true; + if (!s.getType().equals(a.getType())) return true; return s.mayPlace(stack); } - private boolean isCompatible(ItemStack stack, AttachmentSlot slot) - { - if(stack.isEmpty()) return true; + private boolean isCompatible(ItemStack stack, AttachmentSlot slot) { + if (stack.isEmpty()) return true; - if(!(stack.getItem() instanceof IAttachment attachment)) return false; + if (!(stack.getItem() instanceof IAttachment attachment)) return false; - if(!attachment.getType().equals(slot.getType())) return true; + if (!attachment.getType().equals(slot.getType())) return true; - if(!attachment.canAttachTo(stack)) return false; + if (!attachment.canAttachTo(stack)) return false; return slot.mayPlace(stack); } @Override - public boolean mouseScrolled(double mouseX, double mouseY, double scroll) - { + public boolean mouseScrolled(double mouseX, double mouseY, double scroll) { int startX = (this.width - this.imageWidth) / 2; int startY = (this.height - this.imageHeight) / 2; - if(RenderUtil.isMouseWithin((int) mouseX, (int) mouseY, startX + 26, startY + 17, 142, 70)) - { - if(scroll < 0 && this.windowZoom > 0) - { + if (RenderUtil.isMouseWithin((int) mouseX, (int) mouseY, startX + 26, startY + 17, 142, 70)) { + if (scroll < 0 && this.windowZoom > 0) { this.showHelp = false; this.windowZoom--; - } - else if(scroll > 0) - { + } else if (scroll > 0) { this.showHelp = false; this.windowZoom++; } @@ -271,15 +233,12 @@ else if(scroll > 0) } @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) - { + public boolean mouseClicked(double mouseX, double mouseY, int button) { int startX = (this.width - this.imageWidth) / 2; int startY = (this.height - this.imageHeight) / 2; - if(RenderUtil.isMouseWithin((int) mouseX, (int) mouseY, startX + 26, startY + 17, 142, 70)) - { - if(!this.mouseGrabbed && (button == GLFW.GLFW_MOUSE_BUTTON_LEFT || button == GLFW.GLFW_MOUSE_BUTTON_RIGHT)) - { + if (RenderUtil.isMouseWithin((int) mouseX, (int) mouseY, startX + 26, startY + 17, 142, 70)) { + if (!this.mouseGrabbed && (button == GLFW.GLFW_MOUSE_BUTTON_LEFT || button == GLFW.GLFW_MOUSE_BUTTON_RIGHT)) { this.mouseGrabbed = true; this.mouseGrabbedButton = button == GLFW.GLFW_MOUSE_BUTTON_RIGHT ? 1 : 0; this.mouseClickedX = (int) mouseX; @@ -292,18 +251,13 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) } @Override - public boolean mouseReleased(double mouseX, double mouseY, int button) - { - if(this.mouseGrabbed) - { - if(this.mouseGrabbedButton == 0 && button == GLFW.GLFW_MOUSE_BUTTON_LEFT) - { + public boolean mouseReleased(double mouseX, double mouseY, int button) { + if (this.mouseGrabbed) { + if (this.mouseGrabbedButton == 0 && button == GLFW.GLFW_MOUSE_BUTTON_LEFT) { this.mouseGrabbed = false; this.windowX += (mouseX - this.mouseClickedX - 1); this.windowY += (mouseY - this.mouseClickedY); - } - else if(mouseGrabbedButton == 1 && button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) - { + } else if (mouseGrabbedButton == 1 && button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { this.mouseGrabbed = false; this.windowRotationX += (mouseX - this.mouseClickedX); this.windowRotationY -= (mouseY - this.mouseClickedY); @@ -312,16 +266,12 @@ else if(mouseGrabbedButton == 1 && button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) return super.mouseReleased(mouseX, mouseY, button); } - private void openConfigScreen() - { + private void openConfigScreen() { ModList.get().getModContainerById(Reference.MOD_ID).ifPresent(container -> { Screen screen = container.getCustomExtension(ConfigScreenHandler.ConfigScreenFactory.class).map(function -> function.screenFunction().apply(this.minecraft, null)).orElse(null); - if(screen != null) - { + if (screen != null) { this.minecraft.setScreen(screen); - } - else if(this.minecraft != null && this.minecraft.player != null) - { + } else if (this.minecraft != null && this.minecraft.player != null) { MutableComponent modName = Component.literal("Configured"); modName.setStyle(modName.getStyle().withColor(ChatFormatting.YELLOW).withUnderlined(true).withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.translatable("cgm.chat.open_curseforge_page"))).withClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://www.curseforge.com/minecraft/mc-mods/configured"))); Component message = Component.translatable("cgm.chat.install_configured", modName); diff --git a/src/main/java/com/mrcrayfish/guns/client/screen/CheckBox.java b/src/main/java/com/mrcrayfish/guns/client/screen/CheckBox.java index 3ed019f32..980d5daab 100644 --- a/src/main/java/com/mrcrayfish/guns/client/screen/CheckBox.java +++ b/src/main/java/com/mrcrayfish/guns/client/screen/CheckBox.java @@ -1,8 +1,7 @@ package com.mrcrayfish.guns.client.screen; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.narration.NarrationElementOutput; import net.minecraft.network.chat.Component; @@ -14,49 +13,40 @@ * Author: MrCrayfish */ @OnlyIn(Dist.CLIENT) -public class CheckBox extends AbstractWidget -{ +public class CheckBox extends AbstractWidget { private static final ResourceLocation GUI = new ResourceLocation("cgm:textures/gui/components.png"); private boolean toggled = false; - public CheckBox(int left, int top, Component title) - { + public CheckBox(int left, int top, Component title) { super(left, top, 8, 8, title); } - public void setToggled(boolean toggled) - { - this.toggled = toggled; + public boolean isToggled() { + return this.toggled; } - public boolean isToggled() - { - return this.toggled; + public void setToggled(boolean toggled) { + this.toggled = toggled; } @Override - public void renderWidget(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) - { - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.setShaderTexture(0, GUI); - blit(poseStack, this.getX(), this.getY(), 0, 0, 8, 8); - if(this.toggled) - { - blit(poseStack, this.getX(), this.getY() - 1, 8, 0, 9, 8); + public void renderWidget(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { + graphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); + graphics.blit(GUI, this.getX(), this.getY(), 0, 0, 8, 8); // checkbox background + if (this.toggled) { + graphics.blit(GUI, this.getX(), this.getY() - 1, 8, 0, 9, 8); // the actual checkmark } - drawString(poseStack, Minecraft.getInstance().font, this.getMessage(), this.getX() + 12, this.getY(), 0xFFFFFF); + graphics.drawString(Minecraft.getInstance().font, this.getMessage(), this.getX() + 12, this.getY(), 0xFFFFFF); } @Override - public void onClick(double mouseX, double mouseY) - { + public void onClick(double mouseX, double mouseY) { this.toggled = !this.toggled; } @Override - protected void updateWidgetNarration(NarrationElementOutput output) - { + protected void updateWidgetNarration(NarrationElementOutput output) { this.defaultButtonNarrationText(output); } } \ No newline at end of file diff --git a/src/main/java/com/mrcrayfish/guns/client/screen/WorkbenchScreen.java b/src/main/java/com/mrcrayfish/guns/client/screen/WorkbenchScreen.java index e5034e3bd..2c6127f67 100644 --- a/src/main/java/com/mrcrayfish/guns/client/screen/WorkbenchScreen.java +++ b/src/main/java/com/mrcrayfish/guns/client/screen/WorkbenchScreen.java @@ -22,11 +22,11 @@ import com.mrcrayfish.guns.util.InventoryUtil; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.resources.sounds.SimpleSoundInstance; import net.minecraft.core.NonNullList; @@ -34,11 +34,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvents; import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.item.DyeColor; -import net.minecraft.world.item.DyeItem; -import net.minecraft.world.item.ItemDisplayContext; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; +import net.minecraft.world.item.*; import net.minecraftforge.registries.ForgeRegistries; import org.lwjgl.opengl.GL11; @@ -52,8 +48,7 @@ /** * Author: MrCrayfish */ -public class WorkbenchScreen extends AbstractContainerScreen -{ +public class WorkbenchScreen extends AbstractContainerScreen { private static final ResourceLocation GUI_BASE = new ResourceLocation("cgm:textures/gui/workbench.png"); private static boolean showRemaining = false; @@ -67,89 +62,69 @@ public class WorkbenchScreen extends AbstractContainerScreen private CheckBox checkBoxMaterials; private ItemStack displayStack; - public WorkbenchScreen(WorkbenchContainer container, Inventory playerInventory, Component title) - { + public WorkbenchScreen(WorkbenchContainer container, Inventory playerInventory, Component title) { super(container, playerInventory, title); this.playerInventory = playerInventory; this.workbench = container.getWorkbench(); this.imageWidth = 275; this.imageHeight = 184; this.materials = new ArrayList<>(); - this.createTabs(WorkbenchRecipes.getAll(playerInventory.player.level)); - if(!this.tabs.isEmpty()) - { + this.createTabs(WorkbenchRecipes.getAll(playerInventory.player.level())); + if (!this.tabs.isEmpty()) { this.imageHeight += 28; } } - private void createTabs(NonNullList recipes) - { + private void createTabs(NonNullList recipes) { List weapons = new ArrayList<>(); List attachments = new ArrayList<>(); List ammo = new ArrayList<>(); List misc = new ArrayList<>(); - for(WorkbenchRecipe recipe : recipes) - { + for (WorkbenchRecipe recipe : recipes) { ItemStack output = recipe.getItem(); - if(output.getItem() instanceof GunItem) - { + if (output.getItem() instanceof GunItem) { weapons.add(recipe); - } - else if(output.getItem() instanceof IAttachment) - { + } else if (output.getItem() instanceof IAttachment) { attachments.add(recipe); - } - else if(this.isAmmo(output)) - { + } else if (this.isAmmo(output)) { ammo.add(recipe); - } - else - { + } else { misc.add(recipe); } } - if(!weapons.isEmpty()) - { + if (!weapons.isEmpty()) { ItemStack icon = new ItemStack(ModItems.ASSAULT_RIFLE.get()); icon.getOrCreateTag().putInt("AmmoCount", ModItems.ASSAULT_RIFLE.get().getGun().getGeneral().getMaxAmmo()); this.tabs.add(new Tab(icon, "weapons", weapons)); } - if(!attachments.isEmpty()) - { + if (!attachments.isEmpty()) { this.tabs.add(new Tab(new ItemStack(ModItems.LONG_SCOPE.get()), "attachments", attachments)); } - if(!ammo.isEmpty()) - { + if (!ammo.isEmpty()) { this.tabs.add(new Tab(new ItemStack(ModItems.SHELL.get()), "ammo", ammo)); } - if(!misc.isEmpty()) - { + if (!misc.isEmpty()) { this.tabs.add(new Tab(new ItemStack(Items.BARRIER), "misc", misc)); } - if(!this.tabs.isEmpty()) - { + if (!this.tabs.isEmpty()) { this.currentTab = this.tabs.get(0); } } - private boolean isAmmo(ItemStack stack) - { - if(stack.getItem() instanceof IAmmo) - { + private boolean isAmmo(ItemStack stack) { + if (stack.getItem() instanceof IAmmo) { return true; } ResourceLocation id = ForgeRegistries.ITEMS.getKey(stack.getItem()); Objects.requireNonNull(id); - for(GunItem gunItem : NetworkGunManager.getClientRegisteredGuns()) - { - if(id.equals(gunItem.getModifiedGun(stack).getProjectile().getItem())) - { + for (GunItem gunItem : NetworkGunManager.getClientRegisteredGuns()) { + if (id.equals(gunItem.getModifiedGun(stack).getProjectile().getItem())) { return true; } } @@ -157,34 +132,26 @@ private boolean isAmmo(ItemStack stack) } @Override - public void init() - { + public void init() { super.init(); - if(!this.tabs.isEmpty()) - { + if (!this.tabs.isEmpty()) { this.topPos += 28; } this.addRenderableWidget(Button.builder(Component.literal("<"), button -> { int index = this.currentTab.getCurrentIndex(); - if(index - 1 < 0) - { + if (index - 1 < 0) { this.loadItem(this.currentTab.getRecipes().size() - 1); - } - else - { + } else { this.loadItem(index - 1); } }).pos(this.leftPos + 9, this.topPos + 18).size(15, 20).build()); this.addRenderableWidget(Button.builder(Component.literal(">"), button -> { int index = this.currentTab.getCurrentIndex(); - if(index + 1 >= this.currentTab.getRecipes().size()) - { + if (index + 1 >= this.currentTab.getRecipes().size()) { this.loadItem(0); - } - else - { + } else { this.loadItem(index + 1); } }).pos(this.leftPos + 153, this.topPos + 18).size(15, 20).build()); @@ -202,20 +169,16 @@ public void init() } @Override - public void containerTick() - { + public void containerTick() { super.containerTick(); - for(MaterialItem material : this.materials) - { + for (MaterialItem material : this.materials) { material.tick(); } boolean canCraft = true; - for(MaterialItem material : this.materials) - { - if(!material.isEnabled()) - { + for (MaterialItem material : this.materials) { + if (!material.isEnabled()) { canCraft = false; break; } @@ -225,33 +188,24 @@ public void containerTick() this.updateColor(); } - private void updateColor() - { - if(this.currentTab != null) - { + private void updateColor() { + if (this.currentTab != null) { ItemStack item = this.displayStack; - if(IColored.isDyeable(item)) - { + if (IColored.isDyeable(item)) { IColored colored = (IColored) item.getItem(); - if(!this.workbench.getItem(0).isEmpty()) - { + if (!this.workbench.getItem(0).isEmpty()) { ItemStack dyeStack = this.workbench.getItem(0); - if(dyeStack.getItem() instanceof DyeItem) - { + if (dyeStack.getItem() instanceof DyeItem) { DyeColor color = ((DyeItem) dyeStack.getItem()).getDyeColor(); float[] components = color.getTextureDiffuseColors(); int red = (int) (components[0] * 255F); int green = (int) (components[1] * 255F); int blue = (int) (components[2] * 255F); colored.setColor(item, ((red & 0xFF) << 16) | ((green & 0xFF) << 8) | ((blue & 0xFF))); - } - else - { + } else { colored.removeColor(item); } - } - else - { + } else { colored.removeColor(item); } } @@ -259,15 +213,12 @@ private void updateColor() } @Override - public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) - { + public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { boolean result = super.mouseClicked(mouseX, mouseY, mouseButton); WorkbenchScreen.showRemaining = this.checkBoxMaterials.isToggled(); - for(int i = 0; i < this.tabs.size(); i++) - { - if(RenderUtil.isMouseWithin((int) mouseX, (int) mouseY, this.leftPos + 28 * i, this.topPos - 28, 28, 28)) - { + for (int i = 0; i < this.tabs.size(); i++) { + if (RenderUtil.isMouseWithin((int) mouseX, (int) mouseY, this.leftPos + 28 * i, this.topPos - 28, 28, 28)) { this.currentTab = this.tabs.get(i); this.loadItem(this.currentTab.getCurrentIndex()); this.minecraft.getSoundManager().play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1.0F)); @@ -278,8 +229,7 @@ public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) return result; } - private void loadItem(int index) - { + private void loadItem(int index) { WorkbenchRecipe recipe = this.currentTab.getRecipes().get(index); this.displayStack = recipe.getItem().copy(); this.updateColor(); @@ -287,10 +237,8 @@ private void loadItem(int index) this.materials.clear(); List ingredients = recipe.getMaterials(); - if(ingredients != null) - { - for(WorkbenchIngredient ingredient : ingredients) - { + if (ingredients != null) { + for (WorkbenchIngredient ingredient : ingredients) { MaterialItem item = new MaterialItem(ingredient); item.updateEnabledState(); this.materials.add(item); @@ -301,56 +249,48 @@ private void loadItem(int index) } @Override - public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) - { - this.renderBackground(poseStack); - super.render(poseStack, mouseX, mouseY, partialTicks); - this.renderTooltip(poseStack, mouseX, mouseY); + public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { + this.renderBackground(graphics); + super.render(graphics, mouseX, mouseY, partialTicks); + this.renderTooltip(graphics, mouseX, mouseY); int startX = this.leftPos; int startY = this.topPos; - for(int i = 0; i < this.tabs.size(); i++) - { - if(RenderUtil.isMouseWithin(mouseX, mouseY, startX + 28 * i, startY - 28, 28, 28)) - { - this.renderTooltip(poseStack, Component.translatable(this.tabs.get(i).getTabKey()), mouseX, mouseY); + for (int i = 0; i < this.tabs.size(); i++) { + if (RenderUtil.isMouseWithin(mouseX, mouseY, startX + 28 * i, startY - 28, 28, 28)) { + this.setTooltipForNextRenderPass(Component.translatable(this.tabs.get(i).getTabKey())); + this.renderTooltip(graphics, mouseX, mouseY); return; } } - for(int i = 0; i < this.filteredMaterials.size(); i++) - { + for (int i = 0; i < this.filteredMaterials.size(); i++) { int itemX = startX + 172; int itemY = startY + i * 19 + 63; - if(RenderUtil.isMouseWithin(mouseX, mouseY, itemX, itemY, 80, 19)) - { + if (RenderUtil.isMouseWithin(mouseX, mouseY, itemX, itemY, 80, 19)) { MaterialItem materialItem = this.filteredMaterials.get(i); - if(materialItem != MaterialItem.EMPTY) - { - this.renderTooltip(poseStack, materialItem.getDisplayStack(), mouseX, mouseY); + if (materialItem != MaterialItem.EMPTY) { + graphics.renderTooltip(this.font, materialItem.getDisplayStack(), mouseX, mouseY); return; } } } - if(RenderUtil.isMouseWithin(mouseX, mouseY, startX + 8, startY + 38, 160, 48)) - { - this.renderTooltip(poseStack, this.displayStack, mouseX, mouseY); + if (RenderUtil.isMouseWithin(mouseX, mouseY, startX + 8, startY + 38, 160, 48)) { + graphics.renderTooltip(this.font, this.displayStack, mouseX, mouseY); } } @Override - protected void renderLabels(PoseStack poseStack, int mouseX, int mouseY) - { + protected void renderLabels(GuiGraphics graphics, int mouseX, int mouseY) { int offset = this.tabs.isEmpty() ? 0 : 28; - this.font.draw(poseStack, this.title, (float)this.titleLabelX, (float)this.titleLabelY - 28 + offset, 4210752); - this.font.draw(poseStack, this.playerInventory.getDisplayName(), (float)this.inventoryLabelX, (float)this.inventoryLabelY - 9 + offset, 4210752); + graphics.drawString(this.font, this.title, this.titleLabelX, this.titleLabelY - 28 + offset, 4210752, false); + graphics.drawString(this.font, this.playerInventory.getDisplayName(), this.inventoryLabelX, this.inventoryLabelY - 9 + offset, 4210752, false); } @Override - protected void renderBg(PoseStack poseStack, float partialTicks, int mouseX, int mouseY) - { + protected void renderBg(GuiGraphics graphics, float partialTicks, int mouseX, int mouseY) { /* Fixes partial ticks to use percentage from 0 to 1 */ partialTicks = Minecraft.getInstance().getFrameTime(); @@ -360,60 +300,49 @@ protected void renderBg(PoseStack poseStack, float partialTicks, int mouseX, int RenderSystem.enableBlend(); /* Draw unselected tabs */ - for(int i = 0; i < this.tabs.size(); i++) - { + for (int i = 0; i < this.tabs.size(); i++) { Tab tab = this.tabs.get(i); - if(tab != this.currentTab) - { + if (tab != this.currentTab) { RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.setShaderTexture(0, GUI_BASE); - blit(poseStack, startX + 28 * i, startY - 28, 80, 184, 28, 32); - Minecraft.getInstance().getItemRenderer().renderAndDecorateItem(poseStack, tab.getIcon(), startX + 28 * i + 6, startY - 28 + 8); - Minecraft.getInstance().getItemRenderer().renderGuiItemDecorations(poseStack, this.font, tab.getIcon(), startX + 28 * i + 6, startY - 28 + 8, null); + graphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); + graphics.blit(GUI_BASE, startX + 28 * i, startY - 28, 80, 184, 28, 32); + graphics.renderItem(tab.getIcon(), startX + 28 * i + 6, startY - 28 + 8); } } RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.setShaderTexture(0, GUI_BASE); - blit(poseStack, startX, startY, 0, 0, 173, 184); - blit(poseStack, startX + 173, startY, 78, 184, 173, 0, 1, 184, 256, 256); - blit(poseStack, startX + 251, startY, 174, 0, 24, 184); - blit(poseStack, startX + 172, startY + 16, 198, 0, 20, 20); + graphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); + graphics.blit(GUI_BASE, startX, startY, 0, 0, 173, 184); + graphics.blit(GUI_BASE, startX + 173, startY, 78, 184, 173, 0, 1, 184, 256, 256); + graphics.blit(GUI_BASE, startX + 251, startY, 174, 0, 24, 184); + graphics.blit(GUI_BASE, startX + 172, startY + 16, 198, 0, 20, 20); /* Draw selected tab */ - if(this.currentTab != null) - { + if (this.currentTab != null) { int i = this.tabs.indexOf(this.currentTab); int u = i == 0 ? 80 : 108; RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.setShaderTexture(0, GUI_BASE); - blit(poseStack, startX + 28 * i, startY - 28, u, 214, 28, 32); - Minecraft.getInstance().getItemRenderer().renderAndDecorateItem(poseStack, this.currentTab.getIcon(), startX + 28 * i + 6, startY - 28 + 8); - Minecraft.getInstance().getItemRenderer().renderGuiItemDecorations(poseStack, this.font, this.currentTab.getIcon(), startX + 28 * i + 6, startY - 28 + 8, null); + graphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); + graphics.blit(GUI_BASE, startX + 28 * i, startY - 28, u, 214, 28, 32); + graphics.renderItem(this.currentTab.getIcon(), startX + 28 * i + 6, startY - 28 + 8); } RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.setShaderTexture(0, GUI_BASE); + graphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); - if(this.workbench.getItem(0).isEmpty()) - { - blit(poseStack, startX + 174, startY + 18, 165, 199, 16, 16); + if (this.workbench.getItem(0).isEmpty()) { + graphics.blit(GUI_BASE, startX + 174, startY + 18, 165, 199, 16, 16); } ItemStack currentItem = this.displayStack; StringBuilder builder = new StringBuilder(currentItem.getHoverName().getString()); - if(currentItem.getCount() > 1) - { + if (currentItem.getCount() > 1) { builder.append(ChatFormatting.GOLD); builder.append(ChatFormatting.BOLD); builder.append(" x "); builder.append(currentItem.getCount()); } - drawCenteredString(poseStack, this.font, builder.toString(), startX + 88, startY + 22, Color.WHITE.getRGB()); + graphics.drawCenteredString(this.font, builder.toString(), startX + 88, startY + 22, Color.WHITE.getRGB()); GL11.glEnable(GL11.GL_SCISSOR_TEST); RenderUtil.scissor(startX + 8, startY + 17, 160, 70); @@ -427,7 +356,7 @@ protected void renderBg(PoseStack poseStack, float partialTicks, int mouseX, int modelViewStack.mulPose(Axis.YP.rotationDegrees(Minecraft.getInstance().player.tickCount + partialTicks)); RenderSystem.applyModelViewMatrix(); MultiBufferSource.BufferSource buffer = this.minecraft.renderBuffers().bufferSource(); - Minecraft.getInstance().getItemRenderer().render(currentItem, ItemDisplayContext.FIXED, false, poseStack, buffer, 15728880, OverlayTexture.NO_OVERLAY, RenderUtil.getModel(currentItem)); + Minecraft.getInstance().getItemRenderer().render(currentItem, ItemDisplayContext.FIXED, false, graphics.pose(), buffer, 15728880, OverlayTexture.NO_OVERLAY, RenderUtil.getModel(currentItem)); buffer.endBatch(); } modelViewStack.popPose(); @@ -436,76 +365,63 @@ protected void renderBg(PoseStack poseStack, float partialTicks, int mouseX, int GL11.glDisable(GL11.GL_SCISSOR_TEST); this.filteredMaterials = this.getMaterials(); - for(int i = 0; i < this.filteredMaterials.size(); i++) - { - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.setShaderTexture(0, GUI_BASE); + for (int i = 0; i < this.filteredMaterials.size(); i++) { + graphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); MaterialItem materialItem = this.filteredMaterials.get(i); ItemStack stack = materialItem.getDisplayStack(); - if(!stack.isEmpty()) - { + if (!stack.isEmpty()) { Lighting.setupForFlatItems(); - if(materialItem.isEnabled()) - { - this.blit(poseStack, startX + 172, startY + i * 19 + 63, 0, 184, 80, 19); - } - else - { - this.blit(poseStack, startX + 172, startY + i * 19 + 63, 0, 222, 80, 19); + if (materialItem.isEnabled()) { + graphics.blit(GUI_BASE,startX + 172, startY + i * 19 + 63, 0, 184, 80, 19); + } else { + graphics.blit(GUI_BASE,startX + 172, startY + i * 19 + 63, 0, 222, 80, 19); } String name = stack.getHoverName().getString(); - if(this.font.width(name) > 55) - { + if (this.font.width(name) > 55) { name = this.font.plainSubstrByWidth(name, 50).trim() + "..."; } - this.font.draw(poseStack, name, startX + 172 + 22, startY + i * 19 + 6 + 63, Color.WHITE.getRGB()); + graphics.drawString(this.font, name, startX + 172 + 22, startY + i * 19 + 6 + 63, Color.WHITE.getRGB()); - Minecraft.getInstance().getItemRenderer().renderAndDecorateItem(poseStack, stack, startX + 172 + 2, startY + i * 19 + 1 + 63); + graphics.renderItem(stack, startX + 172 + 2, startY + i * 19 + 1 + 63); - if(this.checkBoxMaterials.isToggled()) - { + if (this.checkBoxMaterials.isToggled()) { int count = InventoryUtil.getItemStackAmount(Minecraft.getInstance().player, stack); stack = stack.copy(); stack.setCount(stack.getCount() - count); } - Minecraft.getInstance().getItemRenderer().renderGuiItemDecorations(poseStack, this.font, stack, startX + 172 + 2, startY + i * 19 + 1 + 63, null); + graphics.renderItemDecorations(this.font, stack, startX + 172 + 2, startY + i * 19 + 1 + 63); } } } - private List getMaterials() - { + private List getMaterials() { List materials = NonNullList.withSize(6, MaterialItem.EMPTY); List filteredMaterials = this.materials.stream().filter(materialItem -> this.checkBoxMaterials.isToggled() ? !materialItem.isEnabled() : materialItem != MaterialItem.EMPTY).collect(Collectors.toList()); - for(int i = 0; i < filteredMaterials.size() && i < materials.size(); i++) - { + for (int i = 0; i < filteredMaterials.size() && i < materials.size(); i++) { materials.set(i, filteredMaterials.get(i)); } return materials; } - public List getTabs() - { + public List getTabs() { return ImmutableList.copyOf(this.tabs); } - public static class MaterialItem - { + public static class MaterialItem { public static final MaterialItem EMPTY = new MaterialItem(); - + private final List displayStacks = new ArrayList<>(); private long lastTime = System.currentTimeMillis(); private int displayIndex; private boolean enabled = false; private WorkbenchIngredient ingredient; - private final List displayStacks = new ArrayList<>(); - private MaterialItem() {} + private MaterialItem() { + } - private MaterialItem(WorkbenchIngredient ingredient) - { + private MaterialItem(WorkbenchIngredient ingredient) { this.ingredient = ingredient; Stream.of(ingredient.getItems()).forEach(stack -> { ItemStack displayStack = stack.copy(); @@ -514,77 +430,64 @@ private MaterialItem(WorkbenchIngredient ingredient) }); } - public WorkbenchIngredient getIngredient() - { + public WorkbenchIngredient getIngredient() { return this.ingredient; } - public void tick() - { - if(this.ingredient == null) + public void tick() { + if (this.ingredient == null) return; this.updateEnabledState(); long currentTime = System.currentTimeMillis(); - if(currentTime - this.lastTime >= 1000) - { + if (currentTime - this.lastTime >= 1000) { this.displayIndex = (this.displayIndex + 1) % this.displayStacks.size(); this.lastTime = currentTime; } } - public ItemStack getDisplayStack() - { + public ItemStack getDisplayStack() { return this.ingredient != null ? this.displayStacks.get(this.displayIndex) : ItemStack.EMPTY; } - public void updateEnabledState() - { + public void updateEnabledState() { this.enabled = InventoryUtil.hasWorkstationIngredient(Minecraft.getInstance().player, this.ingredient); } - public boolean isEnabled() - { + public boolean isEnabled() { return this.ingredient == null || this.enabled; } } - private static class Tab - { + private static class Tab { private final ItemStack icon; private final String id; private final List items; private int currentIndex; - public Tab(ItemStack icon, String id, List items) - { + public Tab(ItemStack icon, String id, List items) { this.icon = icon; this.id = id; this.items = items; } - public ItemStack getIcon() - { + public ItemStack getIcon() { return this.icon; } - public String getTabKey() - { + public String getTabKey() { return "gui.cgm.workbench.tab." + this.id; } - public void setCurrentIndex(int currentIndex) - { - this.currentIndex = currentIndex; + public int getCurrentIndex() { + return this.currentIndex; } - public int getCurrentIndex() - { - return this.currentIndex; + public void setCurrentIndex(int currentIndex) { + this.currentIndex = currentIndex; } - public List getRecipes() - { + public List getRecipes() { return this.items; } } diff --git a/src/main/java/com/mrcrayfish/guns/client/screen/widget/MiniButton.java b/src/main/java/com/mrcrayfish/guns/client/screen/widget/MiniButton.java index fa2268dd8..35ddc519b 100644 --- a/src/main/java/com/mrcrayfish/guns/client/screen/widget/MiniButton.java +++ b/src/main/java/com/mrcrayfish/guns/client/screen/widget/MiniButton.java @@ -1,7 +1,7 @@ package com.mrcrayfish.guns.client.screen.widget; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.network.chat.CommonComponents; @@ -21,18 +21,17 @@ public MiniButton(int x, int y, int u, int v, ResourceLocation texture, OnPress } @Override - public void renderWidget(PoseStack poseStack, int mouseX, int mouseY, float partialTick) + public void renderWidget(GuiGraphics graphics, int mouseX, int mouseY, float partialTick) { RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.setShaderTexture(0, this.texture); + graphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); RenderSystem.enableBlend(); RenderSystem.defaultBlendFunc(); RenderSystem.enableDepthTest(); - blit(poseStack, this.getX(), this.getY(), this.u, this.v, this.width, this.height); + graphics.blit(texture, this.getX(), this.getY(), this.u, this.v, this.width, this.height); if(this.isHovered) { - fillGradient(poseStack, this.getX(), this.getY(), this.getX() + 10, this.getY() + 10, -2130706433, -2130706433); + graphics.fillGradient(this.getX(), this.getY(), this.getX() + 10, this.getY() + 10, -2130706433, -2130706433); } } } diff --git a/src/main/java/com/mrcrayfish/guns/client/util/RenderUtil.java b/src/main/java/com/mrcrayfish/guns/client/util/RenderUtil.java index 3b7556ca3..2a94d3832 100644 --- a/src/main/java/com/mrcrayfish/guns/client/util/RenderUtil.java +++ b/src/main/java/com/mrcrayfish/guns/client/util/RenderUtil.java @@ -11,7 +11,6 @@ import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import net.minecraft.client.renderer.entity.ItemRenderer; import net.minecraft.client.renderer.entity.player.PlayerRenderer; @@ -22,11 +21,7 @@ import net.minecraft.world.entity.HumanoidArm; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.inventory.InventoryMenu; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemDisplayContext; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; +import net.minecraft.world.item.*; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.HalfTransparentBlock; @@ -84,7 +79,7 @@ public static void renderModel(ItemStack stack, ItemDisplayContext display, Pose BakedModel model = Minecraft.getInstance().getItemRenderer().getItemModelShaper().getItemModel(stack); if(entity != null) { - model = Minecraft.getInstance().getItemRenderer().getModel(stack, entity.level, entity, 0); + model = Minecraft.getInstance().getItemRenderer().getModel(stack, entity.level(), entity, 0); } renderModel(model, display, stack, poseStack, buffer, light, overlay); } @@ -252,7 +247,7 @@ public static int getItemStackColor(ItemStack stack, ItemStack parent, int tintI public static void applyTransformType(ItemStack stack, PoseStack poseStack, ItemDisplayContext display, @Nullable LivingEntity entity) { - BakedModel model = Minecraft.getInstance().getItemRenderer().getModel(stack, entity != null ? entity.level : null, entity, 0); + BakedModel model = Minecraft.getInstance().getItemRenderer().getModel(stack, entity != null ? entity.level() : null, entity, 0); boolean leftHanded = display == ItemDisplayContext.FIRST_PERSON_LEFT_HAND || display == ItemDisplayContext.THIRD_PERSON_LEFT_HAND; //TODO test diff --git a/src/main/java/com/mrcrayfish/guns/common/AmmoContext.java b/src/main/java/com/mrcrayfish/guns/common/AmmoContext.java index 18fe801d4..71b0a5312 100644 --- a/src/main/java/com/mrcrayfish/guns/common/AmmoContext.java +++ b/src/main/java/com/mrcrayfish/guns/common/AmmoContext.java @@ -3,12 +3,19 @@ import net.minecraft.world.Container; import net.minecraft.world.item.ItemStack; -import javax.annotation.Nullable; - /** * Author: MrCrayfish */ -public record AmmoContext(ItemStack stack, @Nullable Container container) +public record AmmoContext(ItemStack stack, Runnable onConsume) { - public static final AmmoContext NONE = new AmmoContext(ItemStack.EMPTY, null); + private static final Runnable NOOP = () -> {}; + public static final AmmoContext NONE = new AmmoContext(ItemStack.EMPTY, NOOP); + + public AmmoContext(ItemStack stack, Container container) { + this(stack, container::setChanged); + } + + public AmmoContext(ItemStack stack) { + this(stack, NOOP); + } } diff --git a/src/main/java/com/mrcrayfish/guns/common/Gun.java b/src/main/java/com/mrcrayfish/guns/common/Gun.java index f3e38866a..d626f60ee 100644 --- a/src/main/java/com/mrcrayfish/guns/common/Gun.java +++ b/src/main/java/com/mrcrayfish/guns/common/Gun.java @@ -8,6 +8,8 @@ import com.mrcrayfish.guns.annotation.Optional; import com.mrcrayfish.guns.client.ClientHandler; import com.mrcrayfish.guns.compat.BackpackHelper; +import com.mrcrayfish.guns.compat.SophisticatedHelper; +import com.mrcrayfish.guns.compat.TravelersBackpackHelper; import com.mrcrayfish.guns.debug.Debug; import com.mrcrayfish.guns.debug.IDebugWidget; import com.mrcrayfish.guns.debug.IEditorMenu; @@ -1524,7 +1526,7 @@ public static AmmoContext findAmmo(Player player, ResourceLocation id) { Item item = ForgeRegistries.ITEMS.getValue(id); ItemStack ammo = item != null ? new ItemStack(item, Integer.MAX_VALUE) : ItemStack.EMPTY; - return new AmmoContext(ammo, null); + return new AmmoContext(ammo); } for(int i = 0; i < player.getInventory().getContainerSize(); ++i) { @@ -1534,11 +1536,20 @@ public static AmmoContext findAmmo(Player player, ResourceLocation id) return new AmmoContext(stack, player.getInventory()); } } + AmmoContext ctx = AmmoContext.NONE; if(GunMod.backpackedLoaded) { - return BackpackHelper.findAmmo(player, id); + ctx = BackpackHelper.findAmmo(player, id); } - return AmmoContext.NONE; + if(GunMod.sopLoaded && ctx.equals(AmmoContext.NONE)) + { + ctx = SophisticatedHelper.findAmmo(player, id); + } + if(GunMod.travelersBackpackLoaded && ctx.equals(AmmoContext.NONE)) + { + ctx = TravelersBackpackHelper.findAmmo(player, id); + } + return ctx; } public static boolean isAmmo(ItemStack stack, ResourceLocation id) @@ -1564,7 +1575,7 @@ public static float getFovModifier(ItemStack stack, Gun modifiedGun) { return Mth.clamp(scope.getFovModifier(), 0.01F, 1.0F); } - modifier -= scope.getAdditionalZoom(); + //modifier -= scope.getAdditionalZoom(); } } Modules.Zoom zoom = modifiedGun.getModules().getZoom(); diff --git a/src/main/java/com/mrcrayfish/guns/common/ReloadTracker.java b/src/main/java/com/mrcrayfish/guns/common/ReloadTracker.java index 1d0edbed5..4d1063fbd 100644 --- a/src/main/java/com/mrcrayfish/guns/common/ReloadTracker.java +++ b/src/main/java/com/mrcrayfish/guns/common/ReloadTracker.java @@ -8,20 +8,16 @@ import com.mrcrayfish.guns.network.PacketHandler; import com.mrcrayfish.guns.network.message.S2CMessageGunSound; import com.mrcrayfish.guns.util.GunEnchantmentHelper; -import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; -import net.minecraft.server.packs.repository.Pack; import net.minecraft.sounds.SoundSource; -import net.minecraft.world.Container; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraftforge.event.TickEvent; import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.network.PacketDistributor; import java.util.Map; import java.util.WeakHashMap; @@ -95,13 +91,8 @@ private void increaseAmmo(Player player) tag.putInt("AmmoCount", tag.getInt("AmmoCount") + amount); } ammo.shrink(amount); - - // Trigger that the container changed - Container container = context.container(); - if(container != null) - { - container.setChanged(); - } + // Trigger the post action on ammo consumption, like Container#setChanged. + context.onConsume().run(); } ResourceLocation reloadSound = this.gun.getSounds().getReload(); @@ -112,14 +103,14 @@ private void increaseAmmo(Player player) double soundY = player.getY() + 1.0; double soundZ = player.getZ(); S2CMessageGunSound message = new S2CMessageGunSound(reloadSound, SoundSource.PLAYERS, (float) soundX, (float) soundY, (float) soundZ, 1.0F, 1.0F, player.getId(), false, true); - PacketHandler.getPlayChannel().sendToNearbyPlayers(() -> LevelLocation.create(player.level, soundX, soundY, soundZ, radius), message); + PacketHandler.getPlayChannel().sendToNearbyPlayers(() -> LevelLocation.create(player.level(), soundX, soundY, soundZ, radius), message); } } @SubscribeEvent public static void onPlayerTick(TickEvent.PlayerTickEvent event) { - if(event.phase == TickEvent.Phase.START && !event.player.level.isClientSide) + if(event.phase == TickEvent.Phase.START && !event.player.level().isClientSide) { Player player = event.player; if(ModSyncedDataKeys.RELOADING.getValue(player)) @@ -160,7 +151,7 @@ public static void onPlayerTick(TickEvent.PlayerTickEvent event) double soundZ = finalPlayer.getZ(); double radius = Config.SERVER.reloadMaxDistance.get(); S2CMessageGunSound messageSound = new S2CMessageGunSound(cockSound, SoundSource.PLAYERS, (float) soundX, (float) soundY, (float) soundZ, 1.0F, 1.0F, finalPlayer.getId(), false, true); - PacketHandler.getPlayChannel().sendToNearbyPlayers(() -> LevelLocation.create(finalPlayer.level, soundX, soundY, soundZ, radius), messageSound); + PacketHandler.getPlayChannel().sendToNearbyPlayers(() -> LevelLocation.create(finalPlayer.level(), soundX, soundY, soundZ, radius), messageSound); } }); } diff --git a/src/main/java/com/mrcrayfish/guns/common/container/slot/AttachmentSlot.java b/src/main/java/com/mrcrayfish/guns/common/container/slot/AttachmentSlot.java index 50efc833b..4e18256cc 100644 --- a/src/main/java/com/mrcrayfish/guns/common/container/slot/AttachmentSlot.java +++ b/src/main/java/com/mrcrayfish/guns/common/container/slot/AttachmentSlot.java @@ -69,7 +69,7 @@ public void setChanged() { if(this.container.isLoaded()) { - this.player.level.playSound(null, this.player.getX(), this.player.getY() + 1.0, this.player.getZ(), ModSounds.UI_WEAPON_ATTACH.get(), SoundSource.PLAYERS, 0.5F, this.hasItem() ? 1.0F : 0.75F); + this.player.level().playSound(null, this.player.getX(), this.player.getY() + 1.0, this.player.getZ(), ModSounds.UI_WEAPON_ATTACH.get(), SoundSource.PLAYERS, 0.5F, this.hasItem() ? 1.0F : 0.75F); } } diff --git a/src/main/java/com/mrcrayfish/guns/common/network/ServerPlayHandler.java b/src/main/java/com/mrcrayfish/guns/common/network/ServerPlayHandler.java index a6f7581f8..f585ba15c 100644 --- a/src/main/java/com/mrcrayfish/guns/common/network/ServerPlayHandler.java +++ b/src/main/java/com/mrcrayfish/guns/common/network/ServerPlayHandler.java @@ -49,10 +49,10 @@ import net.minecraft.world.item.Items; import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.level.Level; +import net.minecraft.world.level.gameevent.GameEvent; import net.minecraft.world.phys.AABB; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.network.NetworkHooks; -import net.minecraftforge.network.PacketDistributor; import net.minecraftforge.registries.ForgeRegistries; import java.util.function.Predicate; @@ -78,7 +78,7 @@ public static void handleShoot(C2SMessageShoot message, ServerPlayer player) if(player.getUseItem().getItem() == Items.SHIELD) return; - Level world = player.level; + Level world = player.level(); ItemStack heldItem = player.getItemInHand(InteractionHand.MAIN_HAND); if(heldItem.getItem() instanceof GunItem item && (Gun.hasAmmo(heldItem) || player.isCreative())) { @@ -131,9 +131,11 @@ public static void handleShoot(C2SMessageShoot message, ServerPlayer player) double radius = Config.COMMON.network.projectileTrackingRange.get(); ParticleOptions data = GunEnchantmentHelper.getParticle(heldItem); S2CMessageBulletTrail messageBulletTrail = new S2CMessageBulletTrail(spawnedProjectiles, projectileProps, player.getId(), data); - PacketHandler.getPlayChannel().sendToNearbyPlayers(() -> LevelLocation.create(player.level, spawnX, spawnY, spawnZ, radius), messageBulletTrail); + PacketHandler.getPlayChannel().sendToNearbyPlayers(() -> LevelLocation.create(player.level(), spawnX, spawnY, spawnZ, radius), messageBulletTrail); } + player.level().gameEvent(GameEvent.PROJECTILE_SHOOT, player.position(), GameEvent.Context.of(player)); + MinecraftForge.EVENT_BUS.post(new GunFireEvent.Post(player, heldItem)); if(Config.COMMON.aggroMobs.enabled.get()) @@ -168,7 +170,7 @@ public static void handleShoot(C2SMessageShoot message, ServerPlayer player) double radius = GunModifierHelper.getModifiedFireSoundRadius(heldItem, Config.SERVER.gunShotMaxDistance.get()); boolean muzzle = modifiedGun.getDisplay().getFlash() != null; S2CMessageGunSound messageSound = new S2CMessageGunSound(fireSound, SoundSource.PLAYERS, (float) posX, (float) posY, (float) posZ, volume, pitch, player.getId(), muzzle, false); - PacketHandler.getPlayChannel().sendToNearbyPlayers(() -> LevelLocation.create(player.level, posX, posY, posZ, radius), messageSound); + PacketHandler.getPlayChannel().sendToNearbyPlayers(() -> LevelLocation.create(player.level(), posX, posY, posZ, radius), messageSound); } if(!player.isCreative()) @@ -177,7 +179,7 @@ public static void handleShoot(C2SMessageShoot message, ServerPlayer player) if(!tag.getBoolean("IgnoreAmmo")) { int level = EnchantmentHelper.getItemEnchantmentLevel(ModEnchantments.RECLAIMED.get(), heldItem); - if(level == 0 || player.level.random.nextInt(4 - Mth.clamp(level, 1, 2)) != 0) + if(level == 0 || player.level().random.nextInt(4 - Mth.clamp(level, 1, 2)) != 0) { tag.putInt("AmmoCount", Math.max(0, tag.getInt("AmmoCount") - 1)); } @@ -221,7 +223,7 @@ else if(stack.isEnchanted()) */ public static void handleCraft(ServerPlayer player, ResourceLocation id, BlockPos pos) { - Level world = player.level; + Level world = player.level(); if(player.containerMenu instanceof WorkbenchContainer workbench) { @@ -305,7 +307,8 @@ private static void spawnAmmo(ServerPlayer player, ItemStack stack) player.getInventory().add(stack); if(stack.getCount() > 0) { - player.level.addFreshEntity(new ItemEntity(player.level, player.getX(), player.getY(), player.getZ(), stack.copy())); + Level playerLevel = player.level(); + playerLevel.addFreshEntity(new ItemEntity(playerLevel, player.getX(), player.getY(), player.getZ(), stack.copy())); } } diff --git a/src/main/java/com/mrcrayfish/guns/compat/BackpackHelper.java b/src/main/java/com/mrcrayfish/guns/compat/BackpackHelper.java index d9e196f2d..53fbc9f58 100644 --- a/src/main/java/com/mrcrayfish/guns/compat/BackpackHelper.java +++ b/src/main/java/com/mrcrayfish/guns/compat/BackpackHelper.java @@ -1,6 +1,5 @@ package com.mrcrayfish.guns.compat; -import com.mrcrayfish.backpacked.Backpacked; import com.mrcrayfish.backpacked.core.ModEnchantments; import com.mrcrayfish.backpacked.inventory.BackpackInventory; import com.mrcrayfish.backpacked.inventory.BackpackedInventoryAccess; @@ -18,17 +17,20 @@ public class BackpackHelper { public static AmmoContext findAmmo(Player player, ResourceLocation id) { - ItemStack backpack = Backpacked.getBackpackStack(player); - if(backpack.isEmpty()) + BackpackInventory inventory = ((BackpackedInventoryAccess) player).getBackpackedInventory(); + + if(inventory == null) return AmmoContext.NONE; - if(EnchantmentHelper.getItemEnchantmentLevel(ModEnchantments.MARKSMAN.get(), backpack) <= 0) + ItemStack backpack = inventory.getBackpackStack(); + + if(backpack.isEmpty()) return AmmoContext.NONE; - BackpackInventory inventory = ((BackpackedInventoryAccess) player).getBackpackedInventory(); - if(inventory == null) + if(EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.MARKSMAN.get(), backpack) <= 0) return AmmoContext.NONE; + for(int i = 0; i < inventory.getContainerSize(); i++) { ItemStack stack = inventory.getItem(i); diff --git a/src/main/java/com/mrcrayfish/guns/compat/SophisticatedHelper.java b/src/main/java/com/mrcrayfish/guns/compat/SophisticatedHelper.java new file mode 100644 index 000000000..69b8b2317 --- /dev/null +++ b/src/main/java/com/mrcrayfish/guns/compat/SophisticatedHelper.java @@ -0,0 +1,34 @@ +package com.mrcrayfish.guns.compat; + +import com.mrcrayfish.guns.common.AmmoContext; +import com.mrcrayfish.guns.common.Gun; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.p3pp3rf1y.sophisticatedbackpacks.common.gui.BackpackContext; +import net.p3pp3rf1y.sophisticatedbackpacks.util.PlayerInventoryProvider; +import net.p3pp3rf1y.sophisticatedcore.inventory.InventoryHandler; + +import java.util.concurrent.atomic.AtomicReference; + +public class SophisticatedHelper { + public static AmmoContext findAmmo(Player player, ResourceLocation id) + { + final AtomicReference ctx = new AtomicReference<>(AmmoContext.NONE); + PlayerInventoryProvider.get().runOnBackpacks(player, (backpack, inventoryName, identifier, slot) -> { + final BackpackContext.Item backpackContext = new BackpackContext.Item(inventoryName, identifier, slot); + final InventoryHandler inv = backpackContext.getBackpackWrapper(player).getInventoryHandler(); + final int size = inv.getSlots(); + for (int i = 0; i < size; i++) + { + final ItemStack stack = inv.getStackInSlot(i); + if(!Gun.isAmmo(stack, id)) continue; + int finalI = i; + ctx.set(new AmmoContext(stack, () -> inv.onContentsChanged(finalI))); + return true; + } + return true; + }); + return ctx.get(); + } +} diff --git a/src/main/java/com/mrcrayfish/guns/compat/TravelersBackpackHelper.java b/src/main/java/com/mrcrayfish/guns/compat/TravelersBackpackHelper.java new file mode 100644 index 000000000..7f6cf347b --- /dev/null +++ b/src/main/java/com/mrcrayfish/guns/compat/TravelersBackpackHelper.java @@ -0,0 +1,32 @@ +package com.mrcrayfish.guns.compat; + +import com.mrcrayfish.guns.common.AmmoContext; +import com.mrcrayfish.guns.common.Gun; +import com.tiviacz.travelersbackpack.capability.CapabilityUtils; +import com.tiviacz.travelersbackpack.inventory.TravelersBackpackContainer; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.items.IItemHandlerModifiable; + +import java.util.concurrent.atomic.AtomicReference; + +public class TravelersBackpackHelper { + public static AmmoContext findAmmo(Player player, ResourceLocation id) + { + final AtomicReference ctx = new AtomicReference<>(AmmoContext.NONE); + CapabilityUtils.getCapability(player).ifPresent(t -> { + final TravelersBackpackContainer container = t.getContainer(); + final IItemHandlerModifiable handler = container.getCombinedHandler(); + final int size = handler.getSlots(); + for (int i = 0; i < size; i++) + { + final ItemStack stack = handler.getStackInSlot(i); + if(!Gun.isAmmo(stack, id)) continue; + ctx.set(new AmmoContext(stack, () -> container.setDataChanged((byte) 2))); + return; + } + }); + return ctx.get(); + } +} diff --git a/src/main/java/com/mrcrayfish/guns/debug/client/screen/EditorScreen.java b/src/main/java/com/mrcrayfish/guns/debug/client/screen/EditorScreen.java index 8b36bbc39..781fe2afb 100644 --- a/src/main/java/com/mrcrayfish/guns/debug/client/screen/EditorScreen.java +++ b/src/main/java/com/mrcrayfish/guns/debug/client/screen/EditorScreen.java @@ -1,17 +1,13 @@ package com.mrcrayfish.guns.debug.client.screen; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.BufferBuilder; -import com.mojang.blaze3d.vertex.BufferUploader; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.Tesselator; -import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.blaze3d.vertex.*; import com.mrcrayfish.guns.Reference; import com.mrcrayfish.guns.debug.IDebugWidget; import com.mrcrayfish.guns.debug.IEditorMenu; import com.mrcrayfish.guns.util.ScreenUtil; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.ContainerObjectSelectionList; @@ -78,13 +74,13 @@ protected void init() } @Override - public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) + public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { this.drawHeader(this.windowLeft, this.windowTop, this.windowWidth); this.drawBody(this.windowLeft + 4, this.windowTop + 20, this.windowWidth - 8, this.windowHeight - 20); // Remove header height - this.list.render(poseStack, mouseX, mouseY, partialTicks); - super.render(poseStack, mouseX, mouseY, partialTicks); - Screen.drawString(poseStack, this.font, this.getTitle(), this.windowLeft + 5, this.windowTop + 6, 0xFFFFFF); + this.list.render(graphics, mouseX, mouseY, partialTicks); + super.render(graphics, mouseX, mouseY, partialTicks); + graphics.drawString(this.font, this.getTitle(), this.windowLeft + 5, this.windowTop + 6, 0xFFFFFF); } @Override @@ -172,10 +168,10 @@ public int getRowWidth() } @Override - public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTick) + public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTick) { ScreenUtil.startScissor(this.x0, this.y0, this.x1 - this.x0, this.y1 - this.y0); - super.render(poseStack, mouseX, mouseY, partialTick); + super.render(graphics, mouseX, mouseY, partialTick); ScreenUtil.endScissor(); } } @@ -192,13 +188,13 @@ public PropertyEntry(Component label, AbstractWidget widget) } @Override - public void render(PoseStack poseStack, int index, int top, int left, int rowWidth, int rowHeight, int mouseX, int mouseY, boolean hovered, float partialTicks) + public void render(GuiGraphics graphics, int index, int top, int left, int rowWidth, int rowHeight, int mouseX, int mouseY, boolean hovered, float partialTicks) { - Screen.drawString(poseStack, EditorScreen.this.minecraft.font, this.label, left + 5, top, 0xFFFFFF); + graphics.drawString(EditorScreen.this.getMinecraft().font, this.label, left + 5, top, 0xFFFFFF); this.widget.setX(left); this.widget.setY(top + 10); this.widget.setWidth(rowWidth); - this.widget.render(poseStack, mouseX, mouseY, partialTicks); + this.widget.render(graphics, mouseX, mouseY, partialTicks); } @Override diff --git a/src/main/java/com/mrcrayfish/guns/debug/client/screen/widget/DebugButton.java b/src/main/java/com/mrcrayfish/guns/debug/client/screen/widget/DebugButton.java index 31e2b7b89..cec6403e9 100644 --- a/src/main/java/com/mrcrayfish/guns/debug/client/screen/widget/DebugButton.java +++ b/src/main/java/com/mrcrayfish/guns/debug/client/screen/widget/DebugButton.java @@ -1,7 +1,7 @@ package com.mrcrayfish.guns.debug.client.screen.widget; -import com.mojang.blaze3d.vertex.PoseStack; import com.mrcrayfish.guns.debug.IDebugWidget; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; import net.minecraft.network.chat.Component; @@ -10,26 +10,22 @@ /** * Author: MrCrayfish */ -public class DebugButton extends Button implements IDebugWidget -{ +public class DebugButton extends Button implements IDebugWidget { private final Supplier enabled; - public DebugButton(Component label, OnPress onPress) - { + public DebugButton(Component label, OnPress onPress) { super(0, 0, 0, 20, label, onPress, DEFAULT_NARRATION); this.enabled = () -> true; } - public DebugButton(Component label, OnPress onPress, Supplier enabled) - { + public DebugButton(Component label, OnPress onPress, Supplier enabled) { super(0, 0, 0, 20, label, onPress, DEFAULT_NARRATION); this.enabled = enabled; } @Override - public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTick) - { + public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { this.active = this.enabled.get(); - super.render(poseStack, mouseX, mouseY, partialTick); + super.render(graphics, mouseX, mouseY, partialTicks); } } diff --git a/src/main/java/com/mrcrayfish/guns/debug/client/screen/widget/DebugSlider.java b/src/main/java/com/mrcrayfish/guns/debug/client/screen/widget/DebugSlider.java index 696783ae4..1667d8614 100644 --- a/src/main/java/com/mrcrayfish/guns/debug/client/screen/widget/DebugSlider.java +++ b/src/main/java/com/mrcrayfish/guns/debug/client/screen/widget/DebugSlider.java @@ -1,9 +1,7 @@ package com.mrcrayfish.guns.debug.client.screen.widget; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import com.mrcrayfish.guns.debug.IDebugWidget; -import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import net.minecraftforge.client.gui.widget.ForgeSlider; import org.jetbrains.annotations.NotNull; @@ -13,29 +11,24 @@ /** * Author: MrCrayfish */ -public class DebugSlider extends ForgeSlider implements IDebugWidget -{ +public class DebugSlider extends ForgeSlider implements IDebugWidget { private final Consumer callback; - public DebugSlider(double minValue, double maxValue, double currentValue, double stepSize, int precision, Consumer callback) - { + public DebugSlider(double minValue, double maxValue, double currentValue, double stepSize, int precision, Consumer callback) { super(0, 0, 0, 14, Component.empty(), Component.empty(), minValue, maxValue, currentValue, stepSize, precision, true); this.callback = callback; } @Override - protected void applyValue() - { + protected void applyValue() { this.callback.accept(this.getValue()); } @Override - public void renderWidget(@NotNull PoseStack poseStack, int mouseX, int mouseY, float partialTick) - { - RenderSystem.setShaderTexture(0, WIDGETS_LOCATION); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + public void renderWidget(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTick) { + graphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); int i = (this.isHoveredOrFocused() ? 2 : 1) * 20; - blit(poseStack, this.getX() + (int) (this.value * (double) (this.width - 8)), this.getY(), 0, 46 + i, 4, this.height); - blit(poseStack, this.getX() + (int) (this.value * (double) (this.width - 8)) + 4, this.getY(), 196, 46 + i, 4, this.height); + graphics.blit(WIDGETS_LOCATION, this.getX() + (int) (this.value * (double) (this.width - 8)), this.getY(), 0, 46 + i, 4, this.height); + graphics.blit(WIDGETS_LOCATION, this.getX() + (int) (this.value * (double) (this.width - 8)) + 4, this.getY(), 196, 46 + i, 4, this.height); } } diff --git a/src/main/java/com/mrcrayfish/guns/entity/MissileEntity.java b/src/main/java/com/mrcrayfish/guns/entity/MissileEntity.java index 30430d5ac..a4091b2a4 100644 --- a/src/main/java/com/mrcrayfish/guns/entity/MissileEntity.java +++ b/src/main/java/com/mrcrayfish/guns/entity/MissileEntity.java @@ -32,16 +32,16 @@ public MissileEntity(EntityType entityType, Level wo @Override protected void onProjectileTick() { - if (this.level.isClientSide) + if (this.level().isClientSide) { for (int i = 5; i > 0; i--) { - this.level.addParticle(ParticleTypes.CLOUD, true, this.getX() - (this.getDeltaMovement().x() / i), this.getY() - (this.getDeltaMovement().y() / i), this.getZ() - (this.getDeltaMovement().z() / i), 0, 0, 0); + this.level().addParticle(ParticleTypes.CLOUD, true, this.getX() - (this.getDeltaMovement().x() / i), this.getY() - (this.getDeltaMovement().y() / i), this.getZ() - (this.getDeltaMovement().z() / i), 0, 0, 0); } - if (this.level.random.nextInt(2) == 0) + if (this.level().random.nextInt(2) == 0) { - this.level.addParticle(ParticleTypes.SMOKE, true, this.getX(), this.getY(), this.getZ(), 0, 0, 0); - this.level.addParticle(ParticleTypes.FLAME, true, this.getX(), this.getY(), this.getZ(), 0, 0, 0); + this.level().addParticle(ParticleTypes.SMOKE, true, this.getX(), this.getY(), this.getZ(), 0, 0, 0); + this.level().addParticle(ParticleTypes.FLAME, true, this.getX(), this.getY(), this.getZ(), 0, 0, 0); } } } diff --git a/src/main/java/com/mrcrayfish/guns/entity/ProjectileEntity.java b/src/main/java/com/mrcrayfish/guns/entity/ProjectileEntity.java index 9f8e3e0c9..523d1921f 100644 --- a/src/main/java/com/mrcrayfish/guns/entity/ProjectileEntity.java +++ b/src/main/java/com/mrcrayfish/guns/entity/ProjectileEntity.java @@ -42,12 +42,7 @@ import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.damagesource.DamageSources; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityDimensions; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.Pose; +import net.minecraft.world.entity.*; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -55,23 +50,15 @@ import net.minecraft.world.level.ClipContext; import net.minecraft.world.level.Explosion; import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.BaseFireBlock; -import net.minecraft.world.level.block.BellBlock; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.LeavesBlock; -import net.minecraft.world.level.block.TargetBlock; +import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.gameevent.GameEvent; import net.minecraft.world.level.material.FluidState; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.EntityHitResult; -import net.minecraft.world.phys.HitResult; -import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.entity.IEntityAdditionalSpawnData; import net.minecraftforge.network.NetworkHooks; -import net.minecraftforge.network.PacketDistributor; import net.minecraftforge.registries.ForgeRegistries; import javax.annotation.Nullable; @@ -124,7 +111,7 @@ public ProjectileEntity(EntityType entityType, Level worldIn, this.setDeltaMovement(dir.x * speed, dir.y * speed, dir.z * speed); this.updateHeading(); - /* Spawn the projectile half way between the previous and current position */ + /* Spawn the projectile halfway between the previous and current position */ double posX = shooter.xOld + (shooter.getX() - shooter.xOld) / 2.0; double posY = shooter.yOld + (shooter.getY() - shooter.yOld) / 2.0 + shooter.getEyeHeight(); double posZ = shooter.zOld + (shooter.getZ() - shooter.zOld) / 2.0; @@ -225,11 +212,11 @@ public void tick() this.updateHeading(); this.onProjectileTick(); - if(!this.level.isClientSide()) + if(!this.level().isClientSide()) { Vec3 startVec = this.position(); Vec3 endVec = startVec.add(this.getDeltaMovement()); - HitResult result = rayTraceBlocks(this.level, new ClipContext(startVec, endVec, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, this), IGNORE_LEAVES); + HitResult result = rayTraceBlocks(this.level(), new ClipContext(startVec, endVec, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, this), IGNORE_LEAVES); if(result.getType() != HitResult.Type.MISS) { endVec = result.getLocation(); @@ -305,7 +292,7 @@ protected void onProjectileTick() } /** - * Called when the projectile has run out of it's life. In other words, the projectile managed + * Called when the projectile has run out of its life. In other words, the projectile managed * to not hit any blocks and instead aged. The grenade uses this to explode in the air. */ protected void onExpired() @@ -318,7 +305,7 @@ protected EntityResult findEntityOnPath(Vec3 startVec, Vec3 endVec) Vec3 hitVec = null; Entity hitEntity = null; boolean headshot = false; - List entities = this.level.getEntities(this, this.getBoundingBox().expandTowards(this.getDeltaMovement()).inflate(1.0), PROJECTILE_TARGETS); + List entities = this.level().getEntities(this, this.getBoundingBox().expandTowards(this.getDeltaMovement()).inflate(1.0), PROJECTILE_TARGETS); double closestDistance = Double.MAX_VALUE; for(Entity entity : entities) { @@ -345,7 +332,7 @@ protected EntityResult findEntityOnPath(Vec3 startVec, Vec3 endVec) protected List findEntitiesOnPath(Vec3 startVec, Vec3 endVec) { List hitEntities = new ArrayList<>(); - List entities = this.level.getEntities(this, this.getBoundingBox().expandTowards(this.getDeltaMovement()).inflate(1.0), PROJECTILE_TARGETS); + List entities = this.level().getEntities(this, this.getBoundingBox().expandTowards(this.getDeltaMovement()).inflate(1.0), PROJECTILE_TARGETS); for(Entity entity : entities) { if(!entity.equals(this.shooter)) @@ -376,7 +363,7 @@ private EntityResult getHitResult(Entity entity, Vec3 startVec, Vec3 endVec) Vec3 grownHitPos = boundingBox.inflate(Config.COMMON.gameplay.growBoundingBoxAmount.get(), 0, Config.COMMON.gameplay.growBoundingBoxAmount.get()).clip(startVec, endVec).orElse(null); if(hitPos == null && grownHitPos != null) { - HitResult raytraceresult = rayTraceBlocks(this.level, new ClipContext(startVec, grownHitPos, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, this), IGNORE_LEAVES); + HitResult raytraceresult = rayTraceBlocks(this.level(), new ClipContext(startVec, grownHitPos, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, this), IGNORE_LEAVES); if(raytraceresult.getType() == HitResult.Type.BLOCK) { return null; @@ -434,37 +421,37 @@ private void onHit(HitResult result, Vec3 startVec, Vec3 endVec) Vec3 hitVec = result.getLocation(); BlockPos pos = blockHitResult.getBlockPos(); - BlockState state = this.level.getBlockState(pos); + BlockState state = this.level().getBlockState(pos); Block block = state.getBlock(); if(Config.COMMON.gameplay.griefing.enableGlassBreaking.get() && state.is(ModTags.Blocks.FRAGILE)) { - float destroySpeed = state.getDestroySpeed(this.level, pos); + float destroySpeed = state.getDestroySpeed(this.level(), pos); if(destroySpeed >= 0) { float chance = Config.COMMON.gameplay.griefing.fragileBaseBreakChance.get().floatValue() / (destroySpeed + 1); if(this.random.nextFloat() < chance) { - this.level.destroyBlock(pos, Config.COMMON.gameplay.griefing.fragileBlockDrops.get()); + this.level().destroyBlock(pos, Config.COMMON.gameplay.griefing.fragileBlockDrops.get()); } } } - if(!state.getMaterial().isReplaceable()) + if(!state.canBeReplaced()) { this.remove(RemovalReason.KILLED); } if(block instanceof IDamageable) { - ((IDamageable) block).onBlockDamaged(this.level, state, pos, this, this.getDamage(), (int) Math.ceil(this.getDamage() / 2.0) + 1); + ((IDamageable) block).onBlockDamaged(this.level(), state, pos, this, this.getDamage(), (int) Math.ceil(this.getDamage() / 2.0) + 1); } this.onHitBlock(state, pos, blockHitResult.getDirection(), hitVec.x, hitVec.y, hitVec.z); - + level().gameEvent(GameEvent.PROJECTILE_LAND, position(), GameEvent.Context.of(state)); if(block instanceof TargetBlock targetBlock) { - int power = ReflectionUtil.updateTargetBlock(targetBlock, this.level, state, blockHitResult, this); + int power = ReflectionUtil.updateTargetBlock(targetBlock, this.level(), state, blockHitResult, this); if(this.shooter instanceof ServerPlayer serverPlayer) { serverPlayer.awardStat(Stats.TARGET_HIT); @@ -474,18 +461,18 @@ private void onHit(HitResult result, Vec3 startVec, Vec3 endVec) if(block instanceof BellBlock bell) { - bell.attemptToRing(this.level, pos, blockHitResult.getDirection()); + bell.attemptToRing(this.level(), pos, blockHitResult.getDirection()); } int fireStarterLevel = EnchantmentHelper.getItemEnchantmentLevel(ModEnchantments.FIRE_STARTER.get(), this.weapon); if(fireStarterLevel > 0 && Config.COMMON.gameplay.griefing.setFireToBlocks.get()) { BlockPos offsetPos = pos.relative(blockHitResult.getDirection()); - if(BaseFireBlock.canBePlacedAt(this.level, offsetPos, blockHitResult.getDirection())) + if(BaseFireBlock.canBePlacedAt(this.level(), offsetPos, blockHitResult.getDirection())) { - BlockState fireState = BaseFireBlock.getState(this.level, offsetPos); - this.level.setBlock(offsetPos, fireState, 11); - ((ServerLevel) this.level).sendParticles(ParticleTypes.LAVA, hitVec.x - 1.0 + this.random.nextDouble() * 2.0, hitVec.y, hitVec.z - 1.0 + this.random.nextDouble() * 2.0, 4, 0, 0, 0, 0); + BlockState fireState = BaseFireBlock.getState(this.level(), offsetPos); + this.level().setBlock(offsetPos, fireState, 11); + ((ServerLevel) this.level()).sendParticles(ParticleTypes.LAVA, hitVec.x - 1.0 + this.random.nextDouble() * 2.0, hitVec.y, hitVec.z - 1.0 + this.random.nextDouble() * 2.0, 4, 0, 0, 0, 0); } } return; @@ -514,7 +501,7 @@ private void onHit(HitResult result, Vec3 startVec, Vec3 endVec) } this.onHitEntity(entity, result.getLocation(), startVec, endVec, entityHitResult.isHeadshot()); - + level().gameEvent(GameEvent.PROJECTILE_LAND, position(), GameEvent.Context.of(entity)); int collateralLevel = EnchantmentHelper.getItemEnchantmentLevel(ModEnchantments.COLLATERAL.get(), weapon); if(collateralLevel == 0) { @@ -537,7 +524,7 @@ protected void onHitEntity(Entity entity, Vec3 hitVec, Vec3 startVec, Vec3 endVe damage *= Config.COMMON.gameplay.headShotDamageMultiplier.get(); } - DamageSource source = ModDamageTypes.Sources.projectile(this.level.registryAccess(), this, this.shooter); + DamageSource source = ModDamageTypes.Sources.projectile(this.level().registryAccess(), this, this.shooter); entity.hurt(source, damage); if(this.shooter instanceof Player) @@ -545,14 +532,13 @@ protected void onHitEntity(Entity entity, Vec3 hitVec, Vec3 startVec, Vec3 endVe int hitType = critical ? S2CMessageProjectileHitEntity.HitType.CRITICAL : headshot ? S2CMessageProjectileHitEntity.HitType.HEADSHOT : S2CMessageProjectileHitEntity.HitType.NORMAL; PacketHandler.getPlayChannel().sendToPlayer(() -> (ServerPlayer) this.shooter, new S2CMessageProjectileHitEntity(hitVec.x, hitVec.y, hitVec.z, hitType, entity instanceof Player)); } - /* Send blood particle to tracking clients. */ PacketHandler.getPlayChannel().sendToTracking(() -> entity, new S2CMessageBlood(hitVec.x, hitVec.y, hitVec.z)); } protected void onHitBlock(BlockState state, BlockPos pos, Direction face, double x, double y, double z) { - PacketHandler.getPlayChannel().sendToTrackingChunk(() -> this.level.getChunkAt(pos), new S2CMessageProjectileHitBlock(x, y, z, pos, face)); + PacketHandler.getPlayChannel().sendToTrackingChunk(() -> this.level().getChunkAt(pos), new S2CMessageProjectileHitBlock(x, y, z, pos, face)); } @Override @@ -620,7 +606,7 @@ private Vec3 getVectorFromRotation(float pitch, float yaw) float f1 = Mth.sin(-yaw * 0.017453292F - (float) Math.PI); float f2 = -Mth.cos(-pitch * 0.017453292F); float f3 = Mth.sin(-pitch * 0.017453292F); - return new Vec3((double) (f1 * f2), (double) f3, (double) (f * f2)); + return new Vec3(f1 * f2, f3, f * f2); } /** @@ -672,7 +658,7 @@ public boolean shouldRenderAtSqrDistance(double distance) @Override public void onRemovedFromWorld() { - if(!this.level.isClientSide) + if(!this.level().isClientSide) { PacketHandler.getPlayChannel().sendToNearbyPlayers(this::getDeathTargetPoint, new S2CMessageRemoveProjectile(this.getId())); } @@ -680,7 +666,7 @@ public void onRemovedFromWorld() private LevelLocation getDeathTargetPoint() { - return LevelLocation.create(this.level, this.getX(), this.getY(), this.getZ(), 256); + return LevelLocation.create(this.level(), this.getX(), this.getY(), this.getZ(), 256); } @Override @@ -804,7 +790,7 @@ else if(d13 < d14) */ public static void createExplosion(Entity entity, float radius, boolean forceNone) { - Level world = entity.level; + Level world = entity.level(); if(world.isClientSide()) return; diff --git a/src/main/java/com/mrcrayfish/guns/entity/ThrowableGrenadeEntity.java b/src/main/java/com/mrcrayfish/guns/entity/ThrowableGrenadeEntity.java index a9c4f76a3..aa78bfbdc 100644 --- a/src/main/java/com/mrcrayfish/guns/entity/ThrowableGrenadeEntity.java +++ b/src/main/java/com/mrcrayfish/guns/entity/ThrowableGrenadeEntity.java @@ -55,9 +55,9 @@ public void tick() { this.rotation += speed * 50; } - if (this.level.isClientSide) + if (this.level().isClientSide) { - this.level.addParticle(ParticleTypes.SMOKE, true, this.getX(), this.getY() + 0.25, this.getZ(), 0, 0, 0); + this.level().addParticle(ParticleTypes.SMOKE, true, this.getX(), this.getY() + 0.25, this.getZ(), 0, 0, 0); } } diff --git a/src/main/java/com/mrcrayfish/guns/entity/ThrowableItemEntity.java b/src/main/java/com/mrcrayfish/guns/entity/ThrowableItemEntity.java index 1e689f723..b4dc97466 100644 --- a/src/main/java/com/mrcrayfish/guns/entity/ThrowableItemEntity.java +++ b/src/main/java/com/mrcrayfish/guns/entity/ThrowableItemEntity.java @@ -7,7 +7,6 @@ import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; -import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; @@ -15,6 +14,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.gameevent.GameEvent; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.EntityHitResult; import net.minecraft.world.phys.HitResult; @@ -102,12 +102,13 @@ protected void onHit(HitResult result) if(this.shouldBounce) { BlockPos resultPos = blockResult.getBlockPos(); - BlockState state = this.level.getBlockState(resultPos); - SoundEvent event = state.getBlock().getSoundType(state, this.level, resultPos, this).getStepSound(); + BlockState state = this.level().getBlockState(resultPos); + SoundEvent event = state.getBlock().getSoundType(state, this.level(), resultPos, this).getStepSound(); double speed = this.getDeltaMovement().length(); if(speed > 0.1) { - this.level.playSound(null, result.getLocation().x, result.getLocation().y, result.getLocation().z, event, SoundSource.AMBIENT, 1.0F, 1.0F); + this.level().playSound(null, result.getLocation().x, result.getLocation().y, result.getLocation().z, event, SoundSource.AMBIENT, 1.0F, 1.0F); + this.level().gameEvent(GameEvent.PROJECTILE_LAND, position(), GameEvent.Context.of(this)); } this.bounce(blockResult.getDirection()); } diff --git a/src/main/java/com/mrcrayfish/guns/entity/ThrowableStunGrenadeEntity.java b/src/main/java/com/mrcrayfish/guns/entity/ThrowableStunGrenadeEntity.java index 0d51d3f5a..87434df49 100644 --- a/src/main/java/com/mrcrayfish/guns/entity/ThrowableStunGrenadeEntity.java +++ b/src/main/java/com/mrcrayfish/guns/entity/ThrowableStunGrenadeEntity.java @@ -22,59 +22,50 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ClipContext; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.Material; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.Shapes; -import net.minecraftforge.event.entity.living.LivingSetAttackTargetEvent; +import net.minecraftforge.event.entity.living.LivingChangeTargetEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.network.PacketDistributor; import javax.annotation.Nullable; @Mod.EventBusSubscriber -public class ThrowableStunGrenadeEntity extends ThrowableGrenadeEntity -{ - public ThrowableStunGrenadeEntity(EntityType entityType, Level world) - { +public class ThrowableStunGrenadeEntity extends ThrowableGrenadeEntity { + public ThrowableStunGrenadeEntity(EntityType entityType, Level world) { super(entityType, world); } - public ThrowableStunGrenadeEntity(EntityType entityType, Level world, LivingEntity player) - { + public ThrowableStunGrenadeEntity(EntityType entityType, Level world, LivingEntity player) { super(entityType, world, player); this.setItem(new ItemStack(ModItems.STUN_GRENADE.get())); } - public ThrowableStunGrenadeEntity(Level world, LivingEntity player, int maxCookTime) - { + public ThrowableStunGrenadeEntity(Level world, LivingEntity player, int maxCookTime) { super(ModEntities.THROWABLE_STUN_GRENADE.get(), world, player); this.setItem(new ItemStack(ModItems.STUN_GRENADE.get())); this.setMaxLife(maxCookTime); } @SubscribeEvent - public static void blindMobs(LivingSetAttackTargetEvent event) - { - if(Config.COMMON.stunGrenades.blind.blindMobs.get() && event.getTarget() != null && event.getEntity() instanceof Mob && event.getEntity().hasEffect(ModEffects.BLINDED.get())) - { + public static void blindMobs(LivingChangeTargetEvent event) { + if (Config.COMMON.stunGrenades.blind.blindMobs.get() && event.getOriginalTarget() != null && event.getEntity() instanceof Mob && event.getEntity().hasEffect(ModEffects.BLINDED.get())) { ((Mob) event.getEntity()).setTarget(null); } } @Override - public void onDeath() - { + public void onDeath() { double y = this.getY() + this.getType().getDimensions().height * 0.5; - this.level.playSound(null, this.getX(), y, this.getZ(), ModSounds.ENTITY_STUN_GRENADE_EXPLOSION.get(), SoundSource.BLOCKS, 4, (1 + (level.random.nextFloat() - level.random.nextFloat()) * 0.2F) * 0.7F); - if(this.level.isClientSide) - { + this.level().playSound(null, this.getX(), y, this.getZ(), ModSounds.ENTITY_STUN_GRENADE_EXPLOSION.get(), SoundSource.BLOCKS, 4, (1 + (level().random.nextFloat() - level().random.nextFloat()) * 0.2F) * 0.7F); + if (this.level().isClientSide) { return; } - PacketHandler.getPlayChannel().sendToNearbyPlayers(() -> LevelLocation.create(this.level, this.getX(), y, this.getZ(), 64), new S2CMessageStunGrenade(this.getX(), y, this.getZ())); + PacketHandler.getPlayChannel().sendToNearbyPlayers(() -> LevelLocation.create(this.level(), this.getX(), y, this.getZ(), 64), new S2CMessageStunGrenade(this.getX(), y, this.getZ())); // Calculate bounds of area where potentially effected players my be double diameter = Math.max(Config.COMMON.stunGrenades.deafen.criteria.radius.get(), Config.COMMON.stunGrenades.blind.criteria.radius.get()) * 2 + 1; @@ -89,9 +80,8 @@ public void onDeath() Vec3 grenade = new Vec3(this.getX(), y, this.getZ()); Vec3 eyes, directionGrenade; double distance; - for(LivingEntity entity : this.level.getEntitiesOfClass(LivingEntity.class, new AABB(minX, minY, minZ, maxX, maxY, maxZ))) - { - if(entity.ignoreExplosion()) + for (LivingEntity entity : this.level().getEntitiesOfClass(LivingEntity.class, new AABB(minX, minY, minZ, maxX, maxY, maxZ))) { + if (entity.ignoreExplosion()) continue; eyes = entity.getEyePosition(1.0F); @@ -102,25 +92,20 @@ public void onDeath() double angle = Math.toDegrees(Math.acos(entity.getViewVector(1.0F).dot(directionGrenade.normalize()))); // Apply effects as determined by their criteria - if(this.calculateAndApplyEffect(ModEffects.DEAFENED.get(), Config.COMMON.stunGrenades.deafen.criteria, entity, grenade, eyes, distance, angle) && Config.COMMON.stunGrenades.deafen.panicMobs.get()) - { + if (this.calculateAndApplyEffect(ModEffects.DEAFENED.get(), Config.COMMON.stunGrenades.deafen.criteria, entity, grenade, eyes, distance, angle) && Config.COMMON.stunGrenades.deafen.panicMobs.get()) { entity.setLastHurtByMob(entity); } - if(this.calculateAndApplyEffect(ModEffects.BLINDED.get(), Config.COMMON.stunGrenades.blind.criteria, entity, grenade, eyes, distance, angle) && Config.COMMON.stunGrenades.blind.blindMobs.get() && entity instanceof Mob) - { + if (this.calculateAndApplyEffect(ModEffects.BLINDED.get(), Config.COMMON.stunGrenades.blind.criteria, entity, grenade, eyes, distance, angle) && Config.COMMON.stunGrenades.blind.blindMobs.get() && entity instanceof Mob) { ((Mob) entity).setTarget(null); } } } - private boolean calculateAndApplyEffect(MobEffect effect, EffectCriteria criteria, LivingEntity entity, Vec3 grenade, Vec3 eyes, double distance, double angle) - { + private boolean calculateAndApplyEffect(MobEffect effect, EffectCriteria criteria, LivingEntity entity, Vec3 grenade, Vec3 eyes, double distance, double angle) { double angleMax = criteria.angleEffect.get() * 0.5; - if(distance <= criteria.radius.get() && angleMax > 0 && angle <= angleMax) - { + if (distance <= criteria.radius.get() && angleMax > 0 && angle <= angleMax) { // Verify that light can pass through all blocks obstructing the entity's line of sight to the grenade - if(effect != ModEffects.BLINDED.get() || !Config.COMMON.stunGrenades.blind.criteria.raytraceOpaqueBlocks.get() || rayTraceOpaqueBlocks(this.level, eyes, grenade, false, false, false) == null) - { + if (effect != ModEffects.BLINDED.get() || !Config.COMMON.stunGrenades.blind.criteria.raytraceOpaqueBlocks.get() || rayTraceOpaqueBlocks(this.level(), eyes, grenade, false, false, false) == null) { // Duration attenuated by distance int durationBlinded = (int) Math.round(criteria.durationMax.get() - (criteria.durationMax.get() - criteria.durationMin.get()) * (distance / criteria.radius.get())); @@ -136,12 +121,9 @@ private boolean calculateAndApplyEffect(MobEffect effect, EffectCriteria criteri } @Nullable - public HitResult rayTraceOpaqueBlocks(Level world, Vec3 start, Vec3 end, boolean stopOnLiquid, boolean ignoreBlockWithoutBoundingBox, boolean returnLastUncollidableBlock) - { - if(!Double.isNaN(start.x) && !Double.isNaN(start.y) && !Double.isNaN(start.z)) - { - if(!Double.isNaN(end.x) && !Double.isNaN(end.y) && !Double.isNaN(end.z)) - { + public HitResult rayTraceOpaqueBlocks(Level world, Vec3 start, Vec3 end, boolean stopOnLiquid, boolean ignoreBlockWithoutBoundingBox, boolean returnLastUncollidableBlock) { + if (!Double.isNaN(start.x) && !Double.isNaN(start.y) && !Double.isNaN(start.z)) { + if (!Double.isNaN(end.x) && !Double.isNaN(end.y) && !Double.isNaN(end.z)) { int endX = Mth.floor(end.x); int endY = Mth.floor(end.y); int endZ = Mth.floor(end.z); @@ -152,26 +134,21 @@ public HitResult rayTraceOpaqueBlocks(Level world, Vec3 start, Vec3 end, boolean BlockState stateInside = world.getBlockState(pos); // Added light opacity check - if(stateInside.getLightBlock(world, pos) != 0 && (!ignoreBlockWithoutBoundingBox || stateInside.getCollisionShape(world, pos) != Shapes.empty())) - { + if (stateInside.getLightBlock(world, pos) != 0 && (!ignoreBlockWithoutBoundingBox || stateInside.getCollisionShape(world, pos) != Shapes.empty())) { HitResult raytraceresult = world.clip(new ClipContext(start, end, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, this)); - if(raytraceresult != null) - { + if (raytraceresult != null) { return raytraceresult; } } HitResult raytraceresult2 = null; int limit = 200; - while(limit-- >= 0) - { - if(Double.isNaN(start.x) || Double.isNaN(start.y) || Double.isNaN(start.z)) - { + while (limit-- >= 0) { + if (Double.isNaN(start.x) || Double.isNaN(start.y) || Double.isNaN(start.z)) { return null; } - if(startX == endX && startY == endY && startZ == endZ) - { + if (startX == endX && startY == endY && startZ == endZ) { return returnLastUncollidableBlock ? raytraceresult2 : null; } @@ -182,42 +159,27 @@ public HitResult rayTraceOpaqueBlocks(Level world, Vec3 start, Vec3 end, boolean double d1 = 999; double d2 = 999; - if(endX > startX) - { + if (endX > startX) { d0 = startX + 1; - } - else if(endX < startX) - { + } else if (endX < startX) { d0 = startX; - } - else - { + } else { completedX = false; } - if(endY > startY) - { + if (endY > startY) { d1 = startY + 1; - } - else if(endY < startY) - { + } else if (endY < startY) { d1 = startY; - } - else - { + } else { completedY = false; } - if(endZ > startZ) - { + if (endZ > startZ) { d2 = startZ + 1; - } - else if(endZ < startZ) - { + } else if (endZ < startZ) { d2 = startZ; - } - else - { + } else { completedZ = false; } @@ -228,32 +190,27 @@ else if(endZ < startZ) double d7 = end.y - start.y; double d8 = end.z - start.z; - if(completedX) d3 = (d0 - start.x) / d6; + if (completedX) d3 = (d0 - start.x) / d6; - if(completedY) d4 = (d1 - start.y) / d7; + if (completedY) d4 = (d1 - start.y) / d7; - if(completedZ) d5 = (d2 - start.z) / d8; + if (completedZ) d5 = (d2 - start.z) / d8; - if(d3 == -0) d3 = -1.0E-4D; + if (d3 == -0) d3 = -1.0E-4D; - if(d4 == -0) d4 = -1.0E-4D; + if (d4 == -0) d4 = -1.0E-4D; - if(d5 == -0) d5 = -1.0E-4D; + if (d5 == -0) d5 = -1.0E-4D; Direction direction; - if(d3 < d4 && d3 < d5) - { + if (d3 < d4 && d3 < d5) { direction = endX > startX ? Direction.WEST : Direction.EAST; start = new Vec3(d0, start.y + d7 * d3, start.z + d8 * d3); - } - else if(d4 < d5) - { + } else if (d4 < d5) { direction = endY > startY ? Direction.DOWN : Direction.UP; start = new Vec3(start.x + d6 * d4, d1, start.z + d8 * d4); - } - else - { + } else { direction = endZ > startZ ? Direction.NORTH : Direction.SOUTH; start = new Vec3(start.x + d6 * d5, start.y + d7 * d5, d2); } @@ -265,8 +222,7 @@ else if(d4 < d5) BlockState state = world.getBlockState(pos); // Added light opacity check - if(state.getLightBlock(world, pos) != 0 && (!ignoreBlockWithoutBoundingBox || state.getMaterial() == Material.PORTAL || state.getCollisionShape(world, pos) != Shapes.empty())) - { + if (state.getLightBlock(world, pos) != 0 && (!ignoreBlockWithoutBoundingBox || state.is(Blocks.NETHER_PORTAL) || state.getCollisionShape(world, pos) != Shapes.empty())) { return world.clip(new ClipContext(start, end, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, this)); } } diff --git a/src/main/java/com/mrcrayfish/guns/init/ModBlocks.java b/src/main/java/com/mrcrayfish/guns/init/ModBlocks.java index 56b9b17ee..87e78d83c 100644 --- a/src/main/java/com/mrcrayfish/guns/init/ModBlocks.java +++ b/src/main/java/com/mrcrayfish/guns/init/ModBlocks.java @@ -5,7 +5,8 @@ import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.material.MapColor; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; @@ -17,22 +18,18 @@ /** * Author: MrCrayfish */ -public class ModBlocks -{ +public class ModBlocks { public static final DeferredRegister REGISTER = DeferredRegister.create(ForgeRegistries.BLOCKS, Reference.MOD_ID); - public static final RegistryObject WORKBENCH = register("workbench", () -> new WorkbenchBlock(Block.Properties.of(Material.METAL).strength(1.5F))); + public static final RegistryObject WORKBENCH = register("workbench", () -> new WorkbenchBlock(Block.Properties.of().strength(1.5F).sound(SoundType.METAL).mapColor(MapColor.METAL))); - private static RegistryObject register(String id, Supplier blockSupplier) - { + private static RegistryObject register(String id, Supplier blockSupplier) { return register(id, blockSupplier, block1 -> new BlockItem(block1, new Item.Properties())); } - private static RegistryObject register(String id, Supplier blockSupplier, @Nullable Function supplier) - { + private static RegistryObject register(String id, Supplier blockSupplier, @Nullable Function supplier) { RegistryObject registryObject = REGISTER.register(id, blockSupplier); - if(supplier != null) - { + if (supplier != null) { ModItems.REGISTER.register(id, () -> supplier.apply(registryObject.get())); } return registryObject; diff --git a/src/main/java/com/mrcrayfish/guns/init/ModContainers.java b/src/main/java/com/mrcrayfish/guns/init/ModContainers.java index bf10becca..f18b9f266 100644 --- a/src/main/java/com/mrcrayfish/guns/init/ModContainers.java +++ b/src/main/java/com/mrcrayfish/guns/init/ModContainers.java @@ -20,7 +20,7 @@ public class ModContainers public static final DeferredRegister> REGISTER = DeferredRegister.create(ForgeRegistries.MENU_TYPES, Reference.MOD_ID); public static final RegistryObject> WORKBENCH = register("workbench", (IContainerFactory) (windowId, playerInventory, data) -> { - WorkbenchBlockEntity workstation = (WorkbenchBlockEntity) playerInventory.player.level.getBlockEntity(data.readBlockPos()); + WorkbenchBlockEntity workstation = (WorkbenchBlockEntity) playerInventory.player.level().getBlockEntity(data.readBlockPos()); return new WorkbenchContainer(windowId, playerInventory, workstation); }); diff --git a/src/main/java/com/mrcrayfish/guns/init/ModDamageTypes.java b/src/main/java/com/mrcrayfish/guns/init/ModDamageTypes.java index 4fc7ee89e..83a3ef278 100644 --- a/src/main/java/com/mrcrayfish/guns/init/ModDamageTypes.java +++ b/src/main/java/com/mrcrayfish/guns/init/ModDamageTypes.java @@ -5,15 +5,17 @@ import net.minecraft.core.Holder; import net.minecraft.core.RegistryAccess; import net.minecraft.core.registries.Registries; +import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.damagesource.DamageType; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; import javax.annotation.Nullable; +import java.util.concurrent.ThreadLocalRandom; /** * Author: MrCrayfish @@ -35,12 +37,48 @@ private static Holder.Reference getHolder(RegistryAccess access, Res private static DamageSource source(RegistryAccess access, ResourceKey damageTypeKey, @Nullable Entity directEntity, @Nullable Entity causingEntity) { - return new DamageSource(getHolder(access, damageTypeKey), directEntity, causingEntity); + return new BulletDamageSource(getHolder(access, damageTypeKey), directEntity, causingEntity); } public static DamageSource projectile(RegistryAccess access, ProjectileEntity projectile, LivingEntity entity) { return source(access, BULLET, projectile, entity); } + + public static class BulletDamageSource extends DamageSource { + private static final String[] msgSuffix = { + "cgm.bullet.killed", + "cgm.bullet.eliminated", + "cgm.bullet.executed", + "cgm.bullet.annihilated", + "cgm.bullet.decimated" + }; + public BulletDamageSource(Holder pType, Entity pDirectEntity, Entity pCausingEntity) { + super(pType, pDirectEntity, pCausingEntity); + } + + public Component getLocalizedDeathMessage(LivingEntity pLivingEntity) { + final String s = "death.attack." + this.getMsgId(); + if (this.getEntity() == null && this.getDirectEntity() == null) { + LivingEntity living = pLivingEntity.getKillCredit(); + return living != null ? Component.translatable(s + ".player", pLivingEntity.getDisplayName(), living.getDisplayName()) : Component.translatable(s, pLivingEntity.getDisplayName()); + } else { + final Component component = this.getEntity() == null ? this.getDirectEntity().getDisplayName() : this.getEntity().getDisplayName(); + final ItemStack stack = this.getEntity() instanceof LivingEntity livingentity ? livingentity.getMainHandItem() : ItemStack.EMPTY; + return !stack.isEmpty() && stack.hasCustomHoverName() ? + Component.translatable( + s + ".item", + pLivingEntity.getDisplayName(), + component, + stack.getDisplayName() + ) : Component.translatable(s, pLivingEntity.getDisplayName(), component); + } + } + + @Override + public String getMsgId() { + return msgSuffix[ThreadLocalRandom.current().nextInt(5)]; + } + } } } diff --git a/src/main/java/com/mrcrayfish/guns/item/GrenadeItem.java b/src/main/java/com/mrcrayfish/guns/item/GrenadeItem.java index 31b81c704..07b9e3242 100644 --- a/src/main/java/com/mrcrayfish/guns/item/GrenadeItem.java +++ b/src/main/java/com/mrcrayfish/guns/item/GrenadeItem.java @@ -37,16 +37,16 @@ public int getUseDuration(ItemStack stack) { return this.maxCookTime; } - + @Override - public void onUsingTick(ItemStack stack, LivingEntity player, int count) + public void onUseTick(Level level, LivingEntity player, ItemStack stack, int count) { if(!this.canCook()) return; int duration = this.getUseDuration(stack) - count; if(duration == 10) - player.level.playLocalSound(player.getX(), player.getY(), player.getZ(), ModSounds.ITEM_GRENADE_PIN.get(), SoundSource.PLAYERS, 1.0F, 1.0F, false); + player.level().playLocalSound(player.getX(), player.getY(), player.getZ(), ModSounds.ITEM_GRENADE_PIN.get(), SoundSource.PLAYERS, 1.0F, 1.0F, false); } @Override diff --git a/src/main/java/com/mrcrayfish/guns/jei/WorkbenchCategory.java b/src/main/java/com/mrcrayfish/guns/jei/WorkbenchCategory.java index 403422d17..9bba94688 100644 --- a/src/main/java/com/mrcrayfish/guns/jei/WorkbenchCategory.java +++ b/src/main/java/com/mrcrayfish/guns/jei/WorkbenchCategory.java @@ -21,9 +21,8 @@ import mezz.jei.api.recipe.category.IRecipeCategory; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.resources.language.I18n; import net.minecraft.client.resources.model.BakedModel; @@ -36,14 +35,14 @@ import net.minecraft.world.item.ItemStack; import net.minecraftforge.registries.ForgeRegistries; +import java.awt.*; import java.util.stream.Collectors; import java.util.stream.Stream; /** * Author: MrCrayfish */ -public class WorkbenchCategory implements IRecipeCategory -{ +public class WorkbenchCategory implements IRecipeCategory { public static final ResourceLocation ID = new ResourceLocation(Reference.MOD_ID, "workbench"); public static final ResourceLocation BACKGROUND = new ResourceLocation(Reference.MOD_ID, "textures/gui/workbench.png"); public static final String TITLE_KEY = Reference.MOD_ID + ".category.workbench.title"; @@ -69,66 +68,59 @@ public WorkbenchCategory(IGuiHelper helper) } @Override - public RecipeType getRecipeType() - { + public RecipeType getRecipeType() { return GunModPlugin.WORKBENCH; } @Override - public Component getTitle() - { + public Component getTitle() { return this.title; } @Override - public IDrawable getBackground() - { + public IDrawable getBackground() { return this.background; } @Override - public IDrawable getIcon() - { + public IDrawable getIcon() { return this.icon; } @Override - public void setRecipe(IRecipeLayoutBuilder builder, WorkbenchRecipe recipe, IFocusGroup focuses) - { + public void setRecipe(IRecipeLayoutBuilder builder, WorkbenchRecipe recipe, IFocusGroup focuses) { ItemStack output = recipe.getItem(); - if(IColored.isDyeable(output)) - { + if (IColored.isDyeable(output)) { builder.addSlot(RecipeIngredientRole.INPUT, 141, 52).addItemStacks(Stream.of(this.dyes).map(ItemStack::new).collect(Collectors.toList())); } - for(int i = 0; i < recipe.getMaterials().size(); i++) - { + for (int i = 0; i < recipe.getMaterials().size(); i++) { builder.addSlot(RecipeIngredientRole.INPUT, (i % 8) * 18 + 1, 88 + (i / 8) * 18).addIngredients(recipe.getMaterials().get(i)); } builder.addInvisibleIngredients(RecipeIngredientRole.OUTPUT).addItemStack(output); } - + @Override - public void draw(WorkbenchRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack poseStack, double mouseX, double mouseY) + public void draw(WorkbenchRecipe recipe, IRecipeSlotsView recipeSlotsView, GuiGraphics graphics, double mouseX, double mouseY) { - this.window.draw(poseStack, 0, 0); - this.inventory.draw(poseStack, 0, this.window.getHeight() + 2 + 11 + 2); - this.dyeSlot.draw(poseStack, 140, 51); - - Minecraft.getInstance().font.draw(poseStack, I18n.get(MATERIALS_KEY), 0, 78, 0x7E7E7E); + this.window.draw(graphics, 0, 0); + this.inventory.draw(graphics, 0, this.window.getHeight() + 2 + 11 + 2); + this.dyeSlot.draw(graphics, 140, 51); + + graphics.drawString(Minecraft.getInstance().font, I18n.get(MATERIALS_KEY), 0, 78, Color.WHITE.getRGB()); ItemStack output = recipe.getItem(); MutableComponent displayName = output.getHoverName().copy(); - if(output.getCount() > 1) + if (output.getCount() > 1) { displayName.append(Component.literal(" x " + output.getCount()).withStyle(ChatFormatting.GOLD, ChatFormatting.BOLD)); } int titleX = this.window.getWidth() / 2; - GuiComponent.drawCenteredString(poseStack, Minecraft.getInstance().font, displayName, titleX, 5, 0xFFFFFFFF); + graphics.drawCenteredString(Minecraft.getInstance().font, displayName, titleX, 5, Color.WHITE.getRGB()); PoseStack stack = RenderSystem.getModelViewStack(); stack.pushPose(); { - stack.mulPoseMatrix(poseStack.last().pose()); + stack.mulPoseMatrix(graphics.pose().last().pose()); stack.translate(81, 40, 0); stack.scale(40F, 40F, 40F); stack.mulPose(Axis.XP.rotationDegrees(-5F)); diff --git a/src/main/java/com/mrcrayfish/guns/mixin/client/GameRendererMixin.java b/src/main/java/com/mrcrayfish/guns/mixin/client/GameRendererMixin.java index 53720b4be..f4fbaff3b 100644 --- a/src/main/java/com/mrcrayfish/guns/mixin/client/GameRendererMixin.java +++ b/src/main/java/com/mrcrayfish/guns/mixin/client/GameRendererMixin.java @@ -1,11 +1,10 @@ package com.mrcrayfish.guns.mixin.client; import com.mojang.blaze3d.platform.Window; -import com.mojang.blaze3d.vertex.PoseStack; import com.mrcrayfish.guns.Config; import com.mrcrayfish.guns.init.ModEffects; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.player.Player; @@ -15,11 +14,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(GameRenderer.class) -public class GameRendererMixin -{ +public class GameRendererMixin { @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/profiling/ProfilerFiller;popPush(Ljava/lang/String;)V", ordinal = 0, shift = At.Shift.AFTER)) - public void updateCameraAndRender(float partialTicks, long nanoTime, boolean renderWorldIn, CallbackInfo ci) - { + public void updateCameraAndRender(float partialTicks, long nanoTime, boolean renderWorldIn, CallbackInfo ci) { Minecraft minecraft = Minecraft.getInstance(); Player player = minecraft.player; if (player == null) @@ -33,8 +30,9 @@ public void updateCameraAndRender(float partialTicks, long nanoTime, boolean ren // Render white screen-filling overlay at full alpha effect when duration is above threshold // When below threshold, fade to full transparency as duration approaches 0 float percent = Math.min((effect.getDuration() / (float) Config.SERVER.alphaFadeThreshold.get()), 1); - Window window = Minecraft.getInstance().getWindow(); - GuiComponent.fill(new PoseStack(), 0, 0, window.getScreenWidth(), window.getScreenHeight(), ((int) (percent * Config.SERVER.alphaOverlay.get() + 0.5) << 24) | 16777215); + Window window = minecraft.getWindow(); + GuiGraphics graphics = new GuiGraphics(minecraft, minecraft.renderBuffers().bufferSource()); + graphics.fill(0, 0, window.getScreenWidth(), window.getScreenHeight(), ((int) (percent * Config.SERVER.alphaOverlay.get() + 0.5) << 24) | 16777215); } } } diff --git a/src/main/java/com/mrcrayfish/guns/mixin/common/LayeredCauldronBlockMixin.java b/src/main/java/com/mrcrayfish/guns/mixin/common/LayeredCauldronBlockMixin.java new file mode 100644 index 000000000..792d4a1dd --- /dev/null +++ b/src/main/java/com/mrcrayfish/guns/mixin/common/LayeredCauldronBlockMixin.java @@ -0,0 +1,43 @@ +package com.mrcrayfish.guns.mixin.common; + +import com.mrcrayfish.guns.item.IColored; +import net.minecraft.core.BlockPos; +import net.minecraft.core.cauldron.CauldronInteraction; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.AbstractCauldronBlock; +import net.minecraft.world.level.block.LayeredCauldronBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.Map; + +@Mixin(LayeredCauldronBlock.class) +public abstract class LayeredCauldronBlockMixin extends AbstractCauldronBlock { + public LayeredCauldronBlockMixin(Properties p, Map m) { + super(p, m); + } + + @Inject(method = "entityInside", at = @At("HEAD")) + private void removeColor(BlockState state, Level level, BlockPos pos, Entity entity, CallbackInfo ci) + { + if (level.isClientSide) return; + if (level.getGameTime() % 40 != 0) return; // Reduced frequency of check + if (!(entity instanceof ItemEntity ie)) return; + final ItemStack stack = ie.getItem(); + if (!(stack.getItem() instanceof IColored colored)) return; + if (!colored.hasColor(stack)) return; + if (!this.isEntityInsideContent(state, pos, ie)) return; + colored.removeColor(stack); + final Vec3 p = ie.position(); + ie.discard(); + level.addFreshEntity(new ItemEntity(level, p.x, p.y, p.z, stack)); + } +} diff --git a/src/main/java/com/mrcrayfish/guns/mixin/common/LivingEntityMixin.java b/src/main/java/com/mrcrayfish/guns/mixin/common/LivingEntityMixin.java index 2ca153e57..60b5b6f77 100644 --- a/src/main/java/com/mrcrayfish/guns/mixin/common/LivingEntityMixin.java +++ b/src/main/java/com/mrcrayfish/guns/mixin/common/LivingEntityMixin.java @@ -5,6 +5,7 @@ import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.LivingEntity; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyArg; @@ -16,18 +17,19 @@ @Mixin(LivingEntity.class) public class LivingEntityMixin { - private DamageSource source; + @Unique + private DamageSource cgm$source; @Inject(method = "hurt", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;knockback(DDD)V")) private void capture(DamageSource source, float amount, CallbackInfoReturnable cir) { - this.source = source; + this.cgm$source = source; } @ModifyArg(method = "hurt", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;knockback(DDD)V"), index = 0) private double modifyApplyKnockbackArgs(double original) { - if(this.source.getEntity() instanceof ProjectileEntity) + if(this.cgm$source.getDirectEntity() instanceof ProjectileEntity) { if(!Config.COMMON.gameplay.enableKnockback.get()) { diff --git a/src/main/java/com/mrcrayfish/guns/particles/TrailData.java b/src/main/java/com/mrcrayfish/guns/particles/TrailData.java index 35d4a7e91..b03e59ea9 100644 --- a/src/main/java/com/mrcrayfish/guns/particles/TrailData.java +++ b/src/main/java/com/mrcrayfish/guns/particles/TrailData.java @@ -15,24 +15,19 @@ */ public class TrailData implements ParticleOptions { - public static final Codec CODEC = RecordCodecBuilder.create((builder) -> { - return builder.group(Codec.BOOL.fieldOf("enchanted").forGetter((data) -> { - return data.enchanted; - })).apply(builder, TrailData::new); - }); + public static final Codec CODEC = RecordCodecBuilder.create((builder) -> builder + .group(Codec.BOOL.fieldOf("enchanted").forGetter((data) -> data.enchanted)) + .apply(builder, TrailData::new)); - public static final ParticleOptions.Deserializer DESERIALIZER = new ParticleOptions.Deserializer() - { + public static final ParticleOptions.Deserializer DESERIALIZER = new ParticleOptions.Deserializer<>() { @Override - public TrailData fromCommand(ParticleType particleType, StringReader reader) throws CommandSyntaxException - { + public TrailData fromCommand(ParticleType particleType, StringReader reader) throws CommandSyntaxException { reader.expect(' '); return new TrailData(reader.readBoolean()); } @Override - public TrailData fromNetwork(ParticleType particleType, FriendlyByteBuf buffer) - { + public TrailData fromNetwork(ParticleType particleType, FriendlyByteBuf buffer) { return new TrailData(buffer.readBoolean()); } }; diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index e57590c68..dababacde 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -1,10 +1,10 @@ modLoader="javafml" -loaderVersion="[39,)" +loaderVersion="[46,)" license="GPL3" [[mods]] modId="cgm" -version="1.3.7" +version="${file.jarVersion}}" displayName="MrCrayfish's Gun Mod" updateJSONURL="https://raw.githubusercontent.com/MrCrayfish/ModUpdates/master/cgm/update.json" displayURL="https://mrcrayfish.com/" @@ -15,13 +15,13 @@ description="MrCrayfish's Gun Mod adds in simple and straight forward weapons in [[dependencies.cgm]] modId="forge" mandatory=true - versionRange="[44.1.0,)" + versionRange="[46, 48)" ordering="NONE" side="BOTH" [[dependencies.cgm]] modId="minecraft" mandatory=true - versionRange="[1.19.4,1.20)" + versionRange="[1.20, 1.20.2)" ordering="NONE" side="BOTH" [[dependencies.cgm]] diff --git a/src/main/resources/assets/cgm/lang/en_gb.json b/src/main/resources/assets/cgm/lang/en_gb.json index 15cdbb530..d9f8ae3d2 100644 --- a/src/main/resources/assets/cgm/lang/en_gb.json +++ b/src/main/resources/assets/cgm/lang/en_gb.json @@ -1,69 +1,24 @@ { "block.cgm.workbench": "Workbench", - "item.cgm.pistol": "Pistol", - "item.cgm.shotgun": "Shotgun", - "item.cgm.sniper_rifle": "Sniper Rifle", - "item.cgm.grenade_launcher": "Grenade Launcher", - "item.cgm.bazooka": "Bazooka", - "item.cgm.mini_gun": "Minigun", - "item.cgm.rifle": "Rifle", - "item.cgm.assault_rifle": "Assault Rifle", - "item.cgm.machine_pistol": "Machine Pistol", - "item.cgm.heavy_rifle": "Heavy Rifle", - "item.cgm.basic_bullet": "Basic Bullet", - "item.cgm.advanced_bullet": "Advanced Bullet", - "item.cgm.shell": "Shell", - "item.cgm.grenade": "Grenade", - "item.cgm.stun_grenade": "Stun Grenade", - "item.cgm.missile": "Missile", - "item.cgm.short_scope": "Short Scope", - "item.cgm.medium_scope": "Medium Scope", - "item.cgm.long_scope": "Long Scope", - "item.cgm.silencer": "Silencer", - "item.cgm.light_stock": "Light Stock", - "item.cgm.tactical_stock": "Tactical Stock", - "item.cgm.weighted_stock": "Weighted Stock", - "item.cgm.light_grip": "Light Grip", - "item.cgm.specialised_grip": "Specialised Grip", - "item.minecraft.potion.effect.blinding": "Potion of Blinding", - "item.minecraft.potion.effect.deafening": "Potion of Deafening", - "item.minecraft.lingering_potion.effect.blinding": "Lingering Potion of Blinding", - "item.minecraft.lingering_potion.effect.deafening": "Lingering Potion of Deafening", - "itemGroup.cgm": "MrCrayfish's Gun Mod", - "death.attack.cgm.bullet.killed": "%1$s was taken down by %2$s", - "death.attack.cgm.bullet.eliminated": "%1$s was eliminated by %2$s", - "death.attack.cgm.bullet.executed": "%1$s was executed by %2$s", - "death.attack.cgm.bullet.annihilated": "%1$s was annihilated by %2$s", - "death.attack.cgm.bullet.decimated": "%1$s was decimated by %2$s", - "info.cgm.damage": "Damage: %s", - "info.cgm.ignore_ammo": "Infinite Ammo", - "info.cgm.ammo": "Ammo: %s", - "info.cgm.ammo_type": "Ammo Type: %s", - "info.cgm.attachment_help": "Press %s in-game for Attachments", - "key.categories.cgm": "MrCrayfish's Gun Mod", - "key.cgm.reload": "Reload", - "key.cgm.unload": "Unload", - "key.cgm.attachments": "Modify Attachments", - "effect.cgm.blinded": "Blinded", - "effect.cgm.deafened": "Deafened", - "subtitle.cgm.stun.explosion": "Stun Grenade Explosion", - "subtitle.cgm.stun.ring": "Ringing", - "subtitle.cgm.fire": "Gunfire", - "subtitle.cgm.fire.silenced": "Silenced Gunfire", - "subtitle.cgm.fire.enchanted": "Enchanted Gunfire", - "subtitle.cgm.reload": "Reloading", - "subtitle.cgm.grenade.pin": "Grenade Pin", - "subtitle.cgm.attach": "Attachment Attach", - "subtitle.cgm.cock": "Cocking Weapon", - "cgm.option_list.no_items": "No Items", - "cgm.options.adsSensitivity": "ADS Sensitivity", - "cgm.options.adsSensitivity.format": "ADS Sensitivity: %s", - "cgm.options.crosshair": "Crosshair", + "button.categories.cgm": "MrCrayfish's Gun Mod", + "cgm.action.aim": "Aim", + "cgm.action.reload": "Reload", + "cgm.action.shoot": "Shoot", + "cgm.action.steady_aim": "Steady Aim", + "cgm.button.aim": "Aim Down Sight", + "cgm.button.attachments": "Modify Attachments", + "cgm.button.config.tooltip": "Config Options", + "cgm.button.reload": "Reload / Unload", + "cgm.button.shoot": "Shoot Weapon", + "cgm.button.steadyAim": "Steady Aim", + "cgm.category.workbench.materials": "Materials", + "cgm.category.workbench.title": "Assembling", + "cgm.chat.install_configured": "Install %s to access config options", + "cgm.chat.open_curseforge_page": "Open CurseForge Page", "cgm.crosshair.arrow": "Arrow", "cgm.crosshair.better_default": "Better Default", "cgm.crosshair.box": "Box", "cgm.crosshair.circle": "Circle", - "minecraft.crosshair.default": "Default", "cgm.crosshair.dot": "Dot", "cgm.crosshair.filled_circle": "Filled Circle", "cgm.crosshair.hit_marker": "Hit Marker", @@ -73,74 +28,123 @@ "cgm.crosshair.square": "Square", "cgm.crosshair.t": "T", "cgm.crosshair.tech": "Tech", - "gui.cgm.workbench.assemble": "Assemble", - "gui.cgm.workbench.show_remaining": "Show Remaining", - "gui.cgm.workbench.tab.weapons": "Weapons", - "gui.cgm.workbench.tab.attachments": "Attachments", - "gui.cgm.workbench.tab.ammo": "Ammo", - "gui.cgm.workbench.tab.misc": "Miscellaneous", - "container.cgm.workbench": "Workbench", + "cgm.option_list.no_items": "No Items", + "cgm.options.adsSensitivity": "ADS Sensitivity", + "cgm.options.adsSensitivity.format": "ADS Sensitivity: %s", + "cgm.options.crosshair": "Crosshair", "container.cgm.attachments": "Modify Attachments", "container.cgm.attachments.window_help": "Click to move and rotate", - "slot.cgm.attachment.not_applicable": "\u00a7cNot applicable", - "slot.cgm.attachment.scope": "Scope", - "slot.cgm.attachment.barrel": "Barrel", - "slot.cgm.attachment.stock": "Stock", - "slot.cgm.attachment.under_barrel": "Under Barrel", - "enchantment.cgm.quick_hands": "Quick Hands", - "enchantment.cgm.trigger_finger": "Trigger Finger", - "enchantment.cgm.lightweight": "Lightweight", - "enchantment.cgm.collateral": "Collateral", - "enchantment.cgm.over_capacity": "Over Capacity", - "enchantment.cgm.reclaimed": "Reclaimed", + "container.cgm.workbench": "Workbench", + "death.attack.cgm.bullet.annihilated": "%1$s was annihilated by %2$s", + "death.attack.cgm.bullet.decimated": "%1$s was decimated by %2$s", + "death.attack.cgm.bullet.eliminated": "%1$s was eliminated by %2$s", + "death.attack.cgm.bullet.executed": "%1$s was executed by %2$s", + "death.attack.cgm.bullet.killed": "%1$s was taken down by %2$s", + "effect.cgm.blinded": "Blinded", + "effect.cgm.deafened": "Deafened", "enchantment.cgm.accelerator": "Accelerator", - "enchantment.cgm.puncturing": "Puncturing", + "enchantment.cgm.accelerator.desc": "Increases the speed of fired projectiles causing them to do more damage", + "enchantment.cgm.collateral": "Collateral", + "enchantment.cgm.collateral.desc": "Makes fired bullets travel through multiple entities", "enchantment.cgm.fire_starter": "Fire Starter", - "enchantment.cgm.quick_hands.desc": "Increases the speed of reloading weapons", - "enchantment.cgm.trigger_finger.desc": "Increases the speed you can fire weapons", + "enchantment.cgm.fire_starter.desc": "Fired bullets will set blocks and entities on fire upon impact", + "enchantment.cgm.lightweight": "Lightweight", "enchantment.cgm.lightweight.desc": "Reduces the weight of a weapon to increase ADS speed", - "enchantment.cgm.collateral.desc": "Makes fired bullets travel through multiple entities", + "enchantment.cgm.over_capacity": "Over Capacity", "enchantment.cgm.over_capacity.desc": "Increases the ammo capacity of a weapon", - "enchantment.cgm.reclaimed.desc": "Creates a chance that a bullet won't be consumed upon firing a weapon", - "enchantment.cgm.accelerator.desc": "Increases the speed of fired projectiles causing them to do more damage", + "enchantment.cgm.puncturing": "Puncturing", "enchantment.cgm.puncturing.desc": "Creates a chance that a bullet will deal critical damage", - "enchantment.cgm.fire_starter.desc": "Fired bullets will set blocks and entities on fire upon impact", - "perk.cgm.title": "Perks:", - "perk.cgm.entry.positive": "+ %s", + "enchantment.cgm.quick_hands": "Quick Hands", + "enchantment.cgm.quick_hands.desc": "Increases the speed of reloading weapons", + "enchantment.cgm.reclaimed": "Reclaimed", + "enchantment.cgm.reclaimed.desc": "Creates a chance that a bullet won't be consumed upon firing a weapon", + "enchantment.cgm.trigger_finger": "Trigger Finger", + "enchantment.cgm.trigger_finger.desc": "Increases the speed you can fire weapons", + "gui.cgm.assemble": "Assemble", + "gui.cgm.show_remaining": "Show Remaining", + "gui.cgm.workbench.assemble": "Assemble", + "gui.cgm.workbench.show_remaining": "Show Remaining", + "gui.cgm.workbench.tab.ammo": "Ammo", + "gui.cgm.workbench.tab.attachments": "Attachments", + "gui.cgm.workbench.tab.misc": "Miscellaneous", + "gui.cgm.workbench.tab.weapons": "Weapons", + "info.cgm.ammo": "Ammo: %s", + "info.cgm.ammo_type": "Ammo Type: %s", + "info.cgm.attachment_help": "Press %s in-game for Attachments", + "info.cgm.damage": "Damage: %s", + "info.cgm.ignore_ammo": "Infinite Ammo", + "item.cgm.advanced_bullet": "Advanced Bullet", + "item.cgm.assault_rifle": "Assault Rifle", + "item.cgm.basic_bullet": "Basic Bullet", + "item.cgm.bazooka": "Bazooka", + "item.cgm.grenade": "Grenade", + "item.cgm.grenade_launcher": "Grenade Launcher", + "item.cgm.heavy_rifle": "Heavy Rifle", + "item.cgm.light_grip": "Light Grip", + "item.cgm.light_stock": "Light Stock", + "item.cgm.long_scope": "Long Scope", + "item.cgm.machine_pistol": "Machine Pistol", + "item.cgm.medium_scope": "Medium Scope", + "item.cgm.mini_gun": "Minigun", + "item.cgm.missile": "Missile", + "item.cgm.pistol": "Pistol", + "item.cgm.rifle": "Rifle", + "item.cgm.shell": "Shell", + "item.cgm.short_scope": "Short Scope", + "item.cgm.shotgun": "Shotgun", + "item.cgm.silencer": "Silencer", + "item.cgm.sniper_rifle": "Sniper Rifle", + "item.cgm.specialised_grip": "Specialised Grip", + "item.cgm.stun_grenade": "Stun Grenade", + "item.cgm.tactical_stock": "Tactical Stock", + "item.cgm.weighted_stock": "Weighted Stock", + "item.minecraft.lingering_potion.effect.blinding": "Lingering Potion of Blinding", + "item.minecraft.lingering_potion.effect.deafening": "Lingering Potion of Deafening", + "item.minecraft.potion.effect.blinding": "Potion of Blinding", + "item.minecraft.potion.effect.deafening": "Potion of Deafening", + "itemGroup.cgm": "MrCrayfish's Gun Mod", + "key.categories.cgm": "MrCrayfish's Gun Mod", + "key.cgm.attachments": "Modify Attachments", + "key.cgm.reload": "Reload", + "key.cgm.unload": "Unload", + "minecraft.crosshair.default": "Default", + "perk.cgm.additional_damage.negative": "Negative Damage §r(§l-%s ♥§r)", + "perk.cgm.additional_damage.positive": "Additional Damage §r(§l+%s ♥§r)", + "perk.cgm.ads_speed.negative": "Reduced ADS Speed", + "perk.cgm.ads_speed.positive": "Increased ADS Speed", "perk.cgm.entry.negative": "- %s", - "perk.cgm.fire_volume.positive": "Quieter Fire Sound", + "perk.cgm.entry.positive": "+ %s", "perk.cgm.fire_volume.negative": "Louder Fire Sound", - "perk.cgm.silenced.positive": "Silenced", - "perk.cgm.sound_radius.positive": "Reduced Fire Sound Radius", - "perk.cgm.sound_radius.negative": "Increased Fire Sound Radius", - "perk.cgm.additional_damage.positive": "Additional Damage §r(§l+%s ♥§r)", - "perk.cgm.additional_damage.negative": "Negative Damage §r(§l-%s ♥§r)", - "perk.cgm.modified_damage.positive": "Increased Weapon Damage", + "perk.cgm.fire_volume.positive": "Quieter Fire Sound", "perk.cgm.modified_damage.negative": "Reduced Weapon Damage", - "perk.cgm.projectile_speed.positive": "Increased Projectile Speed", + "perk.cgm.modified_damage.positive": "Increased Weapon Damage", + "perk.cgm.projectile_life.negative": "Reduced Damage Range", + "perk.cgm.projectile_life.positive": "Increased Damage Range", "perk.cgm.projectile_speed.negative": "Reduced Projectile Speed", - "perk.cgm.projectile_spread.positive": "Reduced Projectile Spread", + "perk.cgm.projectile_speed.positive": "Increased Projectile Speed", "perk.cgm.projectile_spread.negative": "Increased Projectile Spread", - "perk.cgm.projectile_life.positive": "Increased Damage Range", - "perk.cgm.projectile_life.negative": "Reduced Damage Range", - "perk.cgm.recoil.positive": "Reduced Recoil", - "perk.cgm.recoil.negative": "Increased Recoil", - "perk.cgm.ads_speed.positive": "Increased ADS Speed", - "perk.cgm.ads_speed.negative": "Reduced ADS Speed", - "perk.cgm.rate.positive": "Increased Fire Rate", + "perk.cgm.projectile_spread.positive": "Reduced Projectile Spread", "perk.cgm.rate.negative": "Reduced Fire Rate", - "gui.cgm.assemble": "Assemble", - "gui.cgm.show_remaining": "Show Remaining", - "button.categories.cgm": "MrCrayfish's Gun Mod", - "cgm.button.shoot": "Shoot Weapon", - "cgm.button.aim": "Aim Down Sight", - "cgm.button.reload": "Reload / Unload", - "cgm.button.attachments": "Modify Attachments", - "cgm.button.steadyAim": "Steady Aim", - "cgm.category.workbench.title": "Assembling", - "cgm.category.workbench.materials": "Materials", - "cgm.action.aim": "Aim", - "cgm.action.shoot": "Shoot", - "cgm.action.reload": "Reload", - "cgm.action.steady_aim": "Steady Aim" -} + "perk.cgm.rate.positive": "Increased Fire Rate", + "perk.cgm.recoil.negative": "Increased Recoil", + "perk.cgm.recoil.positive": "Reduced Recoil", + "perk.cgm.silenced.positive": "Silenced", + "perk.cgm.sound_radius.negative": "Increased Fire Sound Radius", + "perk.cgm.sound_radius.positive": "Reduced Fire Sound Radius", + "perk.cgm.title": "Perks:", + "slot.cgm.attachment.barrel": "Barrel", + "slot.cgm.attachment.incompatible": "This doesn't seem to fit...", + "slot.cgm.attachment.not_applicable": "§cNot applicable", + "slot.cgm.attachment.scope": "Scope", + "slot.cgm.attachment.stock": "Stock", + "slot.cgm.attachment.under_barrel": "Under Barrel", + "subtitle.cgm.attach": "Attachment Attach", + "subtitle.cgm.cock": "Cocking Weapon", + "subtitle.cgm.fire": "Gunfire", + "subtitle.cgm.fire.enchanted": "Enchanted Gunfire", + "subtitle.cgm.fire.silenced": "Silenced Gunfire", + "subtitle.cgm.grenade.pin": "Grenade Pin", + "subtitle.cgm.reload": "Reloading", + "subtitle.cgm.stun.explosion": "Stun Grenade Explosion", + "subtitle.cgm.stun.ring": "Ringing" +} \ No newline at end of file diff --git a/src/main/resources/assets/cgm/lang/en_us.json b/src/main/resources/assets/cgm/lang/en_us.json index a4b935a07..0355ccbcb 100644 --- a/src/main/resources/assets/cgm/lang/en_us.json +++ b/src/main/resources/assets/cgm/lang/en_us.json @@ -1,69 +1,24 @@ { "block.cgm.workbench": "Workbench", - "item.cgm.pistol": "Pistol", - "item.cgm.shotgun": "Shotgun", - "item.cgm.sniper_rifle": "Sniper Rifle", - "item.cgm.grenade_launcher": "Grenade Launcher", - "item.cgm.bazooka": "Bazooka", - "item.cgm.mini_gun": "Minigun", - "item.cgm.rifle": "Rifle", - "item.cgm.assault_rifle": "Assault Rifle", - "item.cgm.machine_pistol": "Machine Pistol", - "item.cgm.heavy_rifle": "Heavy Rifle", - "item.cgm.basic_bullet": "Basic Bullet", - "item.cgm.advanced_bullet": "Advanced Bullet", - "item.cgm.shell": "Shell", - "item.cgm.grenade": "Grenade", - "item.cgm.stun_grenade": "Stun Grenade", - "item.cgm.missile": "Missile", - "item.cgm.short_scope": "Short Scope", - "item.cgm.medium_scope": "Medium Scope", - "item.cgm.long_scope": "Long Scope", - "item.cgm.silencer": "Silencer", - "item.cgm.light_stock": "Light Stock", - "item.cgm.tactical_stock": "Tactical Stock", - "item.cgm.weighted_stock": "Weighted Stock", - "item.cgm.light_grip": "Light Grip", - "item.cgm.specialised_grip": "Specialised Grip", - "item.minecraft.potion.effect.blinding": "Potion of Blinding", - "item.minecraft.potion.effect.deafening": "Potion of Deafening", - "item.minecraft.lingering_potion.effect.blinding": "Lingering Potion of Blinding", - "item.minecraft.lingering_potion.effect.deafening": "Lingering Potion of Deafening", - "itemGroup.cgm": "MrCrayfish's Gun Mod", - "death.attack.cgm.bullet.killed": "%1$s was taken down by %2$s", - "death.attack.cgm.bullet.eliminated": "%1$s was eliminated by %2$s", - "death.attack.cgm.bullet.executed": "%1$s was executed by %2$s", - "death.attack.cgm.bullet.annihilated": "%1$s was annihilated by %2$s", - "death.attack.cgm.bullet.decimated": "%1$s was decimated by %2$s", - "info.cgm.damage": "Damage: %s", - "info.cgm.ignore_ammo": "Infinite Ammo", - "info.cgm.ammo": "Ammo: %s", - "info.cgm.ammo_type": "Ammo Type: %s", - "info.cgm.attachment_help": "Press %s in-game for Attachments", - "key.categories.cgm": "MrCrayfish's Gun Mod", - "key.cgm.reload": "Reload", - "key.cgm.unload": "Unload", - "key.cgm.attachments": "Modify Attachments", - "effect.cgm.blinded": "Blinded", - "effect.cgm.deafened": "Deafened", - "subtitle.cgm.stun.explosion": "Stun Grenade Explosion", - "subtitle.cgm.stun.ring": "Ringing", - "subtitle.cgm.fire": "Gunfire", - "subtitle.cgm.fire.silenced": "Silenced Gunfire", - "subtitle.cgm.fire.enchanted": "Enchanted Gunfire", - "subtitle.cgm.reload": "Reloading", - "subtitle.cgm.grenade.pin": "Grenade Pin", - "subtitle.cgm.attach": "Attachment Attach", - "subtitle.cgm.cock": "Cocking Weapon", - "cgm.option_list.no_items": "No Items", - "cgm.options.adsSensitivity": "ADS Sensitivity", - "cgm.options.adsSensitivity.format": "ADS Sensitivity: %s", - "cgm.options.crosshair": "Crosshair", + "button.categories.cgm": "MrCrayfish's Gun Mod", + "cgm.action.aim": "Aim", + "cgm.action.reload": "Reload", + "cgm.action.shoot": "Shoot", + "cgm.action.steady_aim": "Steady Aim", + "cgm.button.aim": "Aim Down Sight", + "cgm.button.attachments": "Modify Attachments", + "cgm.button.config.tooltip": "Config Options", + "cgm.button.reload": "Reload / Unload", + "cgm.button.shoot": "Shoot Weapon", + "cgm.button.steadyAim": "Steady Aim", + "cgm.category.workbench.materials": "Materials", + "cgm.category.workbench.title": "Assembling", + "cgm.chat.install_configured": "Install %s to access config options", + "cgm.chat.open_curseforge_page": "Open CurseForge Page", "cgm.crosshair.arrow": "Arrow", "cgm.crosshair.better_default": "Better Default", "cgm.crosshair.box": "Box", "cgm.crosshair.circle": "Circle", - "minecraft.crosshair.default": "Default", "cgm.crosshair.dot": "Dot", "cgm.crosshair.filled_circle": "Filled Circle", "cgm.crosshair.hit_marker": "Hit Marker", @@ -73,78 +28,125 @@ "cgm.crosshair.square": "Square", "cgm.crosshair.t": "T", "cgm.crosshair.tech": "Tech", - "gui.cgm.workbench.assemble": "Assemble", - "gui.cgm.workbench.show_remaining": "Show Remaining", - "gui.cgm.workbench.tab.weapons": "Weapons", - "gui.cgm.workbench.tab.attachments": "Attachments", - "gui.cgm.workbench.tab.ammo": "Ammo", - "gui.cgm.workbench.tab.misc": "Miscellaneous", - "container.cgm.workbench": "Workbench", + "cgm.option_list.no_items": "No Items", + "cgm.options.adsSensitivity": "ADS Sensitivity", + "cgm.options.adsSensitivity.format": "ADS Sensitivity: %s", + "cgm.options.crosshair": "Crosshair", "container.cgm.attachments": "Modify Attachments", "container.cgm.attachments.window_help": "Click to move and rotate", - "slot.cgm.attachment.not_applicable": "\u00a7cNot applicable", - "slot.cgm.attachment.incompatible": "This doesn't seem to fit...", - "slot.cgm.attachment.scope": "Scope", - "slot.cgm.attachment.barrel": "Barrel", - "slot.cgm.attachment.stock": "Stock", - "slot.cgm.attachment.under_barrel": "Under Barrel", - "enchantment.cgm.quick_hands": "Quick Hands", - "enchantment.cgm.trigger_finger": "Trigger Finger", - "enchantment.cgm.lightweight": "Lightweight", - "enchantment.cgm.collateral": "Collateral", - "enchantment.cgm.over_capacity": "Over Capacity", - "enchantment.cgm.reclaimed": "Reclaimed", + "container.cgm.workbench": "Workbench", + "death.attack.cgm.bullet.annihilated": "%1$s was annihilated by %2$s", + "death.attack.cgm.bullet.decimated": "%1$s was decimated by %2$s", + "death.attack.cgm.bullet.eliminated": "%1$s was eliminated by %2$s", + "death.attack.cgm.bullet.executed": "%1$s was executed by %2$s", + "death.attack.cgm.bullet.killed": "%1$s was taken down by %2$s", + "effect.cgm.blinded": "Blinded", + "effect.cgm.deafened": "Deafened", "enchantment.cgm.accelerator": "Accelerator", - "enchantment.cgm.puncturing": "Puncturing", + "enchantment.cgm.accelerator.desc": "Increases the speed of fired projectiles causing them to do more damage", + "enchantment.cgm.collateral": "Collateral", + "enchantment.cgm.collateral.desc": "Makes fired bullets travel through multiple entities", "enchantment.cgm.fire_starter": "Fire Starter", - "enchantment.cgm.quick_hands.desc": "Increases the speed of reloading weapons", - "enchantment.cgm.trigger_finger.desc": "Increases the speed you can fire weapons", + "enchantment.cgm.fire_starter.desc": "Fired bullets will set blocks and entities on fire upon impact", + "enchantment.cgm.lightweight": "Lightweight", "enchantment.cgm.lightweight.desc": "Reduces the weight of a weapon to increase ADS speed", - "enchantment.cgm.collateral.desc": "Makes fired bullets travel through multiple entities", + "enchantment.cgm.over_capacity": "Over Capacity", "enchantment.cgm.over_capacity.desc": "Increases the ammo capacity of a weapon", - "enchantment.cgm.reclaimed.desc": "Creates a chance that a bullet won't be consumed upon firing a weapon", - "enchantment.cgm.accelerator.desc": "Increases the speed of fired projectiles causing them to do more damage", + "enchantment.cgm.puncturing": "Puncturing", "enchantment.cgm.puncturing.desc": "Creates a chance that a bullet will deal critical damage", - "enchantment.cgm.fire_starter.desc": "Fired bullets will set blocks and entities on fire upon impact", - "perk.cgm.title": "Perks:", - "perk.cgm.entry.positive": "+ %s", + "enchantment.cgm.quick_hands": "Quick Hands", + "enchantment.cgm.quick_hands.desc": "Increases the speed of reloading weapons", + "enchantment.cgm.reclaimed": "Reclaimed", + "enchantment.cgm.reclaimed.desc": "Creates a chance that a bullet won't be consumed upon firing a weapon", + "enchantment.cgm.trigger_finger": "Trigger Finger", + "enchantment.cgm.trigger_finger.desc": "Increases the speed you can fire weapons", + "gui.cgm.assemble": "Assemble", + "gui.cgm.show_remaining": "Show Remaining", + "gui.cgm.workbench.assemble": "Assemble", + "gui.cgm.workbench.show_remaining": "Show Remaining", + "gui.cgm.workbench.tab.ammo": "Ammo", + "gui.cgm.workbench.tab.attachments": "Attachments", + "gui.cgm.workbench.tab.misc": "Miscellaneous", + "gui.cgm.workbench.tab.weapons": "Weapons", + "info.cgm.ammo": "Ammo: %s", + "info.cgm.ammo_type": "Ammo Type: %s", + "info.cgm.attachment_help": "Press %s in-game for Attachments", + "info.cgm.damage": "Damage: %s", + "info.cgm.ignore_ammo": "Infinite Ammo", + "item.cgm.advanced_bullet": "Advanced Bullet", + "item.cgm.assault_rifle": "Assault Rifle", + "item.cgm.basic_bullet": "Basic Bullet", + "item.cgm.bazooka": "Bazooka", + "item.cgm.grenade": "Grenade", + "item.cgm.grenade_launcher": "Grenade Launcher", + "item.cgm.heavy_rifle": "Heavy Rifle", + "item.cgm.light_grip": "Light Grip", + "item.cgm.light_stock": "Light Stock", + "item.cgm.long_scope": "Long Scope", + "item.cgm.machine_pistol": "Machine Pistol", + "item.cgm.medium_scope": "Medium Scope", + "item.cgm.mini_gun": "Minigun", + "item.cgm.missile": "Missile", + "item.cgm.pistol": "Pistol", + "item.cgm.rifle": "Rifle", + "item.cgm.shell": "Shell", + "item.cgm.short_scope": "Short Scope", + "item.cgm.shotgun": "Shotgun", + "item.cgm.silencer": "Silencer", + "item.cgm.sniper_rifle": "Sniper Rifle", + "item.cgm.specialised_grip": "Specialised Grip", + "item.cgm.stun_grenade": "Stun Grenade", + "item.cgm.tactical_stock": "Tactical Stock", + "item.cgm.weighted_stock": "Weighted Stock", + "item.minecraft.lingering_potion.effect.blinding": "Lingering Potion of Blinding", + "item.minecraft.lingering_potion.effect.deafening": "Lingering Potion of Deafening", + "item.minecraft.potion.effect.blinding": "Potion of Blinding", + "item.minecraft.potion.effect.deafening": "Potion of Deafening", + "itemGroup.cgm": "MrCrayfish's Gun Mod", + "key.categories.cgm": "MrCrayfish's Gun Mod", + "key.cgm.attachments": "Modify Attachments", + "key.cgm.reload": "Reload", + "key.cgm.unload": "Unload", + "minecraft.crosshair.default": "Default", + "pack.cgm.pbr.desc": "PBR Textures for CGM Guns", + "pack.cgm.pbr.title": "CGM PBR Textures", + "perk.cgm.additional_damage.negative": "Negative Damage §r(§l-%s ♥§r)", + "perk.cgm.additional_damage.positive": "Additional Damage §r(§l+%s ♥§r)", + "perk.cgm.ads_speed.negative": "Reduced ADS Speed", + "perk.cgm.ads_speed.positive": "Increased ADS Speed", "perk.cgm.entry.negative": "- %s", - "perk.cgm.fire_volume.positive": "Quieter Fire Sound", + "perk.cgm.entry.positive": "+ %s", "perk.cgm.fire_volume.negative": "Louder Fire Sound", - "perk.cgm.silenced.positive": "Silenced", - "perk.cgm.sound_radius.positive": "Reduced Fire Sound Radius", - "perk.cgm.sound_radius.negative": "Increased Fire Sound Radius", - "perk.cgm.additional_damage.positive": "Additional Damage §r(§l+%s ♥§r)", - "perk.cgm.additional_damage.negative": "Negative Damage §r(§l-%s ♥§r)", - "perk.cgm.modified_damage.positive": "Increased Weapon Damage", + "perk.cgm.fire_volume.positive": "Quieter Fire Sound", "perk.cgm.modified_damage.negative": "Reduced Weapon Damage", - "perk.cgm.projectile_speed.positive": "Increased Projectile Speed", + "perk.cgm.modified_damage.positive": "Increased Weapon Damage", + "perk.cgm.projectile_life.negative": "Reduced Damage Range", + "perk.cgm.projectile_life.positive": "Increased Damage Range", "perk.cgm.projectile_speed.negative": "Reduced Projectile Speed", - "perk.cgm.projectile_spread.positive": "Reduced Projectile Spread", + "perk.cgm.projectile_speed.positive": "Increased Projectile Speed", "perk.cgm.projectile_spread.negative": "Increased Projectile Spread", - "perk.cgm.projectile_life.positive": "Increased Damage Range", - "perk.cgm.projectile_life.negative": "Reduced Damage Range", - "perk.cgm.recoil.positive": "Reduced Recoil", - "perk.cgm.recoil.negative": "Increased Recoil", - "perk.cgm.ads_speed.positive": "Increased ADS Speed", - "perk.cgm.ads_speed.negative": "Reduced ADS Speed", - "perk.cgm.rate.positive": "Increased Fire Rate", + "perk.cgm.projectile_spread.positive": "Reduced Projectile Spread", "perk.cgm.rate.negative": "Reduced Fire Rate", - "gui.cgm.assemble": "Assemble", - "gui.cgm.show_remaining": "Show Remaining", - "button.categories.cgm": "MrCrayfish's Gun Mod", - "cgm.button.shoot": "Shoot Weapon", - "cgm.button.aim": "Aim Down Sight", - "cgm.button.reload": "Reload / Unload", - "cgm.button.attachments": "Modify Attachments", - "cgm.button.steadyAim": "Steady Aim", - "cgm.category.workbench.title": "Assembling", - "cgm.category.workbench.materials": "Materials", - "cgm.action.aim": "Aim", - "cgm.action.shoot": "Shoot", - "cgm.action.reload": "Reload", - "cgm.action.steady_aim": "Steady Aim", - "cgm.button.config.tooltip": "Config Options", - "cgm.chat.open_curseforge_page": "Open CurseForge Page", - "cgm.chat.install_configured": "Install %s to access config options" + "perk.cgm.rate.positive": "Increased Fire Rate", + "perk.cgm.recoil.negative": "Increased Recoil", + "perk.cgm.recoil.positive": "Reduced Recoil", + "perk.cgm.silenced.positive": "Silenced", + "perk.cgm.sound_radius.negative": "Increased Fire Sound Radius", + "perk.cgm.sound_radius.positive": "Reduced Fire Sound Radius", + "perk.cgm.title": "Perks:", + "slot.cgm.attachment.barrel": "Barrel", + "slot.cgm.attachment.incompatible": "This doesn't seem to fit...", + "slot.cgm.attachment.not_applicable": "§cNot applicable", + "slot.cgm.attachment.scope": "Scope", + "slot.cgm.attachment.stock": "Stock", + "slot.cgm.attachment.under_barrel": "Under Barrel", + "subtitle.cgm.attach": "Attachment Attach", + "subtitle.cgm.cock": "Cocking Weapon", + "subtitle.cgm.fire": "Gunfire", + "subtitle.cgm.fire.enchanted": "Enchanted Gunfire", + "subtitle.cgm.fire.silenced": "Silenced Gunfire", + "subtitle.cgm.grenade.pin": "Grenade Pin", + "subtitle.cgm.reload": "Reloading", + "subtitle.cgm.stun.explosion": "Stun Grenade Explosion", + "subtitle.cgm.stun.ring": "Ringing" } \ No newline at end of file diff --git a/src/main/resources/assets/cgm/lang/fil_ph.json b/src/main/resources/assets/cgm/lang/fil_ph.json index 323a981f8..d9fb398ca 100644 --- a/src/main/resources/assets/cgm/lang/fil_ph.json +++ b/src/main/resources/assets/cgm/lang/fil_ph.json @@ -1,69 +1,21 @@ { "block.cgm.workbench": "Workbench", - "item.cgm.pistol": "Pistola", - "item.cgm.shotgun": "Syotgun", - "item.cgm.sniper_rifle": "Sniper Riple", - "item.cgm.grenade_launcher": "Grenada Launcher", - "item.cgm.bazooka": "Basuka", - "item.cgm.mini_gun": "Minigun", - "item.cgm.rifle": "Riple", - "item.cgm.assault_rifle": "Assault Riple", - "item.cgm.machine_pistol": "Makina Pistola", - "item.cgm.heavy_rifle": "Malakas Riple", - "item.cgm.basic_bullet": "Pangunahing Bala", - "item.cgm.advanced_bullet": "Advanced na Bala", - "item.cgm.shell": "Punlo", - "item.cgm.grenade": "Grenada", - "item.cgm.stun_grenade": "Bombang Pampatigil", - "item.cgm.missile": "Misil", - "item.cgm.short_scope": "Maikling Saklaw", - "item.cgm.medium_scope": "Katamtamang Saklaw", - "item.cgm.long_scope": "Mahabang Saklaw", - "item.cgm.silencer": "Silencer", - "item.cgm.light_stock": "Magaan na Stock", - "item.cgm.tactical_stock": "Taktikal na Stock", - "item.cgm.weighted_stock": "Timbang na Stock", - "item.cgm.light_grip": "Magaan na Pagkakahawak", - "item.cgm.specialised_grip": "Espesyal na Pagkakahawak", - "item.minecraft.potion.effect.blinding": "Gayuma ng Nakakabulag", - "item.minecraft.potion.effect.deafening": "Gayuma ng Nakakabingi", - "item.minecraft.lingering_potion.effect.blinding": "Tumatagal na Gayuma ng Nakakabulag", - "item.minecraft.lingering_potion.effect.deafening": "Tumatagal na Gayuma ng Nakakabingi", - "itemGroup.cgm": "MrCrayfish's Gun Mod", - "death.attack.cgm.bullet.killed": "%1$s ay ibinaba ni %2$s", - "death.attack.cgm.bullet.eliminated": "%1$s ay inalis ng %2$s", - "death.attack.cgm.bullet.executed": "%1$s ay pinaandar ni %2$s", - "death.attack.cgm.bullet.annihilated": "%1$s ay nilipol ng %2$s", - "death.attack.cgm.bullet.decimated": "%1$s ay nasira ng %2$s", - "info.cgm.damage": "Pinsala: %s", - "info.cgm.ignore_ammo": "Walang Hanggang Bala", - "info.cgm.ammo": "Bala: %s", - "info.cgm.ammo_type": "Uri ng Bala: %s", - "info.cgm.attachment_help": "Pindutin ang %s in-game para sa mga attachment", - "key.categories.cgm": "MrCrayfish's Gun Mod", - "key.cgm.reload": "Magkarga", - "key.cgm.unload": "Magdiskarga", - "key.cgm.attachments": "Baguhin ang mga Attachment", - "effect.cgm.blinded": "Nabulag", - "effect.cgm.deafened": "Nabingi", - "subtitle.cgm.stun.explosion": "Pagsabog ng Bombang Pampatigil", - "subtitle.cgm.stun.ring": "Nagri-ring", - "subtitle.cgm.fire": "Putok ng Baril", - "subtitle.cgm.fire.silenced": "Pinatahimik na Putok ng Baril", - "subtitle.cgm.fire.enchanted": "Enchanted Gunfire", - "subtitle.cgm.reload": "Nagre-reload", - "subtitle.cgm.grenade.pin": "Pin ng Granada", - "subtitle.cgm.attach": "Kalakip na Kalakip", - "subtitle.cgm.cock": "Cocking Weapon", - "cgm.option_list.no_items": "Walang Bagay", - "cgm.options.adsSensitivity": "Sensitivity ng ADS", - "cgm.options.adsSensitivity.format": "Sensitivity ng ADS: %s", - "cgm.options.crosshair": "Crosshair", + "button.categories.cgm": "MrCrayfish's Gun Mod", + "cgm.action.aim": "Aim", + "cgm.action.reload": "Reload", + "cgm.action.shoot": "Shoot", + "cgm.action.steady_aim": "Steady Aim", + "cgm.button.aim": "Layunin Down Sight", + "cgm.button.attachments": "Baguhin ang Mga Attachment", + "cgm.button.reload": "I-reload / I-unload", + "cgm.button.shoot": "Shoot Weapon", + "cgm.button.steadyAim": "Panay na Layunin", + "cgm.category.workbench.materials": "Materials", + "cgm.category.workbench.title": "Assembling", "cgm.crosshair.arrow": "Palaso", "cgm.crosshair.better_default": "Mas Mahusay na Default", "cgm.crosshair.box": "Kahon", "cgm.crosshair.circle": "Bilog", - "minecraft.crosshair.default": "Default", "cgm.crosshair.dot": "Tuldok", "cgm.crosshair.filled_circle": "Puno ng Bilog", "cgm.crosshair.hit_marker": "Pindutin ang Marker", @@ -73,75 +25,123 @@ "cgm.crosshair.square": "Parisukat", "cgm.crosshair.t": "T", "cgm.crosshair.tech": "Tech", - "gui.cgm.workbench.assemble": "Magtipon", - "gui.cgm.workbench.show_remaining": "Ipakita ang Natitira", - "gui.cgm.workbench.tab.weapons": "Mga Sandata", - "gui.cgm.workbench.tab.attachments": "Mga Kalakip", - "gui.cgm.workbench.tab.ammo": "Bala", - "gui.cgm.workbench.tab.misc": "Miscellaneous", - "container.cgm.workbench": "Workbench", + "cgm.option_list.no_items": "Walang Bagay", + "cgm.options.adsSensitivity": "Sensitivity ng ADS", + "cgm.options.adsSensitivity.format": "Sensitivity ng ADS: %s", + "cgm.options.crosshair": "Crosshair", + "cgm.options.crosshair.format": "Crosshair: %s", "container.cgm.attachments": "Baguhin ang Mga Attachment", "container.cgm.attachments.window_help": "I-click upang Ilipat at I-rotate", - "slot.cgm.attachment.not_applicable": "§cHindi maaari", - "slot.cgm.attachment.scope": "Saklaw", - "slot.cgm.attachment.barrel": "Bariles", - "slot.cgm.attachment.stock": "Stock", - "slot.cgm.attachment.under_barrel": "Sa Ilalim ng Bariles", - "enchantment.cgm.quick_hands": "Mabilis na mga Kamay", - "enchantment.cgm.trigger_finger": "Darili ng Trigger", - "enchantment.cgm.lightweight": "Magaan ang Timbang", - "enchantment.cgm.collateral": "Collateral", - "enchantment.cgm.over_capacity": "Over Capacity", - "enchantment.cgm.reclaimed": "Na-reclaim", + "container.cgm.workbench": "Workbench", + "death.attack.cgm.bullet.annihilated": "%1$s ay nilipol ng %2$s", + "death.attack.cgm.bullet.decimated": "%1$s ay nasira ng %2$s", + "death.attack.cgm.bullet.eliminated": "%1$s ay inalis ng %2$s", + "death.attack.cgm.bullet.executed": "%1$s ay pinaandar ni %2$s", + "death.attack.cgm.bullet.killed": "%1$s ay ibinaba ni %2$s", + "effect.cgm.blinded": "Nabulag", + "effect.cgm.deafened": "Nabingi", "enchantment.cgm.accelerator": "Accelerator", - "enchantment.cgm.puncturing": "Pagbubutas", + "enchantment.cgm.accelerator.desc": "Pinapataas ang bilis ng mga pinaputok na projectiles na nagdudulot sa kanila ng mas maraming pinsala", + "enchantment.cgm.collateral": "Collateral", + "enchantment.cgm.collateral.desc": "Ginagawa ang mga pinaputok na bala na dumaan sa maraming entity", "enchantment.cgm.fire_starter": "Nagsisimula ng Apoy", - "enchantment.cgm.quick_hands.desc": "", - "enchantment.cgm.trigger_finger.desc": "Pinapataas ang bilis ng pag-reload ng mga armas", + "enchantment.cgm.fire_starter.desc": "Ang mga pinaputok na bala ay magpapaputok ng mga bloke at entity kapag natamaan", + "enchantment.cgm.lightweight": "Magaan ang Timbang", "enchantment.cgm.lightweight.desc": "Binabawasan ang bigat ng isang armas upang mapataas ang bilis ng ADS", - "enchantment.cgm.collateral.desc": "Ginagawa ang mga pinaputok na bala na dumaan sa maraming entity", + "enchantment.cgm.over_capacity": "Over Capacity", "enchantment.cgm.over_capacity.desc": "Pinapataas ang kapasidad ng ammo ng isang armas", - "enchantment.cgm.reclaimed.desc": "Lumilikha ng pagkakataon na ang isang bala ay hindi matupok sa pagpapaputok ng armas", - "enchantment.cgm.accelerator.desc": "Pinapataas ang bilis ng mga pinaputok na projectiles na nagdudulot sa kanila ng mas maraming pinsala", + "enchantment.cgm.puncturing": "Pagbubutas", "enchantment.cgm.puncturing.desc": "Lumilikha ng isang pagkakataon na ang isang bala ay haharapin ang kritikal na pinsala", - "enchantment.cgm.fire_starter.desc": "Ang mga pinaputok na bala ay magpapaputok ng mga bloke at entity kapag natamaan", - "perk.cgm.title": "Perks:", - "perk.cgm.entry.positive": "+ %s", + "enchantment.cgm.quick_hands": "Mabilis na mga Kamay", + "enchantment.cgm.quick_hands.desc": "", + "enchantment.cgm.reclaimed": "Na-reclaim", + "enchantment.cgm.reclaimed.desc": "Lumilikha ng pagkakataon na ang isang bala ay hindi matupok sa pagpapaputok ng armas", + "enchantment.cgm.trigger_finger": "Darili ng Trigger", + "enchantment.cgm.trigger_finger.desc": "Pinapataas ang bilis ng pag-reload ng mga armas", + "gui.cgm.assemble": "Magtipon", + "gui.cgm.show_remaining": "Ipakita ang Natitira", + "gui.cgm.workbench.assemble": "Magtipon", + "gui.cgm.workbench.show_remaining": "Ipakita ang Natitira", + "gui.cgm.workbench.tab.ammo": "Bala", + "gui.cgm.workbench.tab.attachments": "Mga Kalakip", + "gui.cgm.workbench.tab.misc": "Miscellaneous", + "gui.cgm.workbench.tab.weapons": "Mga Sandata", + "info.cgm.ammo": "Bala: %s", + "info.cgm.ammo_type": "Uri ng Bala: %s", + "info.cgm.attachment_help": "Pindutin ang %s in-game para sa mga attachment", + "info.cgm.damage": "Pinsala: %s", + "info.cgm.ignore_ammo": "Walang Hanggang Bala", + "item.cgm.advanced_bullet": "Advanced na Bala", + "item.cgm.assault_rifle": "Assault Riple", + "item.cgm.basic_bullet": "Pangunahing Bala", + "item.cgm.bazooka": "Basuka", + "item.cgm.grenade": "Grenada", + "item.cgm.grenade_launcher": "Grenada Launcher", + "item.cgm.heavy_rifle": "Malakas Riple", + "item.cgm.light_grip": "Magaan na Pagkakahawak", + "item.cgm.light_stock": "Magaan na Stock", + "item.cgm.long_scope": "Mahabang Saklaw", + "item.cgm.machine_pistol": "Makina Pistola", + "item.cgm.medium_scope": "Katamtamang Saklaw", + "item.cgm.mini_gun": "Minigun", + "item.cgm.missile": "Misil", + "item.cgm.pistol": "Pistola", + "item.cgm.rifle": "Riple", + "item.cgm.shell": "Punlo", + "item.cgm.short_scope": "Maikling Saklaw", + "item.cgm.shotgun": "Syotgun", + "item.cgm.silencer": "Silencer", + "item.cgm.sniper_rifle": "Sniper Riple", + "item.cgm.specialised_grip": "Espesyal na Pagkakahawak", + "item.cgm.stun_grenade": "Bombang Pampatigil", + "item.cgm.tactical_stock": "Taktikal na Stock", + "item.cgm.weighted_stock": "Timbang na Stock", + "item.minecraft.lingering_potion.effect.blinding": "Tumatagal na Gayuma ng Nakakabulag", + "item.minecraft.lingering_potion.effect.deafening": "Tumatagal na Gayuma ng Nakakabingi", + "item.minecraft.potion.effect.blinding": "Gayuma ng Nakakabulag", + "item.minecraft.potion.effect.deafening": "Gayuma ng Nakakabingi", + "itemGroup.cgm": "MrCrayfish's Gun Mod", + "key.categories.cgm": "MrCrayfish's Gun Mod", + "key.cgm.attachments": "Baguhin ang mga Attachment", + "key.cgm.reload": "Magkarga", + "key.cgm.unload": "Magdiskarga", + "minecraft.crosshair.default": "Default", + "perk.cgm.additional_damage.negative": "Negatibong Pinsala §r(§l-%s ♥§r)", + "perk.cgm.additional_damage.positive": "Karagdagang Pinsala §r(§l+%s ♥§r)", + "perk.cgm.ads_speed.negative": "Binawasan ang Bilis ng ADS", + "perk.cgm.ads_speed.positive": "Tumaas na Bilis ng ADS", "perk.cgm.entry.negative": "- %s", - "perk.cgm.fire_volume.positive": "Mas Tahimik na Tunog ng Paputukan", + "perk.cgm.entry.positive": "+ %s", "perk.cgm.fire_volume.negative": "Mas Malakas na Tunog ng Paputukan", - "perk.cgm.silenced.positive": "Pinatahimik", - "perk.cgm.sound_radius.positive": "Pinababang Radius ng Tunog ng Paputukan", - "perk.cgm.sound_radius.negative": "Tumaas na Tunog ng Paputukan Radius", - "perk.cgm.additional_damage.positive": "Karagdagang Pinsala §r(§l+%s ♥§r)", - "perk.cgm.additional_damage.negative": "Negatibong Pinsala §r(§l-%s ♥§r)", - "perk.cgm.modified_damage.positive": "Nadagdagan ang Pinsala ng Armas", + "perk.cgm.fire_volume.positive": "Mas Tahimik na Tunog ng Paputukan", "perk.cgm.modified_damage.negative": "Nabawasan ang Pinsala sa Armas", - "perk.cgm.projectile_speed.positive": "Nadagdagan ang Bilis ng Projectile", + "perk.cgm.modified_damage.positive": "Nadagdagan ang Pinsala ng Armas", + "perk.cgm.projectile_life.negative": "Pinababang Saklaw ng Pinsala", + "perk.cgm.projectile_life.positive": "Tumaas na Saklaw ng Pinsala", "perk.cgm.projectile_speed.negative": "Pinababang Bilis ng Projectile", - "perk.cgm.projectile_spread.positive": "Pinababang Projectile Spread", + "perk.cgm.projectile_speed.positive": "Nadagdagan ang Bilis ng Projectile", "perk.cgm.projectile_spread.negative": "Tumaas na Projectile Spread", - "perk.cgm.projectile_life.positive": "Tumaas na Saklaw ng Pinsala", - "perk.cgm.projectile_life.negative": "Pinababang Saklaw ng Pinsala", - "perk.cgm.recoil.positive": "Nabawasang Recoil", - "perk.cgm.recoil.negative": "Tumaas na Recoil", - "perk.cgm.ads_speed.positive": "Tumaas na Bilis ng ADS", - "perk.cgm.ads_speed.negative": "Binawasan ang Bilis ng ADS", - "perk.cgm.rate.positive": "Tumaas na Rate ng Sunog", + "perk.cgm.projectile_spread.positive": "Pinababang Projectile Spread", "perk.cgm.rate.negative": "Pinababang Rate ng Sunog", - "gui.cgm.assemble": "Magtipon", - "gui.cgm.show_remaining": "Ipakita ang Natitira", - "button.categories.cgm": "MrCrayfish's Gun Mod", - "cgm.button.shoot": "Shoot Weapon", - "cgm.button.aim": "Layunin Down Sight", - "cgm.button.reload": "I-reload / I-unload", - "cgm.button.attachments": "Baguhin ang Mga Attachment", - "cgm.button.steadyAim": "Panay na Layunin", - "cgm.category.workbench.title": "Assembling", - "cgm.category.workbench.materials": "Materials", - "cgm.action.aim": "Aim", - "cgm.action.shoot": "Shoot", - "cgm.action.reload": "Reload", - "cgm.action.steady_aim": "Steady Aim", - "cgm.options.crosshair.format": "Crosshair: %s" + "perk.cgm.rate.positive": "Tumaas na Rate ng Sunog", + "perk.cgm.recoil.negative": "Tumaas na Recoil", + "perk.cgm.recoil.positive": "Nabawasang Recoil", + "perk.cgm.silenced.positive": "Pinatahimik", + "perk.cgm.sound_radius.negative": "Tumaas na Tunog ng Paputukan Radius", + "perk.cgm.sound_radius.positive": "Pinababang Radius ng Tunog ng Paputukan", + "perk.cgm.title": "Perks:", + "slot.cgm.attachment.barrel": "Bariles", + "slot.cgm.attachment.not_applicable": "§cHindi maaari", + "slot.cgm.attachment.scope": "Saklaw", + "slot.cgm.attachment.stock": "Stock", + "slot.cgm.attachment.under_barrel": "Sa Ilalim ng Bariles", + "subtitle.cgm.attach": "Kalakip na Kalakip", + "subtitle.cgm.cock": "Cocking Weapon", + "subtitle.cgm.fire": "Putok ng Baril", + "subtitle.cgm.fire.enchanted": "Enchanted Gunfire", + "subtitle.cgm.fire.silenced": "Pinatahimik na Putok ng Baril", + "subtitle.cgm.grenade.pin": "Pin ng Granada", + "subtitle.cgm.reload": "Nagre-reload", + "subtitle.cgm.stun.explosion": "Pagsabog ng Bombang Pampatigil", + "subtitle.cgm.stun.ring": "Nagri-ring" } \ No newline at end of file diff --git a/src/main/resources/assets/cgm/lang/fr_fr.json b/src/main/resources/assets/cgm/lang/fr_fr.json index 9a2ac8f78..a15b1f1dc 100644 --- a/src/main/resources/assets/cgm/lang/fr_fr.json +++ b/src/main/resources/assets/cgm/lang/fr_fr.json @@ -1,69 +1,21 @@ { "block.cgm.workbench": "Workbench", - "item.cgm.pistol": "Pistol", - "item.cgm.shotgun": "Shotgun", - "item.cgm.sniper_rifle": "Sniper Rifle", - "item.cgm.grenade_launcher": "Grenade Launcher", - "item.cgm.bazooka": "Bazooka", - "item.cgm.mini_gun": "Minigun", - "item.cgm.rifle": "Rifle", - "item.cgm.assault_rifle": "Assault Rifle", - "item.cgm.machine_pistol": "Machine Pistol", - "item.cgm.heavy_rifle": "Heavy Rifle", - "item.cgm.basic_bullet": "Basic Bullet", - "item.cgm.advanced_bullet": "Advanced Bullet", - "item.cgm.shell": "Shell", - "item.cgm.grenade": "Grenade", - "item.cgm.stun_grenade": "Stun Grenade", - "item.cgm.missile": "Missile", - "item.cgm.short_scope": "Short Scope", - "item.cgm.medium_scope": "Medium Scope", - "item.cgm.long_scope": "Long Scope", - "item.cgm.silencer": "Silencer", - "item.cgm.light_stock": "Light Stock", - "item.cgm.tactical_stock": "Tactical Stock", - "item.cgm.weighted_stock": "Weighted Stock", - "item.cgm.light_grip": "Light Grip", - "item.cgm.specialised_grip": "Specialised Grip", - "item.minecraft.potion.effect.blinding": "Potion of Blinding", - "item.minecraft.potion.effect.deafening": "Potion of Deafening", - "item.minecraft.lingering_potion.effect.blinding": "Lingering Potion of Blinding", - "item.minecraft.lingering_potion.effect.deafening": "Lingering Potion of Deafening", - "itemGroup.cgm": "MrCrayfish's Gun Mod", - "death.attack.cgm.bullet.killed": "%1$s a été abattu par %2$s", - "death.attack.cgm.bullet.eliminated": "%1$s a été éliminé par %2$s", - "death.attack.cgm.bullet.executed": "%1$s a été exécuté par %2$s", - "death.attack.cgm.bullet.annihilated": "%1$s a été annihilé par %2$s", - "death.attack.cgm.bullet.decimated": "%1$s a été decimé par %2$s", - "info.cgm.damage": "Dommages: %s", - "info.cgm.ignore_ammo": "Munitions Infinies", - "info.cgm.ammo": "Munitions: %s", - "info.cgm.ammo_type": "Ammo Type: %s", - "info.cgm.attachment_help": "Press %s in-game for Attachments", - "key.categories.cgm": "MrCrayfish's Gun Mod", - "key.cgm.reload": "Reload", - "key.cgm.unload": "Unload", - "key.cgm.attachments": "Modify Attachments", - "effect.cgm.blinded": "Aveuglé", - "effect.cgm.deafened": "Assourdi", - "subtitle.cgm.stun.explosion": "Explosion de grenade étourdissante", - "subtitle.cgm.stun.ring": "Résonance", - "subtitle.cgm.fire": "Coup de Feu", - "subtitle.cgm.fire.silenced": "Coup de feu étouffé", - "subtitle.cgm.fire.enchanted": "Enchanted Gunfire", - "subtitle.cgm.reload": "Rechargement", - "subtitle.cgm.grenade.pin": "Grenade Pin", - "subtitle.cgm.attach": "Attachment Attach", - "subtitle.cgm.cock": "Cocking Weapon", - "cgm.option_list.no_items": "No Items", - "cgm.options.adsSensitivity": "ADS Sensitivity", - "cgm.options.adsSensitivity.format": "ADS Sensitivity: %s", - "cgm.options.crosshair": "Crosshair", + "button.categories.cgm": "MrCrayfish's Gun Mod", + "cgm.action.aim": "Aim", + "cgm.action.reload": "Reload", + "cgm.action.shoot": "Shoot", + "cgm.action.steady_aim": "Steady Aim", + "cgm.button.aim": "Aim Down Sight", + "cgm.button.attachments": "Modify Attachments", + "cgm.button.reload": "Reload / Unload", + "cgm.button.shoot": "Shoot Weapon", + "cgm.button.steadyAim": "Steady Aim", + "cgm.category.workbench.materials": "Materials", + "cgm.category.workbench.title": "Assembling", "cgm.crosshair.arrow": "Arrow", "cgm.crosshair.better_default": "Better Default", "cgm.crosshair.box": "Box", "cgm.crosshair.circle": "Circle", - "minecraft.crosshair.default": "Default", "cgm.crosshair.dot": "Dot", "cgm.crosshair.filled_circle": "Filled Circle", "cgm.crosshair.hit_marker": "Hit Marker", @@ -73,74 +25,122 @@ "cgm.crosshair.square": "Square", "cgm.crosshair.t": "T", "cgm.crosshair.tech": "Tech", - "gui.cgm.workbench.assemble": "Assemble", - "gui.cgm.workbench.show_remaining": "Show Remaining", - "gui.cgm.workbench.tab.weapons": "Weapons", - "gui.cgm.workbench.tab.attachments": "Attachments", - "gui.cgm.workbench.tab.ammo": "Ammo", - "gui.cgm.workbench.tab.misc": "Miscellaneous", - "container.cgm.workbench": "Workbench", + "cgm.option_list.no_items": "No Items", + "cgm.options.adsSensitivity": "ADS Sensitivity", + "cgm.options.adsSensitivity.format": "ADS Sensitivity: %s", + "cgm.options.crosshair": "Crosshair", "container.cgm.attachments": "Modify Attachments", "container.cgm.attachments.window_help": "Click to move and rotate", - "slot.cgm.attachment.not_applicable": "§cNot applicable", - "slot.cgm.attachment.scope": "Scope", - "slot.cgm.attachment.barrel": "Barrel", - "slot.cgm.attachment.stock": "Stock", - "slot.cgm.attachment.under_barrel": "Under Barrel", - "enchantment.cgm.quick_hands": "Quick Hands", - "enchantment.cgm.trigger_finger": "Trigger Finger", - "enchantment.cgm.lightweight": "Lightweight", - "enchantment.cgm.collateral": "Collateral", - "enchantment.cgm.over_capacity": "Over Capacity", - "enchantment.cgm.reclaimed": "Reclaimed", + "container.cgm.workbench": "Workbench", + "death.attack.cgm.bullet.annihilated": "%1$s a été annihilé par %2$s", + "death.attack.cgm.bullet.decimated": "%1$s a été decimé par %2$s", + "death.attack.cgm.bullet.eliminated": "%1$s a été éliminé par %2$s", + "death.attack.cgm.bullet.executed": "%1$s a été exécuté par %2$s", + "death.attack.cgm.bullet.killed": "%1$s a été abattu par %2$s", + "effect.cgm.blinded": "Aveuglé", + "effect.cgm.deafened": "Assourdi", "enchantment.cgm.accelerator": "Accelerator", - "enchantment.cgm.puncturing": "Puncturing", + "enchantment.cgm.accelerator.desc": "Increases the speed of fired projectiles causing them to do more damage", + "enchantment.cgm.collateral": "Collateral", + "enchantment.cgm.collateral.desc": "Makes fired bullets travel through multiple entities", "enchantment.cgm.fire_starter": "Fire Starter", - "enchantment.cgm.quick_hands.desc": "Increases the speed of reloading weapons", - "enchantment.cgm.trigger_finger.desc": "Increases the speed you can fire weapons", + "enchantment.cgm.fire_starter.desc": "Fired bullets will set blocks and entities on fire upon impact", + "enchantment.cgm.lightweight": "Lightweight", "enchantment.cgm.lightweight.desc": "Reduces the weight of a weapon to increase ADS speed", - "enchantment.cgm.collateral.desc": "Makes fired bullets travel through multiple entities", + "enchantment.cgm.over_capacity": "Over Capacity", "enchantment.cgm.over_capacity.desc": "Increases the ammo capacity of a weapon", - "enchantment.cgm.reclaimed.desc": "Creates a chance that a bullet won't be consumed upon firing a weapon", - "enchantment.cgm.accelerator.desc": "Increases the speed of fired projectiles causing them to do more damage", + "enchantment.cgm.puncturing": "Puncturing", "enchantment.cgm.puncturing.desc": "Creates a chance that a bullet will deal critical damage", - "enchantment.cgm.fire_starter.desc": "Fired bullets will set blocks and entities on fire upon impact", - "perk.cgm.title": "Perks:", - "perk.cgm.entry.positive": "+ %s", + "enchantment.cgm.quick_hands": "Quick Hands", + "enchantment.cgm.quick_hands.desc": "Increases the speed of reloading weapons", + "enchantment.cgm.reclaimed": "Reclaimed", + "enchantment.cgm.reclaimed.desc": "Creates a chance that a bullet won't be consumed upon firing a weapon", + "enchantment.cgm.trigger_finger": "Trigger Finger", + "enchantment.cgm.trigger_finger.desc": "Increases the speed you can fire weapons", + "gui.cgm.assemble": "Assemble", + "gui.cgm.show_remaining": "Show Remaining", + "gui.cgm.workbench.assemble": "Assemble", + "gui.cgm.workbench.show_remaining": "Show Remaining", + "gui.cgm.workbench.tab.ammo": "Ammo", + "gui.cgm.workbench.tab.attachments": "Attachments", + "gui.cgm.workbench.tab.misc": "Miscellaneous", + "gui.cgm.workbench.tab.weapons": "Weapons", + "info.cgm.ammo": "Munitions: %s", + "info.cgm.ammo_type": "Ammo Type: %s", + "info.cgm.attachment_help": "Press %s in-game for Attachments", + "info.cgm.damage": "Dommages: %s", + "info.cgm.ignore_ammo": "Munitions Infinies", + "item.cgm.advanced_bullet": "Advanced Bullet", + "item.cgm.assault_rifle": "Assault Rifle", + "item.cgm.basic_bullet": "Basic Bullet", + "item.cgm.bazooka": "Bazooka", + "item.cgm.grenade": "Grenade", + "item.cgm.grenade_launcher": "Grenade Launcher", + "item.cgm.heavy_rifle": "Heavy Rifle", + "item.cgm.light_grip": "Light Grip", + "item.cgm.light_stock": "Light Stock", + "item.cgm.long_scope": "Long Scope", + "item.cgm.machine_pistol": "Machine Pistol", + "item.cgm.medium_scope": "Medium Scope", + "item.cgm.mini_gun": "Minigun", + "item.cgm.missile": "Missile", + "item.cgm.pistol": "Pistol", + "item.cgm.rifle": "Rifle", + "item.cgm.shell": "Shell", + "item.cgm.short_scope": "Short Scope", + "item.cgm.shotgun": "Shotgun", + "item.cgm.silencer": "Silencer", + "item.cgm.sniper_rifle": "Sniper Rifle", + "item.cgm.specialised_grip": "Specialised Grip", + "item.cgm.stun_grenade": "Stun Grenade", + "item.cgm.tactical_stock": "Tactical Stock", + "item.cgm.weighted_stock": "Weighted Stock", + "item.minecraft.lingering_potion.effect.blinding": "Lingering Potion of Blinding", + "item.minecraft.lingering_potion.effect.deafening": "Lingering Potion of Deafening", + "item.minecraft.potion.effect.blinding": "Potion of Blinding", + "item.minecraft.potion.effect.deafening": "Potion of Deafening", + "itemGroup.cgm": "MrCrayfish's Gun Mod", + "key.categories.cgm": "MrCrayfish's Gun Mod", + "key.cgm.attachments": "Modify Attachments", + "key.cgm.reload": "Reload", + "key.cgm.unload": "Unload", + "minecraft.crosshair.default": "Default", + "perk.cgm.additional_damage.negative": "Negative Damage §r(§l-%s ♥§r)", + "perk.cgm.additional_damage.positive": "Additional Damage §r(§l+%s ♥§r)", + "perk.cgm.ads_speed.negative": "Reduced ADS Speed", + "perk.cgm.ads_speed.positive": "Increased ADS Speed", "perk.cgm.entry.negative": "- %s", - "perk.cgm.fire_volume.positive": "Quieter Fire Sound", + "perk.cgm.entry.positive": "+ %s", "perk.cgm.fire_volume.negative": "Louder Fire Sound", - "perk.cgm.silenced.positive": "Silenced", - "perk.cgm.sound_radius.positive": "Reduced Fire Sound Radius", - "perk.cgm.sound_radius.negative": "Increased Fire Sound Radius", - "perk.cgm.additional_damage.positive": "Additional Damage §r(§l+%s ♥§r)", - "perk.cgm.additional_damage.negative": "Negative Damage §r(§l-%s ♥§r)", - "perk.cgm.modified_damage.positive": "Increased Weapon Damage", + "perk.cgm.fire_volume.positive": "Quieter Fire Sound", "perk.cgm.modified_damage.negative": "Reduced Weapon Damage", - "perk.cgm.projectile_speed.positive": "Increased Projectile Speed", + "perk.cgm.modified_damage.positive": "Increased Weapon Damage", + "perk.cgm.projectile_life.negative": "Reduced Damage Range", + "perk.cgm.projectile_life.positive": "Increased Damage Range", "perk.cgm.projectile_speed.negative": "Reduced Projectile Speed", - "perk.cgm.projectile_spread.positive": "Reduced Projectile Spread", + "perk.cgm.projectile_speed.positive": "Increased Projectile Speed", "perk.cgm.projectile_spread.negative": "Increased Projectile Spread", - "perk.cgm.projectile_life.positive": "Increased Damage Range", - "perk.cgm.projectile_life.negative": "Reduced Damage Range", - "perk.cgm.recoil.positive": "Reduced Recoil", - "perk.cgm.recoil.negative": "Increased Recoil", - "perk.cgm.ads_speed.positive": "Increased ADS Speed", - "perk.cgm.ads_speed.negative": "Reduced ADS Speed", - "perk.cgm.rate.positive": "Increased Fire Rate", + "perk.cgm.projectile_spread.positive": "Reduced Projectile Spread", "perk.cgm.rate.negative": "Reduced Fire Rate", - "gui.cgm.assemble": "Assemble", - "gui.cgm.show_remaining": "Show Remaining", - "button.categories.cgm": "MrCrayfish's Gun Mod", - "cgm.button.shoot": "Shoot Weapon", - "cgm.button.aim": "Aim Down Sight", - "cgm.button.reload": "Reload / Unload", - "cgm.button.attachments": "Modify Attachments", - "cgm.button.steadyAim": "Steady Aim", - "cgm.category.workbench.title": "Assembling", - "cgm.category.workbench.materials": "Materials", - "cgm.action.aim": "Aim", - "cgm.action.shoot": "Shoot", - "cgm.action.reload": "Reload", - "cgm.action.steady_aim": "Steady Aim" + "perk.cgm.rate.positive": "Increased Fire Rate", + "perk.cgm.recoil.negative": "Increased Recoil", + "perk.cgm.recoil.positive": "Reduced Recoil", + "perk.cgm.silenced.positive": "Silenced", + "perk.cgm.sound_radius.negative": "Increased Fire Sound Radius", + "perk.cgm.sound_radius.positive": "Reduced Fire Sound Radius", + "perk.cgm.title": "Perks:", + "slot.cgm.attachment.barrel": "Barrel", + "slot.cgm.attachment.not_applicable": "§cNot applicable", + "slot.cgm.attachment.scope": "Scope", + "slot.cgm.attachment.stock": "Stock", + "slot.cgm.attachment.under_barrel": "Under Barrel", + "subtitle.cgm.attach": "Attachment Attach", + "subtitle.cgm.cock": "Cocking Weapon", + "subtitle.cgm.fire": "Coup de Feu", + "subtitle.cgm.fire.enchanted": "Enchanted Gunfire", + "subtitle.cgm.fire.silenced": "Coup de feu étouffé", + "subtitle.cgm.grenade.pin": "Grenade Pin", + "subtitle.cgm.reload": "Rechargement", + "subtitle.cgm.stun.explosion": "Explosion de grenade étourdissante", + "subtitle.cgm.stun.ring": "Résonance" } \ No newline at end of file diff --git a/src/main/resources/assets/cgm/lang/it_it.json b/src/main/resources/assets/cgm/lang/it_it.json index 4f4c1b42f..e2972ca74 100644 --- a/src/main/resources/assets/cgm/lang/it_it.json +++ b/src/main/resources/assets/cgm/lang/it_it.json @@ -1,69 +1,21 @@ { "block.cgm.workbench": "Banco da lavoro", - "item.cgm.pistol": "Pistola", - "item.cgm.shotgun": "Fucile a pompa", - "item.cgm.sniper_rifle": "Fucile di precisione", - "item.cgm.grenade_launcher": "Lanciagranate", - "item.cgm.bazooka": "Bazooka", - "item.cgm.mini_gun": "Minigun", - "item.cgm.rifle": "Fucile", - "item.cgm.assault_rifle": "Fucile d'assalto", - "item.cgm.machine_pistol": "Mitraglietta", - "item.cgm.heavy_rifle": "Fucile pesante", - "item.cgm.basic_bullet": "Proiettile base", - "item.cgm.advanced_bullet": "Proiettile avanzato", - "item.cgm.shell": "Bossolo", - "item.cgm.grenade": "Granata", - "item.cgm.stun_grenade": "Granata stordente", - "item.cgm.missile": "Missile", - "item.cgm.short_scope": "Mirino corto", - "item.cgm.medium_scope": "Mirino medio", - "item.cgm.long_scope": "Mirino lungo", - "item.cgm.silencer": "Silenziatore", - "item.cgm.light_stock": "Cassa leggera", - "item.cgm.tactical_stock": "Cassa tattica", - "item.cgm.weighted_stock": "Cassa ponderata", - "item.cgm.light_grip": "Impugnatura leggera", - "item.cgm.specialised_grip": "Impugnatura specialistica", - "item.minecraft.potion.effect.blinding": "Pozione di cecità", - "item.minecraft.potion.effect.deafening": "Pozione di sordità", - "item.minecraft.lingering_potion.effect.blinding": "Pozione persistente di cecità", - "item.minecraft.lingering_potion.effect.deafening": "Pozione persistente di sordità", - "itemGroup.cgm": "MrCrayfish's Gun Mod", - "death.attack.cgm.bullet.killed": "%1$s è stato abbattuto da %2$s", - "death.attack.cgm.bullet.eliminated": "%1$s è stato eliminato da %2$s", - "death.attack.cgm.bullet.executed": "%1$s è stato giustiziato da %2$s", - "death.attack.cgm.bullet.annihilated": "%1$s è stato annientato da %2$s", - "death.attack.cgm.bullet.decimated": "%1$s è stato decimato da %2$s", - "info.cgm.damage": "Danno: %s", - "info.cgm.ignore_ammo": "Munizioni infinite", - "info.cgm.ammo": "Munizioni: %s", - "info.cgm.ammo_type": "Tipo munizioni: %s", - "info.cgm.attachment_help": "Premi %s per gli accessori", - "key.categories.cgm": "MrCrayfish's Gun Mod", - "key.cgm.reload": "Ricarica", - "key.cgm.unload": "Scarica", - "key.cgm.attachments": "Modifica accessori", - "effect.cgm.blinded": "Cecità", - "effect.cgm.deafened": "Sordità", - "subtitle.cgm.stun.explosion": "Esplosione granata stordente", - "subtitle.cgm.stun.ring": "Assordamento", - "subtitle.cgm.fire": "Sparo", - "subtitle.cgm.fire.silenced": "Sparo silenziato", - "subtitle.cgm.fire.enchanted": "Enchanted Gunfire", - "subtitle.cgm.reload": "Ricarica in corso...", - "subtitle.cgm.grenade.pin": "Anello granata", - "subtitle.cgm.attach": "Collegamento accessorio...", - "subtitle.cgm.cock": "Cocking Weapon", - "cgm.option_list.no_items": "Nessun oggetto", - "cgm.options.adsSensitivity": "Sensibilità ADS", - "cgm.options.adsSensitivity.format": "Sensibilità ADS: %s", - "cgm.options.crosshair": "Crosshair", + "button.categories.cgm": "MrCrayfish's Gun Mod", + "cgm.action.aim": "Aim", + "cgm.action.reload": "Reload", + "cgm.action.shoot": "Shoot", + "cgm.action.steady_aim": "Steady Aim", + "cgm.button.aim": "Mira a vista", + "cgm.button.attachments": "Modifica accessori", + "cgm.button.reload": "Carica/scarica", + "cgm.button.shoot": "Spara", + "cgm.button.steadyAim": "Mira stabile", + "cgm.category.workbench.materials": "Materials", + "cgm.category.workbench.title": "Assembling", "cgm.crosshair.arrow": "Freccia", "cgm.crosshair.better_default": "Standard migliore", "cgm.crosshair.box": "Scatola", "cgm.crosshair.circle": "Circolare", - "minecraft.crosshair.default": "Standard", "cgm.crosshair.dot": "Puntino", "cgm.crosshair.filled_circle": "Circolare riempito", "cgm.crosshair.hit_marker": "Indicatore colpo", @@ -73,74 +25,122 @@ "cgm.crosshair.square": "Quadrato", "cgm.crosshair.t": "T", "cgm.crosshair.tech": "Tecnologico", - "gui.cgm.workbench.assemble": "Assembla", - "gui.cgm.workbench.show_remaining": "Mostra rimanenti", - "gui.cgm.workbench.tab.weapons": "Armi", - "gui.cgm.workbench.tab.attachments": "Accessori", - "gui.cgm.workbench.tab.ammo": "Munizioni", - "gui.cgm.workbench.tab.misc": "Vari", - "container.cgm.workbench": "Tavolo da lavoro", + "cgm.option_list.no_items": "Nessun oggetto", + "cgm.options.adsSensitivity": "Sensibilità ADS", + "cgm.options.adsSensitivity.format": "Sensibilità ADS: %s", + "cgm.options.crosshair": "Crosshair", "container.cgm.attachments": "Modifica accessori", "container.cgm.attachments.window_help": "Clicca per muovere e ruotare", - "slot.cgm.attachment.not_applicable": "§cNon applicabile", - "slot.cgm.attachment.scope": "Mirino", - "slot.cgm.attachment.barrel": "Fusto", - "slot.cgm.attachment.stock": "Cassa", - "slot.cgm.attachment.under_barrel": "Sottocassa", - "enchantment.cgm.quick_hands": "Mano lesta", - "enchantment.cgm.trigger_finger": "Dito lesto", - "enchantment.cgm.lightweight": "Leggerezza", - "enchantment.cgm.collateral": "Colpo infinito", - "enchantment.cgm.over_capacity": "Sovracapacità", - "enchantment.cgm.reclaimed": "Riciclaggio", + "container.cgm.workbench": "Tavolo da lavoro", + "death.attack.cgm.bullet.annihilated": "%1$s è stato annientato da %2$s", + "death.attack.cgm.bullet.decimated": "%1$s è stato decimato da %2$s", + "death.attack.cgm.bullet.eliminated": "%1$s è stato eliminato da %2$s", + "death.attack.cgm.bullet.executed": "%1$s è stato giustiziato da %2$s", + "death.attack.cgm.bullet.killed": "%1$s è stato abbattuto da %2$s", + "effect.cgm.blinded": "Cecità", + "effect.cgm.deafened": "Sordità", "enchantment.cgm.accelerator": "Accelerazione", - "enchantment.cgm.puncturing": "Perforazione", + "enchantment.cgm.accelerator.desc": "Aumenta la velocità dei proiettili sparati", + "enchantment.cgm.collateral": "Colpo infinito", + "enchantment.cgm.collateral.desc": "I proiettili sparati possono attraversare le entità", "enchantment.cgm.fire_starter": "Piromania", - "enchantment.cgm.quick_hands.desc": "Aumenta la velocità di ricarica delle armi", - "enchantment.cgm.trigger_finger.desc": "Aumenta la velocità con cui spari", + "enchantment.cgm.fire_starter.desc": "I proiettili sparati danno fuoco ai blocchi e alle entità all'impatto", + "enchantment.cgm.lightweight": "Leggerezza", "enchantment.cgm.lightweight.desc": "Riduce il peso di un'arma per aumentare la velocità di ADS", - "enchantment.cgm.collateral.desc": "I proiettili sparati possono attraversare le entità", + "enchantment.cgm.over_capacity": "Sovracapacità", "enchantment.cgm.over_capacity.desc": "Aumenta la capacità di munizioni di un'arma", - "enchantment.cgm.reclaimed.desc": "Aumenta la probabilità di conservare un proiettile dopo lo sparo", - "enchantment.cgm.accelerator.desc": "Aumenta la velocità dei proiettili sparati", + "enchantment.cgm.puncturing": "Perforazione", "enchantment.cgm.puncturing.desc": "Aumenta la probabilità di mettere a segno un colpo critico", - "enchantment.cgm.fire_starter.desc": "I proiettili sparati danno fuoco ai blocchi e alle entità all'impatto", - "perk.cgm.title": "Bonus:", - "perk.cgm.entry.positive": "+ %s", + "enchantment.cgm.quick_hands": "Mano lesta", + "enchantment.cgm.quick_hands.desc": "Aumenta la velocità di ricarica delle armi", + "enchantment.cgm.reclaimed": "Riciclaggio", + "enchantment.cgm.reclaimed.desc": "Aumenta la probabilità di conservare un proiettile dopo lo sparo", + "enchantment.cgm.trigger_finger": "Dito lesto", + "enchantment.cgm.trigger_finger.desc": "Aumenta la velocità con cui spari", + "gui.cgm.assemble": "Assembla", + "gui.cgm.show_remaining": "Mostra rimanenti", + "gui.cgm.workbench.assemble": "Assembla", + "gui.cgm.workbench.show_remaining": "Mostra rimanenti", + "gui.cgm.workbench.tab.ammo": "Munizioni", + "gui.cgm.workbench.tab.attachments": "Accessori", + "gui.cgm.workbench.tab.misc": "Vari", + "gui.cgm.workbench.tab.weapons": "Armi", + "info.cgm.ammo": "Munizioni: %s", + "info.cgm.ammo_type": "Tipo munizioni: %s", + "info.cgm.attachment_help": "Premi %s per gli accessori", + "info.cgm.damage": "Danno: %s", + "info.cgm.ignore_ammo": "Munizioni infinite", + "item.cgm.advanced_bullet": "Proiettile avanzato", + "item.cgm.assault_rifle": "Fucile d'assalto", + "item.cgm.basic_bullet": "Proiettile base", + "item.cgm.bazooka": "Bazooka", + "item.cgm.grenade": "Granata", + "item.cgm.grenade_launcher": "Lanciagranate", + "item.cgm.heavy_rifle": "Fucile pesante", + "item.cgm.light_grip": "Impugnatura leggera", + "item.cgm.light_stock": "Cassa leggera", + "item.cgm.long_scope": "Mirino lungo", + "item.cgm.machine_pistol": "Mitraglietta", + "item.cgm.medium_scope": "Mirino medio", + "item.cgm.mini_gun": "Minigun", + "item.cgm.missile": "Missile", + "item.cgm.pistol": "Pistola", + "item.cgm.rifle": "Fucile", + "item.cgm.shell": "Bossolo", + "item.cgm.short_scope": "Mirino corto", + "item.cgm.shotgun": "Fucile a pompa", + "item.cgm.silencer": "Silenziatore", + "item.cgm.sniper_rifle": "Fucile di precisione", + "item.cgm.specialised_grip": "Impugnatura specialistica", + "item.cgm.stun_grenade": "Granata stordente", + "item.cgm.tactical_stock": "Cassa tattica", + "item.cgm.weighted_stock": "Cassa ponderata", + "item.minecraft.lingering_potion.effect.blinding": "Pozione persistente di cecità", + "item.minecraft.lingering_potion.effect.deafening": "Pozione persistente di sordità", + "item.minecraft.potion.effect.blinding": "Pozione di cecità", + "item.minecraft.potion.effect.deafening": "Pozione di sordità", + "itemGroup.cgm": "MrCrayfish's Gun Mod", + "key.categories.cgm": "MrCrayfish's Gun Mod", + "key.cgm.attachments": "Modifica accessori", + "key.cgm.reload": "Ricarica", + "key.cgm.unload": "Scarica", + "minecraft.crosshair.default": "Standard", + "perk.cgm.additional_damage.negative": "Danno negativo §r(§l-%s ♥§r)", + "perk.cgm.additional_damage.positive": "Danno aggiuntivo §r(§l+%s ♥§r)", + "perk.cgm.ads_speed.negative": "Velocità ADS ridotta", + "perk.cgm.ads_speed.positive": "Velocità ADS aumentata", "perk.cgm.entry.negative": "- %s", - "perk.cgm.fire_volume.positive": "Rumore sparo più silenzioso", + "perk.cgm.entry.positive": "+ %s", "perk.cgm.fire_volume.negative": "Rumore sparo più forte", - "perk.cgm.silenced.positive": "Silenziato", - "perk.cgm.sound_radius.positive": "Raggio rumore sparo ridotto", - "perk.cgm.sound_radius.negative": "Raggio rumore sparo aumentato", - "perk.cgm.additional_damage.positive": "Danno aggiuntivo §r(§l+%s ♥§r)", - "perk.cgm.additional_damage.negative": "Danno negativo §r(§l-%s ♥§r)", - "perk.cgm.modified_damage.positive": "Danno arma aumentato", + "perk.cgm.fire_volume.positive": "Rumore sparo più silenzioso", "perk.cgm.modified_damage.negative": "Danno arma ridotto", - "perk.cgm.projectile_speed.positive": "Velocità proiettile aumentata", + "perk.cgm.modified_damage.positive": "Danno arma aumentato", + "perk.cgm.projectile_life.negative": "Raggio danno ridotto", + "perk.cgm.projectile_life.positive": "Raggio danno aumentato", "perk.cgm.projectile_speed.negative": "Velocità proiettile ridotta", - "perk.cgm.projectile_spread.positive": "Propagazione proiettile ridotta", + "perk.cgm.projectile_speed.positive": "Velocità proiettile aumentata", "perk.cgm.projectile_spread.negative": "Propagazione proiettile aumentata", - "perk.cgm.projectile_life.positive": "Raggio danno aumentato", - "perk.cgm.projectile_life.negative": "Raggio danno ridotto", - "perk.cgm.recoil.positive": "Rinculo ridotto", - "perk.cgm.recoil.negative": "Rinculo aumentato", - "perk.cgm.ads_speed.positive": "Velocità ADS aumentata", - "perk.cgm.ads_speed.negative": "Velocità ADS ridotta", - "perk.cgm.rate.positive": "Cadenza tiro aumentata", + "perk.cgm.projectile_spread.positive": "Propagazione proiettile ridotta", "perk.cgm.rate.negative": "Cadenza tiro ridotta", - "gui.cgm.assemble": "Assembla", - "gui.cgm.show_remaining": "Mostra rimanenti", - "button.categories.cgm": "MrCrayfish's Gun Mod", - "cgm.button.shoot": "Spara", - "cgm.button.aim": "Mira a vista", - "cgm.button.reload": "Carica/scarica", - "cgm.button.attachments": "Modifica accessori", - "cgm.button.steadyAim": "Mira stabile", - "cgm.category.workbench.title": "Assembling", - "cgm.category.workbench.materials": "Materials", - "cgm.action.aim": "Aim", - "cgm.action.shoot": "Shoot", - "cgm.action.reload": "Reload", - "cgm.action.steady_aim": "Steady Aim" + "perk.cgm.rate.positive": "Cadenza tiro aumentata", + "perk.cgm.recoil.negative": "Rinculo aumentato", + "perk.cgm.recoil.positive": "Rinculo ridotto", + "perk.cgm.silenced.positive": "Silenziato", + "perk.cgm.sound_radius.negative": "Raggio rumore sparo aumentato", + "perk.cgm.sound_radius.positive": "Raggio rumore sparo ridotto", + "perk.cgm.title": "Bonus:", + "slot.cgm.attachment.barrel": "Fusto", + "slot.cgm.attachment.not_applicable": "§cNon applicabile", + "slot.cgm.attachment.scope": "Mirino", + "slot.cgm.attachment.stock": "Cassa", + "slot.cgm.attachment.under_barrel": "Sottocassa", + "subtitle.cgm.attach": "Collegamento accessorio...", + "subtitle.cgm.cock": "Cocking Weapon", + "subtitle.cgm.fire": "Sparo", + "subtitle.cgm.fire.enchanted": "Enchanted Gunfire", + "subtitle.cgm.fire.silenced": "Sparo silenziato", + "subtitle.cgm.grenade.pin": "Anello granata", + "subtitle.cgm.reload": "Ricarica in corso...", + "subtitle.cgm.stun.explosion": "Esplosione granata stordente", + "subtitle.cgm.stun.ring": "Assordamento" } \ No newline at end of file diff --git a/src/main/resources/assets/cgm/lang/ja_jp.json b/src/main/resources/assets/cgm/lang/ja_jp.json index 9e29c1c5e..1f6b5a54c 100644 --- a/src/main/resources/assets/cgm/lang/ja_jp.json +++ b/src/main/resources/assets/cgm/lang/ja_jp.json @@ -1,69 +1,24 @@ { "block.cgm.workbench": "作業台", - "item.cgm.pistol": "ピストル", - "item.cgm.shotgun": "ショットガン", - "item.cgm.sniper_rifle": "スナイパーライフル", - "item.cgm.grenade_launcher": "グレネードランチャー", - "item.cgm.bazooka": "バズーカ", - "item.cgm.mini_gun": "ミニガン", - "item.cgm.rifle": "ライフル", - "item.cgm.assault_rifle": "アサルトライフル", - "item.cgm.machine_pistol": "マシンピストル", - "item.cgm.heavy_rifle": "ヘビーライフル", - "item.cgm.basic_bullet": "標準銃弾", - "item.cgm.advanced_bullet": "高級銃弾", - "item.cgm.shell": "シェル", - "item.cgm.grenade": "グレネード", - "item.cgm.stun_grenade": "スタングレネード", - "item.cgm.missile": "ミサイル", - "item.cgm.short_scope": "短距離スコープ", - "item.cgm.medium_scope": "中距離スコープ", - "item.cgm.long_scope": "長距離スコープ", - "item.cgm.silencer": "サイレンサー", - "item.cgm.light_stock": "軽量銃床", - "item.cgm.tactical_stock": "戦術銃床", - "item.cgm.weighted_stock": "重量化銃床", - "item.cgm.light_grip": "軽量グリップ", - "item.cgm.specialised_grip": "専用グリップ", - "item.minecraft.potion.effect.blinding": "目くらましのポーション", - "item.minecraft.potion.effect.deafening": "難聴のポーション", - "item.minecraft.lingering_potion.effect.blinding": "目くらましの残留ポーション", - "item.minecraft.lingering_potion.effect.deafening": "難聴の残留ポーション", - "itemGroup.cgm": "MrCrayfish's Gun Mod", - "death.attack.cgm.bullet.killed": "%1$s は %2$s によって倒された", - "death.attack.cgm.bullet.eliminated": "%1$s は %2$s によって排除された", - "death.attack.cgm.bullet.executed": "%1$s は %2$s によって処刑された", - "death.attack.cgm.bullet.annihilated": "%1$s は %2$s によって絶滅された", - "death.attack.cgm.bullet.decimated": "%1$s は %2$s によって破壊された", - "info.cgm.damage": "ダメージ: %s", - "info.cgm.ignore_ammo": "弾薬無制限", - "info.cgm.ammo": "弾薬: %s", - "info.cgm.ammo_type": "弾薬タイプ: %s", - "info.cgm.attachment_help": "%s を押してアタッチメントを表示", - "key.categories.cgm": "MrCrayfish's Gun Mod", - "key.cgm.reload": "リロード", - "key.cgm.unload": "アンロード", - "key.cgm.attachments": "アタッチメントの変更", - "effect.cgm.blinded": "目くらまし", - "effect.cgm.deafened": "難聴", - "subtitle.cgm.stun.explosion": "スタングレネードの爆発", - "subtitle.cgm.stun.ring": "耳鳴り", - "subtitle.cgm.fire": "発砲音", - "subtitle.cgm.fire.silenced": "静かな発砲音", - "subtitle.cgm.fire.enchanted": "エンチャントされた発砲音", - "subtitle.cgm.reload": "リローディング", - "subtitle.cgm.grenade.pin": "グレネードピン", - "subtitle.cgm.attach": "アタッチメントの装着", - "subtitle.cgm.cock": "武器のコッキング", - "cgm.option_list.no_items": "アイテムなし", - "cgm.options.adsSensitivity": "ADS感度", - "cgm.options.adsSensitivity.format": "ADS感度: %s", - "cgm.options.crosshair": "クロスヘア", + "button.categories.cgm": "MrCrayfish's Gun Mod", + "cgm.action.aim": "照準", + "cgm.action.reload": "リロード", + "cgm.action.shoot": "発射", + "cgm.action.steady_aim": "安定照準", + "cgm.button.aim": "照準", + "cgm.button.attachments": "アタッチメントの変更", + "cgm.button.config.tooltip": "構成設定", + "cgm.button.reload": "リロード / アンロード", + "cgm.button.shoot": "発射", + "cgm.button.steadyAim": "安定照準", + "cgm.category.workbench.materials": "材料", + "cgm.category.workbench.title": "製作", + "cgm.chat.install_configured": "構成設定にアクセスするために %s をインストール", + "cgm.chat.open_curseforge_page": "CurseForgeを開く", "cgm.crosshair.arrow": "矢印", "cgm.crosshair.better_default": "ベターデフォルト", "cgm.crosshair.box": "ボックス", "cgm.crosshair.circle": "円", - "minecraft.crosshair.default": "デフォルト", "cgm.crosshair.dot": "点", "cgm.crosshair.filled_circle": "黒円", "cgm.crosshair.hit_marker": "ヒットマーカー", @@ -73,77 +28,122 @@ "cgm.crosshair.square": "四角形", "cgm.crosshair.t": "T字", "cgm.crosshair.tech": "テック", - "gui.cgm.workbench.assemble": "作る", - "gui.cgm.workbench.show_remaining": "不足材料のみ表示", - "gui.cgm.workbench.tab.weapons": "武器", - "gui.cgm.workbench.tab.attachments": "アタッチメント", - "gui.cgm.workbench.tab.ammo": "弾薬", - "gui.cgm.workbench.tab.misc": "その他", - "container.cgm.workbench": "作業台", + "cgm.option_list.no_items": "アイテムなし", + "cgm.options.adsSensitivity": "ADS感度", + "cgm.options.adsSensitivity.format": "ADS感度: %s", + "cgm.options.crosshair": "クロスヘア", "container.cgm.attachments": "アタッチメントの変更", "container.cgm.attachments.window_help": "クリックして移動・回転", - "slot.cgm.attachment.not_applicable": "\u00a7c適用不可", - "slot.cgm.attachment.scope": "スコープ", - "slot.cgm.attachment.barrel": "バレル", - "slot.cgm.attachment.stock": "ストック", - "slot.cgm.attachment.under_barrel": "グリップ", - "enchantment.cgm.quick_hands": "クイックハンド", - "enchantment.cgm.trigger_finger": "高速トリガー", - "enchantment.cgm.lightweight": "軽量", - "enchantment.cgm.collateral": "巻き添え", - "enchantment.cgm.over_capacity": "装弾数増加", - "enchantment.cgm.reclaimed": "再利用", + "container.cgm.workbench": "作業台", + "death.attack.cgm.bullet.annihilated": "%1$s は %2$s によって絶滅された", + "death.attack.cgm.bullet.decimated": "%1$s は %2$s によって破壊された", + "death.attack.cgm.bullet.eliminated": "%1$s は %2$s によって排除された", + "death.attack.cgm.bullet.executed": "%1$s は %2$s によって処刑された", + "death.attack.cgm.bullet.killed": "%1$s は %2$s によって倒された", + "effect.cgm.blinded": "目くらまし", + "effect.cgm.deafened": "難聴", "enchantment.cgm.accelerator": "加速器", - "enchantment.cgm.puncturing": "パンク", + "enchantment.cgm.accelerator.desc": "発射弾の高速化によりダメージを上昇させる", + "enchantment.cgm.collateral": "巻き添え", + "enchantment.cgm.collateral.desc": "銃弾を複数のエンティティに貫通させる", "enchantment.cgm.fire_starter": "発火装置", - "enchantment.cgm.quick_hands.desc": "リロード速度を上昇させる", - "enchantment.cgm.trigger_finger.desc": "発射レートを上昇させる", + "enchantment.cgm.fire_starter.desc": "着火された銃弾によってブロックやエンティティを発火させる", + "enchantment.cgm.lightweight": "軽量", "enchantment.cgm.lightweight.desc": "武器軽量化によってADS速度を上昇させる", - "enchantment.cgm.collateral.desc": "銃弾を複数のエンティティに貫通させる", + "enchantment.cgm.over_capacity": "装弾数増加", "enchantment.cgm.over_capacity.desc": "武器に装填可能な弾薬数を増加させる", - "enchantment.cgm.reclaimed.desc": "確率により発射時に銃弾が消費されなくなる", - "enchantment.cgm.accelerator.desc": "発射弾の高速化によりダメージを上昇させる", + "enchantment.cgm.puncturing": "パンク", "enchantment.cgm.puncturing.desc": "確率によりクリティカルダメージを与える", - "enchantment.cgm.fire_starter.desc": "着火された銃弾によってブロックやエンティティを発火させる", - "perk.cgm.title": "特典:", - "perk.cgm.entry.positive": "+ %s", + "enchantment.cgm.quick_hands": "クイックハンド", + "enchantment.cgm.quick_hands.desc": "リロード速度を上昇させる", + "enchantment.cgm.reclaimed": "再利用", + "enchantment.cgm.reclaimed.desc": "確率により発射時に銃弾が消費されなくなる", + "enchantment.cgm.trigger_finger": "高速トリガー", + "enchantment.cgm.trigger_finger.desc": "発射レートを上昇させる", + "gui.cgm.assemble": "作る", + "gui.cgm.show_remaining": "不足材料のみ表示", + "gui.cgm.workbench.assemble": "作る", + "gui.cgm.workbench.show_remaining": "不足材料のみ表示", + "gui.cgm.workbench.tab.ammo": "弾薬", + "gui.cgm.workbench.tab.attachments": "アタッチメント", + "gui.cgm.workbench.tab.misc": "その他", + "gui.cgm.workbench.tab.weapons": "武器", + "info.cgm.ammo": "弾薬: %s", + "info.cgm.ammo_type": "弾薬タイプ: %s", + "info.cgm.attachment_help": "%s を押してアタッチメントを表示", + "info.cgm.damage": "ダメージ: %s", + "info.cgm.ignore_ammo": "弾薬無制限", + "item.cgm.advanced_bullet": "高級銃弾", + "item.cgm.assault_rifle": "アサルトライフル", + "item.cgm.basic_bullet": "標準銃弾", + "item.cgm.bazooka": "バズーカ", + "item.cgm.grenade": "グレネード", + "item.cgm.grenade_launcher": "グレネードランチャー", + "item.cgm.heavy_rifle": "ヘビーライフル", + "item.cgm.light_grip": "軽量グリップ", + "item.cgm.light_stock": "軽量銃床", + "item.cgm.long_scope": "長距離スコープ", + "item.cgm.machine_pistol": "マシンピストル", + "item.cgm.medium_scope": "中距離スコープ", + "item.cgm.mini_gun": "ミニガン", + "item.cgm.missile": "ミサイル", + "item.cgm.pistol": "ピストル", + "item.cgm.rifle": "ライフル", + "item.cgm.shell": "シェル", + "item.cgm.short_scope": "短距離スコープ", + "item.cgm.shotgun": "ショットガン", + "item.cgm.silencer": "サイレンサー", + "item.cgm.sniper_rifle": "スナイパーライフル", + "item.cgm.specialised_grip": "専用グリップ", + "item.cgm.stun_grenade": "スタングレネード", + "item.cgm.tactical_stock": "戦術銃床", + "item.cgm.weighted_stock": "重量化銃床", + "item.minecraft.lingering_potion.effect.blinding": "目くらましの残留ポーション", + "item.minecraft.lingering_potion.effect.deafening": "難聴の残留ポーション", + "item.minecraft.potion.effect.blinding": "目くらましのポーション", + "item.minecraft.potion.effect.deafening": "難聴のポーション", + "itemGroup.cgm": "MrCrayfish's Gun Mod", + "key.categories.cgm": "MrCrayfish's Gun Mod", + "key.cgm.attachments": "アタッチメントの変更", + "key.cgm.reload": "リロード", + "key.cgm.unload": "アンロード", + "minecraft.crosshair.default": "デフォルト", + "perk.cgm.additional_damage.negative": "削減ダメージ §r(§l-%s ♥§r)", + "perk.cgm.additional_damage.positive": "追加ダメージ §r(§l+%s ♥§r)", + "perk.cgm.ads_speed.negative": "ADSスピード減少", + "perk.cgm.ads_speed.positive": "ADSスピード増加", "perk.cgm.entry.negative": "- %s", - "perk.cgm.fire_volume.positive": "発砲音を小さく", + "perk.cgm.entry.positive": "+ %s", "perk.cgm.fire_volume.negative": "発砲音を大きく", - "perk.cgm.silenced.positive": "消音", - "perk.cgm.sound_radius.positive": "発砲音の範囲を縮小", - "perk.cgm.sound_radius.negative": "発砲音の範囲を拡大", - "perk.cgm.additional_damage.positive": "追加ダメージ §r(§l+%s ♥§r)", - "perk.cgm.additional_damage.negative": "削減ダメージ §r(§l-%s ♥§r)", - "perk.cgm.modified_damage.positive": "武器ダメージ増加", + "perk.cgm.fire_volume.positive": "発砲音を小さく", "perk.cgm.modified_damage.negative": "武器ダメージ減少", - "perk.cgm.projectile_speed.positive": "発射スピード増加", + "perk.cgm.modified_damage.positive": "武器ダメージ増加", + "perk.cgm.projectile_life.negative": "ダメージ範囲を狭く", + "perk.cgm.projectile_life.positive": "ダメージ範囲を広く", "perk.cgm.projectile_speed.negative": "発射スピード減少", - "perk.cgm.projectile_spread.positive": "散弾範囲を狭く", + "perk.cgm.projectile_speed.positive": "発射スピード増加", "perk.cgm.projectile_spread.negative": "散弾範囲を広く", - "perk.cgm.projectile_life.positive": "ダメージ範囲を広く", - "perk.cgm.projectile_life.negative": "ダメージ範囲を狭く", - "perk.cgm.recoil.positive": "反動減少", - "perk.cgm.recoil.negative": "反動増加", - "perk.cgm.ads_speed.positive": "ADSスピード増加", - "perk.cgm.ads_speed.negative": "ADSスピード減少", - "perk.cgm.rate.positive": "発射レート増加", + "perk.cgm.projectile_spread.positive": "散弾範囲を狭く", "perk.cgm.rate.negative": "発射レート減少", - "gui.cgm.assemble": "作る", - "gui.cgm.show_remaining": "不足材料のみ表示", - "button.categories.cgm": "MrCrayfish's Gun Mod", - "cgm.button.shoot": "発射", - "cgm.button.aim": "照準", - "cgm.button.reload": "リロード / アンロード", - "cgm.button.attachments": "アタッチメントの変更", - "cgm.button.steadyAim": "安定照準", - "cgm.category.workbench.title": "製作", - "cgm.category.workbench.materials": "材料", - "cgm.action.aim": "照準", - "cgm.action.shoot": "発射", - "cgm.action.reload": "リロード", - "cgm.action.steady_aim": "安定照準", - "cgm.button.config.tooltip": "構成設定", - "cgm.chat.open_curseforge_page": "CurseForgeを開く", - "cgm.chat.install_configured": "構成設定にアクセスするために %s をインストール" + "perk.cgm.rate.positive": "発射レート増加", + "perk.cgm.recoil.negative": "反動増加", + "perk.cgm.recoil.positive": "反動減少", + "perk.cgm.silenced.positive": "消音", + "perk.cgm.sound_radius.negative": "発砲音の範囲を拡大", + "perk.cgm.sound_radius.positive": "発砲音の範囲を縮小", + "perk.cgm.title": "特典:", + "slot.cgm.attachment.barrel": "バレル", + "slot.cgm.attachment.not_applicable": "§c適用不可", + "slot.cgm.attachment.scope": "スコープ", + "slot.cgm.attachment.stock": "ストック", + "slot.cgm.attachment.under_barrel": "グリップ", + "subtitle.cgm.attach": "アタッチメントの装着", + "subtitle.cgm.cock": "武器のコッキング", + "subtitle.cgm.fire": "発砲音", + "subtitle.cgm.fire.enchanted": "エンチャントされた発砲音", + "subtitle.cgm.fire.silenced": "静かな発砲音", + "subtitle.cgm.grenade.pin": "グレネードピン", + "subtitle.cgm.reload": "リローディング", + "subtitle.cgm.stun.explosion": "スタングレネードの爆発", + "subtitle.cgm.stun.ring": "耳鳴り" } \ No newline at end of file diff --git a/src/main/resources/assets/cgm/lang/ko_kr.json b/src/main/resources/assets/cgm/lang/ko_kr.json index 204a37e7f..cb46b7e10 100644 --- a/src/main/resources/assets/cgm/lang/ko_kr.json +++ b/src/main/resources/assets/cgm/lang/ko_kr.json @@ -1,68 +1,17 @@ { "block.cgm.workbench": "작업대", - "item.cgm.pistol": "권총", - "item.cgm.shotgun": "산탄총", - "item.cgm.sniper_rifle": "저격소총", - "item.cgm.grenade_launcher": "유탄발사기", - "item.cgm.bazooka": "바주카", - "item.cgm.mini_gun": "기관총", - "item.cgm.rifle": "소총", - "item.cgm.assault_rifle": "돌격소총", - "item.cgm.machine_pistol": "기관권총", - "item.cgm.heavy_rifle": "중형 저격소총", - "item.cgm.basic_bullet": "기본탄", - "item.cgm.advanced_bullet": "개량탄", - "item.cgm.shell": "산탄 셸", - "item.cgm.grenade": "수류탄", - "item.cgm.stun_grenade": "섬광탄", - "item.cgm.missile": "미사일", - "item.cgm.short_scope": "근거리용 조준경", - "item.cgm.medium_scope": "중거리용 조준경", - "item.cgm.long_scope": "장거리용 조준경", - "item.cgm.silencer": "소음기", - "item.cgm.light_stock": "경형 개머리판", - "item.cgm.tactical_stock": "전술 개머리판", - "item.cgm.weighted_stock": "중형 개머리판", - "item.cgm.light_grip": "경형 손잡이", - "item.cgm.specialised_grip": "특화 손잡이", - "item.minecraft.potion.effect.blinding": "실명의 물약", - "item.minecraft.potion.effect.deafening": "먹먹함의 물약", - "item.minecraft.lingering_potion.effect.blinding": "잔류형 실명의 물약", - "item.minecraft.lingering_potion.effect.deafening": "잔류형 먹먹함의 물약", - "itemGroup.cgm": "MrCrayfish의 총 모드", - "death.attack.cgm.bullet.killed": "%1$s이(가) %2$s에게 제압당했습니다", - "death.attack.cgm.bullet.eliminated": "%1$s이(가) %2$s에게 처리되었습니다", - "death.attack.cgm.bullet.executed": "%1$s이(가) %2$s에게 처형당했습니다", - "death.attack.cgm.bullet.annihilated": "%1$s이(가) %2$s에게 소멸당했습니다", - "death.attack.cgm.bullet.decimated": "%1$s이(가) %2$s에게 말소당했습니다", - "info.cgm.damage": "피해량: %s", - "info.cgm.ignore_ammo": "무한 탄환", - "info.cgm.ammo": "장탄수: %s", - "info.cgm.ammo_type": "탄환 종류: %s", - "info.cgm.attachment_help": "%s 키를 누르고 인벤토리를 닫아 부착물을 달 수 있습니다.", - "key.categories.cgm": "MrCrayfish의 총 모드", - "key.cgm.reload": "재장전", - "key.cgm.unload": "Unload", - "key.cgm.attachments": "부착물 수정", - "effect.cgm.blinded": "실명", - "effect.cgm.deafened": "먹먹함", - "subtitle.cgm.stun.explosion": "섬광탄 폭발함", - "subtitle.cgm.stun.ring": "울림", - "subtitle.cgm.fire": "사격음", - "subtitle.cgm.fire.silenced": "사격음(소음기 장착됨)", - "subtitle.cgm.reload": "재장전함", - "subtitle.cgm.grenade.pin": "수류탄 핀 뽑음", - "subtitle.cgm.attach": "부착물 부착함", - "subtitle.cgm.cock": "무기 쿠킹 중", - "cgm.option_list.no_items": "아이템 없음", - "cgm.options.adsSensitivity": "정조준 감도", - "cgm.options.adsSensitivity.format": "정조준 감도: %s", - "cgm.options.crosshair.format": "크로스헤어: %s", + "button.categories.cgm": "MrCrayfish의 총 모드", + "cgm.button.aim": "Aim Down Sight", + "cgm.button.attachments": "부착물 수정", + "cgm.button.reload": "Reload / Unload", + "cgm.button.shoot": "무기 발사", + "cgm.button.steadyAim": "Steady Aim", + "cgm.category.workbench.materials": "재료", + "cgm.category.workbench.title": "조립", "cgm.crosshair.arrow": "화살표", "cgm.crosshair.better_default": "기본보다 더 나은 것", "cgm.crosshair.box": "상자형", "cgm.crosshair.circle": "원형", - "minecraft.crosshair.default": "기본", "cgm.crosshair.dot": "점", "cgm.crosshair.filled_circle": "채워진 동그라미", "cgm.crosshair.hit_marker": "히트 마커", @@ -72,70 +21,121 @@ "cgm.crosshair.square": "사격헝", "cgm.crosshair.t": "T", "cgm.crosshair.tech": "테크", - "gui.cgm.workbench.assemble": "조립", - "gui.cgm.workbench.show_remaining": "남은 개수 표시", - "gui.cgm.workbench.tab.weapons": "무기", - "gui.cgm.workbench.tab.attachments": "부착물", - "gui.cgm.workbench.tab.ammo": "탄", - "gui.cgm.workbench.tab.misc": "기타", - "container.cgm.workbench": "작업대", + "cgm.option_list.no_items": "아이템 없음", + "cgm.options.adsSensitivity": "정조준 감도", + "cgm.options.adsSensitivity.format": "정조준 감도: %s", + "cgm.options.crosshair.format": "크로스헤어: %s", "container.cgm.attachments": "부착물 수정", "container.cgm.attachments.window_help": "좌클릭으로 이동, 우클릭으로 회전", - "slot.cgm.attachment.not_applicable": "\u00a7c적용 불가능", - "slot.cgm.attachment.scope": "조준경", - "slot.cgm.attachment.barrel": "총구", - "slot.cgm.attachment.stock": "개머리판", - "slot.cgm.attachment.under_barrel": "언더배럴", - "enchantment.cgm.quick_hands": "빠른 손", - "enchantment.cgm.trigger_finger": "속사포", - "enchantment.cgm.lightweight": "가벼움", - "enchantment.cgm.collateral": "철갑탄", - "enchantment.cgm.over_capacity": "확장 탄창", - "enchantment.cgm.reclaimed": "탄피 줍기", + "container.cgm.workbench": "작업대", + "death.attack.cgm.bullet.annihilated": "%1$s이(가) %2$s에게 소멸당했습니다", + "death.attack.cgm.bullet.decimated": "%1$s이(가) %2$s에게 말소당했습니다", + "death.attack.cgm.bullet.eliminated": "%1$s이(가) %2$s에게 처리되었습니다", + "death.attack.cgm.bullet.executed": "%1$s이(가) %2$s에게 처형당했습니다", + "death.attack.cgm.bullet.killed": "%1$s이(가) %2$s에게 제압당했습니다", + "effect.cgm.blinded": "실명", + "effect.cgm.deafened": "먹먹함", "enchantment.cgm.accelerator": "탄환 가속", - "enchantment.cgm.puncturing": "치명탄", + "enchantment.cgm.accelerator.desc": "발사된 탄환을 가속시켜 탄환의 피해량을 증가시킵니다", + "enchantment.cgm.collateral": "철갑탄", + "enchantment.cgm.collateral.desc": "총알에 관통 효과를 추가합니다", "enchantment.cgm.fire_starter": "소이탄", - "enchantment.cgm.quick_hands.desc": "총기 재장전 속도가 증가합니다", - "enchantment.cgm.trigger_finger.desc": "총기 발사 속도가 증가합니다", + "enchantment.cgm.fire_starter.desc": "탄환이 착턴 지점과 대상에게 화염을 남깁니다", + "enchantment.cgm.lightweight": "가벼움", "enchantment.cgm.lightweight.desc": "무게를 줄여 정조준 속도를 증가시킵니다", - "enchantment.cgm.collateral.desc": "총알에 관통 효과를 추가합니다", + "enchantment.cgm.over_capacity": "확장 탄창", "enchantment.cgm.over_capacity.desc": "무기의 탄창 용량을 증가시킵니다", - "enchantment.cgm.reclaimed.desc": "탄환이 소모되지 않을 확률이 추가됩니다", - "enchantment.cgm.accelerator.desc": "발사된 탄환을 가속시켜 탄환의 피해량을 증가시킵니다", + "enchantment.cgm.puncturing": "치명탄", "enchantment.cgm.puncturing.desc": "탄환에 치명타가 발생할 확률을 추가합니다", - "enchantment.cgm.fire_starter.desc": "탄환이 착턴 지점과 대상에게 화염을 남깁니다", - "perk.cgm.title": "특능:", - "perk.cgm.entry.positive": "+ %s", + "enchantment.cgm.quick_hands": "빠른 손", + "enchantment.cgm.quick_hands.desc": "총기 재장전 속도가 증가합니다", + "enchantment.cgm.reclaimed": "탄피 줍기", + "enchantment.cgm.reclaimed.desc": "탄환이 소모되지 않을 확률이 추가됩니다", + "enchantment.cgm.trigger_finger": "속사포", + "enchantment.cgm.trigger_finger.desc": "총기 발사 속도가 증가합니다", + "gui.cgm.assemble": "조립", + "gui.cgm.show_remaining": "남은 개수 표시", + "gui.cgm.workbench.assemble": "조립", + "gui.cgm.workbench.show_remaining": "남은 개수 표시", + "gui.cgm.workbench.tab.ammo": "탄", + "gui.cgm.workbench.tab.attachments": "부착물", + "gui.cgm.workbench.tab.misc": "기타", + "gui.cgm.workbench.tab.weapons": "무기", + "info.cgm.ammo": "장탄수: %s", + "info.cgm.ammo_type": "탄환 종류: %s", + "info.cgm.attachment_help": "%s 키를 누르고 인벤토리를 닫아 부착물을 달 수 있습니다.", + "info.cgm.damage": "피해량: %s", + "info.cgm.ignore_ammo": "무한 탄환", + "item.cgm.advanced_bullet": "개량탄", + "item.cgm.assault_rifle": "돌격소총", + "item.cgm.basic_bullet": "기본탄", + "item.cgm.bazooka": "바주카", + "item.cgm.grenade": "수류탄", + "item.cgm.grenade_launcher": "유탄발사기", + "item.cgm.heavy_rifle": "중형 저격소총", + "item.cgm.light_grip": "경형 손잡이", + "item.cgm.light_stock": "경형 개머리판", + "item.cgm.long_scope": "장거리용 조준경", + "item.cgm.machine_pistol": "기관권총", + "item.cgm.medium_scope": "중거리용 조준경", + "item.cgm.mini_gun": "기관총", + "item.cgm.missile": "미사일", + "item.cgm.pistol": "권총", + "item.cgm.rifle": "소총", + "item.cgm.shell": "산탄 셸", + "item.cgm.short_scope": "근거리용 조준경", + "item.cgm.shotgun": "산탄총", + "item.cgm.silencer": "소음기", + "item.cgm.sniper_rifle": "저격소총", + "item.cgm.specialised_grip": "특화 손잡이", + "item.cgm.stun_grenade": "섬광탄", + "item.cgm.tactical_stock": "전술 개머리판", + "item.cgm.weighted_stock": "중형 개머리판", + "item.minecraft.lingering_potion.effect.blinding": "잔류형 실명의 물약", + "item.minecraft.lingering_potion.effect.deafening": "잔류형 먹먹함의 물약", + "item.minecraft.potion.effect.blinding": "실명의 물약", + "item.minecraft.potion.effect.deafening": "먹먹함의 물약", + "itemGroup.cgm": "MrCrayfish의 총 모드", + "key.categories.cgm": "MrCrayfish의 총 모드", + "key.cgm.attachments": "부착물 수정", + "key.cgm.reload": "재장전", + "key.cgm.unload": "Unload", + "minecraft.crosshair.default": "기본", + "perk.cgm.additional_damage.negative": "피해 감소 §r(§l-%s ♥§r)", + "perk.cgm.additional_damage.positive": "추가 피해 §r(§l+%s ♥§r)", + "perk.cgm.ads_speed.negative": "감소 : 정조준 속도", + "perk.cgm.ads_speed.positive": "증가 : 정조준 속도", "perk.cgm.entry.negative": "- %s", - "perk.cgm.fire_volume.positive": "감소 : 사격음", + "perk.cgm.entry.positive": "+ %s", "perk.cgm.fire_volume.negative": "증가 : 사격음", - "perk.cgm.silenced.positive": "적용 : 소음됨", - "perk.cgm.sound_radius.positive": "감소 : 사격음 범위", - "perk.cgm.sound_radius.negative": "증가 : 사격음 범위", - "perk.cgm.additional_damage.positive": "추가 피해 \u00c2\u00a7r(\u00c2\u00a7l+%s \u00e2\u2122\u00a5\u00c2\u00a7r)", - "perk.cgm.additional_damage.negative": "피해 감소 \u00c2\u00a7r(\u00c2\u00a7l-%s \u00e2\u2122\u00a5\u00c2\u00a7r)", - "perk.cgm.modified_damage.positive": "증가 : 피해량", + "perk.cgm.fire_volume.positive": "감소 : 사격음", "perk.cgm.modified_damage.negative": "감소 : 피해량", - "perk.cgm.projectile_speed.positive": "증가 : 투사체 속도", + "perk.cgm.modified_damage.positive": "증가 : 피해량", + "perk.cgm.projectile_life.negative": "감소 : 피해 범위", + "perk.cgm.projectile_life.positive": "증가 : 피해 범위", "perk.cgm.projectile_speed.negative": "감소 : 투사체 속도", - "perk.cgm.projectile_spread.positive": "감소 : 산탄도", + "perk.cgm.projectile_speed.positive": "증가 : 투사체 속도", "perk.cgm.projectile_spread.negative": "증가 : 산탄도", - "perk.cgm.projectile_life.positive": "증가 : 피해 범위", - "perk.cgm.projectile_life.negative": "감소 : 피해 범위", - "perk.cgm.recoil.positive": "감소 : 반동", - "perk.cgm.recoil.negative": "증가 : 반동", - "perk.cgm.ads_speed.positive": "증가 : 정조준 속도", - "perk.cgm.ads_speed.negative": "감소 : 정조준 속도", - "perk.cgm.rate.positive": "증가 : 발사 속도", + "perk.cgm.projectile_spread.positive": "감소 : 산탄도", "perk.cgm.rate.negative": "감소 : 발사 속도", - "gui.cgm.assemble": "조립", - "gui.cgm.show_remaining": "남은 개수 표시", - "button.categories.cgm": "MrCrayfish의 총 모드", - "cgm.button.shoot": "무기 발사", - "cgm.button.aim": "Aim Down Sight", - "cgm.button.reload": "Reload / Unload", - "cgm.button.attachments": "부착물 수정", - "cgm.button.steadyAim": "Steady Aim", - "cgm.category.workbench.title": "조립", - "cgm.category.workbench.materials": "재료" + "perk.cgm.rate.positive": "증가 : 발사 속도", + "perk.cgm.recoil.negative": "증가 : 반동", + "perk.cgm.recoil.positive": "감소 : 반동", + "perk.cgm.silenced.positive": "적용 : 소음됨", + "perk.cgm.sound_radius.negative": "증가 : 사격음 범위", + "perk.cgm.sound_radius.positive": "감소 : 사격음 범위", + "perk.cgm.title": "특능:", + "slot.cgm.attachment.barrel": "총구", + "slot.cgm.attachment.not_applicable": "§c적용 불가능", + "slot.cgm.attachment.scope": "조준경", + "slot.cgm.attachment.stock": "개머리판", + "slot.cgm.attachment.under_barrel": "언더배럴", + "subtitle.cgm.attach": "부착물 부착함", + "subtitle.cgm.cock": "무기 쿠킹 중", + "subtitle.cgm.fire": "사격음", + "subtitle.cgm.fire.silenced": "사격음(소음기 장착됨)", + "subtitle.cgm.grenade.pin": "수류탄 핀 뽑음", + "subtitle.cgm.reload": "재장전함", + "subtitle.cgm.stun.explosion": "섬광탄 폭발함", + "subtitle.cgm.stun.ring": "울림" } \ No newline at end of file diff --git a/src/main/resources/assets/cgm/lang/nl_nl.json b/src/main/resources/assets/cgm/lang/nl_nl.json index ebd458a77..ea5b860b0 100644 --- a/src/main/resources/assets/cgm/lang/nl_nl.json +++ b/src/main/resources/assets/cgm/lang/nl_nl.json @@ -1,69 +1,21 @@ { "block.cgm.workbench": "Werkbank", - "item.cgm.pistol": "Pistool", - "item.cgm.shotgun": "Jachtgeweer", - "item.cgm.sniper_rifle": "Scherpschuttersgeweer", - "item.cgm.grenade_launcher": "Granaatlanceerder", - "item.cgm.bazooka": "Bazooka", - "item.cgm.mini_gun": "Minigun", - "item.cgm.rifle": "Geweer", - "item.cgm.assault_rifle": "Aanvalsgeweer", - "item.cgm.machine_pistol": "Machine Pistool", - "item.cgm.heavy_rifle": "Zwaar Geweer", - "item.cgm.basic_bullet": "Standaard Kogel", - "item.cgm.advanced_bullet": "Geavanceerde Kogel", - "item.cgm.shell": "Shell", - "item.cgm.grenade": "Granaat", - "item.cgm.stun_grenade": "Schok Granaat", - "item.cgm.missile": "Raket", - "item.cgm.short_scope": "Korte Richtkijker", - "item.cgm.medium_scope": "Gemiddelde Richtkijker", - "item.cgm.long_scope": "Lange Richtkijker", - "item.cgm.silencer": "Geluiddemper", - "item.cgm.light_stock": "Lichte Kolf", - "item.cgm.tactical_stock": "Tactische Kolf", - "item.cgm.weighted_stock": "Gewogen Kolf", - "item.cgm.light_grip": "Lichte greep", - "item.cgm.specialised_grip": "Gespecialiseerde greep", - "item.minecraft.potion.effect.blinding": "Drank der Blindheid", - "item.minecraft.potion.effect.deafening": "Drank des Doofheid", - "item.minecraft.lingering_potion.effect.blinding": "Aanhoudende drank der Blindheid", - "item.minecraft.lingering_potion.effect.deafening": "Aanhoudende drank des Doofheid", - "itemGroup.cgm": "MrCrayfish's Gun Mod", - "death.attack.cgm.bullet.killed": "%1$s werd neergehaald door %2$s", - "death.attack.cgm.bullet.eliminated": "%1$s werd geëlimineerd door %2$s", - "death.attack.cgm.bullet.executed": "%1$s werd geëxecuteerd door %2$s", - "death.attack.cgm.bullet.annihilated": "%1$s werd vernietigd door %2$s", - "death.attack.cgm.bullet.decimated": "%1$s werd gedicimeerd door %2$s", - "info.cgm.damage": "Schade: %s", - "info.cgm.ignore_ammo": "Oneindige Munitie", - "info.cgm.ammo": "Munitiecapaciteit: %s", - "info.cgm.ammo_type": "Munitie Type: %s", - "info.cgm.attachment_help": "Druk op %s in-game voor Toebehoren", - "key.categories.cgm": "MrCrayfish's Gun Mod", - "key.cgm.reload": "Herladen", - "key.cgm.unload": "Lossen", - "key.cgm.attachments": "Pas Toebehoren aan", - "effect.cgm.blinded": "Verblind", - "effect.cgm.deafened": "Verdoofd", - "subtitle.cgm.stun.explosion": "Schok granaat explosie", - "subtitle.cgm.stun.ring": "Rinkelen", - "subtitle.cgm.fire": "Geweervuur", - "subtitle.cgm.fire.silenced": "Gedempt geweervuur", - "subtitle.cgm.fire.enchanted": "Betoverd geweervuur", - "subtitle.cgm.reload": "Herladen", - "subtitle.cgm.grenade.pin": "Granaat pin", - "subtitle.cgm.attach": "Toebehoren Toepassen", - "subtitle.cgm.cock": "Aanspannen geweer", - "cgm.option_list.no_items": "Geen Items", - "cgm.options.adsSensitivity": "ADS Gevoeligheid", - "cgm.options.adsSensitivity.format": "ADS Gevoeligheid: %s", - "cgm.options.crosshair": "Crosshair", + "button.categories.cgm": "MrCrayfish's Gun Mod", + "cgm.action.aim": "Richten", + "cgm.action.reload": "Herladen", + "cgm.action.shoot": "Schieten", + "cgm.action.steady_aim": "Stabiel richten", + "cgm.button.aim": "Richt het zicht naar beneden", + "cgm.button.attachments": "Pas Toebehoren aan", + "cgm.button.reload": "Herladen / Lossen", + "cgm.button.shoot": "Schiet Wapen", + "cgm.button.steadyAim": "Stabiel doel", + "cgm.category.workbench.materials": "Materialen", + "cgm.category.workbench.title": "Monteren", "cgm.crosshair.arrow": "Pijl", "cgm.crosshair.better_default": "Verbeterd standaard", "cgm.crosshair.box": "Blok", "cgm.crosshair.circle": "Cirkel", - "minecraft.crosshair.default": "Standaard", "cgm.crosshair.dot": "Punt", "cgm.crosshair.filled_circle": "Gevulde cirkel", "cgm.crosshair.hit_marker": "Hit markeerder", @@ -73,74 +25,122 @@ "cgm.crosshair.square": "Vierkant", "cgm.crosshair.t": "T", "cgm.crosshair.tech": "Technologie", - "gui.cgm.workbench.assemble": "Monteren", - "gui.cgm.workbench.show_remaining": "Toon resterende", - "gui.cgm.workbench.tab.weapons": "Wapens", - "gui.cgm.workbench.tab.attachments": "Toebehoren", - "gui.cgm.workbench.tab.ammo": "Munitie", - "gui.cgm.workbench.tab.misc": "Diversen", - "container.cgm.workbench": "Werkbank", + "cgm.option_list.no_items": "Geen Items", + "cgm.options.adsSensitivity": "ADS Gevoeligheid", + "cgm.options.adsSensitivity.format": "ADS Gevoeligheid: %s", + "cgm.options.crosshair": "Crosshair", "container.cgm.attachments": "Pas Toebehoren aan", "container.cgm.attachments.window_help": "Klik om te verplaatsen en te draaien", - "slot.cgm.attachment.not_applicable": "§cNiet toepasbaar", - "slot.cgm.attachment.scope": "Richtkijker", - "slot.cgm.attachment.barrel": "Loop", - "slot.cgm.attachment.stock": "Kolf", - "slot.cgm.attachment.under_barrel": "Onder Loop", - "enchantment.cgm.quick_hands": "Snelle Handen", - "enchantment.cgm.trigger_finger": "Trekker Vinger", - "enchantment.cgm.lightweight": "Lichtgewicht", - "enchantment.cgm.collateral": "Zijdelings", - "enchantment.cgm.over_capacity": "Vergrote capaciteit", - "enchantment.cgm.reclaimed": "Herverzamelen", + "container.cgm.workbench": "Werkbank", + "death.attack.cgm.bullet.annihilated": "%1$s werd vernietigd door %2$s", + "death.attack.cgm.bullet.decimated": "%1$s werd gedicimeerd door %2$s", + "death.attack.cgm.bullet.eliminated": "%1$s werd geëlimineerd door %2$s", + "death.attack.cgm.bullet.executed": "%1$s werd geëxecuteerd door %2$s", + "death.attack.cgm.bullet.killed": "%1$s werd neergehaald door %2$s", + "effect.cgm.blinded": "Verblind", + "effect.cgm.deafened": "Verdoofd", "enchantment.cgm.accelerator": "Versneller", - "enchantment.cgm.puncturing": "Doorboren", + "enchantment.cgm.accelerator.desc": "Verhoogt de snelheid van afgevuurde projectielen waardoor ze meer schade aanrichten", + "enchantment.cgm.collateral": "Zijdelings", + "enchantment.cgm.collateral.desc": "Laat afgevuurde kogels door meerdere entiteiten reizen", "enchantment.cgm.fire_starter": "Vuurverspreider", - "enchantment.cgm.quick_hands.desc": "Verhoogt de snelheid van het herladen van wapens", - "enchantment.cgm.trigger_finger.desc": "Verhoogt de snelheid waarmee je wapens kunt afvuren", + "enchantment.cgm.fire_starter.desc": "Afgevuurde kogels zullen blokken en entiteiten in brand steken bij een aanraking", + "enchantment.cgm.lightweight": "Lichtgewicht", "enchantment.cgm.lightweight.desc": "Vermindert het gewicht van een wapen om de ADS-snelheid te verhogen", - "enchantment.cgm.collateral.desc": "Laat afgevuurde kogels door meerdere entiteiten reizen", + "enchantment.cgm.over_capacity": "Vergrote capaciteit", "enchantment.cgm.over_capacity.desc": "Verhoogt de munitiecapaciteit van een wapen", - "enchantment.cgm.reclaimed.desc": "Creëert een kans dat een kogel niet wordt verteerd bij het afvuren van een wapen", - "enchantment.cgm.accelerator.desc": "Verhoogt de snelheid van afgevuurde projectielen waardoor ze meer schade aanrichten", + "enchantment.cgm.puncturing": "Doorboren", "enchantment.cgm.puncturing.desc": "Creëert een kans dat een kogel kritieke schade aanricht", - "enchantment.cgm.fire_starter.desc": "Afgevuurde kogels zullen blokken en entiteiten in brand steken bij een aanraking", - "perk.cgm.title": "Voordelen:", - "perk.cgm.entry.positive": "+ %s", + "enchantment.cgm.quick_hands": "Snelle Handen", + "enchantment.cgm.quick_hands.desc": "Verhoogt de snelheid van het herladen van wapens", + "enchantment.cgm.reclaimed": "Herverzamelen", + "enchantment.cgm.reclaimed.desc": "Creëert een kans dat een kogel niet wordt verteerd bij het afvuren van een wapen", + "enchantment.cgm.trigger_finger": "Trekker Vinger", + "enchantment.cgm.trigger_finger.desc": "Verhoogt de snelheid waarmee je wapens kunt afvuren", + "gui.cgm.assemble": "Monteren", + "gui.cgm.show_remaining": "Toon resterend", + "gui.cgm.workbench.assemble": "Monteren", + "gui.cgm.workbench.show_remaining": "Toon resterende", + "gui.cgm.workbench.tab.ammo": "Munitie", + "gui.cgm.workbench.tab.attachments": "Toebehoren", + "gui.cgm.workbench.tab.misc": "Diversen", + "gui.cgm.workbench.tab.weapons": "Wapens", + "info.cgm.ammo": "Munitiecapaciteit: %s", + "info.cgm.ammo_type": "Munitie Type: %s", + "info.cgm.attachment_help": "Druk op %s in-game voor Toebehoren", + "info.cgm.damage": "Schade: %s", + "info.cgm.ignore_ammo": "Oneindige Munitie", + "item.cgm.advanced_bullet": "Geavanceerde Kogel", + "item.cgm.assault_rifle": "Aanvalsgeweer", + "item.cgm.basic_bullet": "Standaard Kogel", + "item.cgm.bazooka": "Bazooka", + "item.cgm.grenade": "Granaat", + "item.cgm.grenade_launcher": "Granaatlanceerder", + "item.cgm.heavy_rifle": "Zwaar Geweer", + "item.cgm.light_grip": "Lichte greep", + "item.cgm.light_stock": "Lichte Kolf", + "item.cgm.long_scope": "Lange Richtkijker", + "item.cgm.machine_pistol": "Machine Pistool", + "item.cgm.medium_scope": "Gemiddelde Richtkijker", + "item.cgm.mini_gun": "Minigun", + "item.cgm.missile": "Raket", + "item.cgm.pistol": "Pistool", + "item.cgm.rifle": "Geweer", + "item.cgm.shell": "Shell", + "item.cgm.short_scope": "Korte Richtkijker", + "item.cgm.shotgun": "Jachtgeweer", + "item.cgm.silencer": "Geluiddemper", + "item.cgm.sniper_rifle": "Scherpschuttersgeweer", + "item.cgm.specialised_grip": "Gespecialiseerde greep", + "item.cgm.stun_grenade": "Schok Granaat", + "item.cgm.tactical_stock": "Tactische Kolf", + "item.cgm.weighted_stock": "Gewogen Kolf", + "item.minecraft.lingering_potion.effect.blinding": "Aanhoudende drank der Blindheid", + "item.minecraft.lingering_potion.effect.deafening": "Aanhoudende drank des Doofheid", + "item.minecraft.potion.effect.blinding": "Drank der Blindheid", + "item.minecraft.potion.effect.deafening": "Drank des Doofheid", + "itemGroup.cgm": "MrCrayfish's Gun Mod", + "key.categories.cgm": "MrCrayfish's Gun Mod", + "key.cgm.attachments": "Pas Toebehoren aan", + "key.cgm.reload": "Herladen", + "key.cgm.unload": "Lossen", + "minecraft.crosshair.default": "Standaard", + "perk.cgm.additional_damage.negative": "Negatieve Schade §r(§l-%s ♥§r)", + "perk.cgm.additional_damage.positive": "Extra schade §r(§l+%s ♥§r)", + "perk.cgm.ads_speed.negative": "Verminderde ADS-snelheid", + "perk.cgm.ads_speed.positive": "Verhoogde ADS-snelheid", "perk.cgm.entry.negative": "- %s", - "perk.cgm.fire_volume.positive": "Stiller vuurgeluid", + "perk.cgm.entry.positive": "+ %s", "perk.cgm.fire_volume.negative": "Luider vuurgeluid", - "perk.cgm.silenced.positive": "Gedempt geluid", - "perk.cgm.sound_radius.positive": "Verminderde straal van vuurgeluid", - "perk.cgm.sound_radius.negative": "Verhoogde vuurgeluidsradius", - "perk.cgm.additional_damage.positive": "Extra schade §r(§l+%s ♥§r)", - "perk.cgm.additional_damage.negative": "Negatieve Schade §r(§l-%s ♥§r)", - "perk.cgm.modified_damage.positive": "Verhoogde wapenschade", + "perk.cgm.fire_volume.positive": "Stiller vuurgeluid", "perk.cgm.modified_damage.negative": "Verminderde wapenschade", - "perk.cgm.projectile_speed.positive": "Verhoogde Projectielsnelheid", + "perk.cgm.modified_damage.positive": "Verhoogde wapenschade", + "perk.cgm.projectile_life.negative": "Verminderd schadebereik", + "perk.cgm.projectile_life.positive": "Verhoogd schadebereik", "perk.cgm.projectile_speed.negative": "Verminderde Projectielsnelheid", - "perk.cgm.projectile_spread.positive": "Verminderde verspreiding van projectielen", + "perk.cgm.projectile_speed.positive": "Verhoogde Projectielsnelheid", "perk.cgm.projectile_spread.negative": "Verhoogde verspreiding van projectielen", - "perk.cgm.projectile_life.positive": "Verhoogd schadebereik", - "perk.cgm.projectile_life.negative": "Verminderd schadebereik", - "perk.cgm.recoil.positive": "Minder terugslag", - "perk.cgm.recoil.negative": "Meer terugslag", - "perk.cgm.ads_speed.positive": "Verhoogde ADS-snelheid", - "perk.cgm.ads_speed.negative": "Verminderde ADS-snelheid", - "perk.cgm.rate.positive": "Verhoogde vuursnelheid", + "perk.cgm.projectile_spread.positive": "Verminderde verspreiding van projectielen", "perk.cgm.rate.negative": "Verminderde vuursnelheid", - "gui.cgm.assemble": "Monteren", - "gui.cgm.show_remaining": "Toon resterend", - "button.categories.cgm": "MrCrayfish's Gun Mod", - "cgm.button.shoot": "Schiet Wapen", - "cgm.button.aim": "Richt het zicht naar beneden", - "cgm.button.reload": "Herladen / Lossen", - "cgm.button.attachments": "Pas Toebehoren aan", - "cgm.button.steadyAim": "Stabiel doel", - "cgm.category.workbench.title": "Monteren", - "cgm.category.workbench.materials": "Materialen", - "cgm.action.aim": "Richten", - "cgm.action.shoot": "Schieten", - "cgm.action.reload": "Herladen", - "cgm.action.steady_aim": "Stabiel richten" + "perk.cgm.rate.positive": "Verhoogde vuursnelheid", + "perk.cgm.recoil.negative": "Meer terugslag", + "perk.cgm.recoil.positive": "Minder terugslag", + "perk.cgm.silenced.positive": "Gedempt geluid", + "perk.cgm.sound_radius.negative": "Verhoogde vuurgeluidsradius", + "perk.cgm.sound_radius.positive": "Verminderde straal van vuurgeluid", + "perk.cgm.title": "Voordelen:", + "slot.cgm.attachment.barrel": "Loop", + "slot.cgm.attachment.not_applicable": "§cNiet toepasbaar", + "slot.cgm.attachment.scope": "Richtkijker", + "slot.cgm.attachment.stock": "Kolf", + "slot.cgm.attachment.under_barrel": "Onder Loop", + "subtitle.cgm.attach": "Toebehoren Toepassen", + "subtitle.cgm.cock": "Aanspannen geweer", + "subtitle.cgm.fire": "Geweervuur", + "subtitle.cgm.fire.enchanted": "Betoverd geweervuur", + "subtitle.cgm.fire.silenced": "Gedempt geweervuur", + "subtitle.cgm.grenade.pin": "Granaat pin", + "subtitle.cgm.reload": "Herladen", + "subtitle.cgm.stun.explosion": "Schok granaat explosie", + "subtitle.cgm.stun.ring": "Rinkelen" } \ No newline at end of file diff --git a/src/main/resources/assets/cgm/lang/pt_br.json b/src/main/resources/assets/cgm/lang/pt_br.json index d20e795b4..d0226a882 100644 --- a/src/main/resources/assets/cgm/lang/pt_br.json +++ b/src/main/resources/assets/cgm/lang/pt_br.json @@ -1,69 +1,24 @@ { "block.cgm.workbench": "Bancada de Trabalho", - "item.cgm.pistol": "Pistola", - "item.cgm.shotgun": "Espingarda", - "item.cgm.sniper_rifle": "Rifle de Precisão", - "item.cgm.grenade_launcher": "Lançador de granada", - "item.cgm.bazooka": "Bazuca", - "item.cgm.mini_gun": "Minigun", - "item.cgm.rifle": "Rifle", - "item.cgm.assault_rifle": "Rifle de Assalto", - "item.cgm.machine_pistol": "Pistola Automática", - "item.cgm.heavy_rifle": "Rifle Pesado", - "item.cgm.basic_bullet": "Bala Básica", - "item.cgm.advanced_bullet": "Bala Avançada", - "item.cgm.shell": "Cartucho", - "item.cgm.grenade": "Granada", - "item.cgm.stun_grenade": "Granada de Atordoamento", - "item.cgm.missile": "Míssil", - "item.cgm.short_scope": "Mira Curta", - "item.cgm.medium_scope": "Mira Média", - "item.cgm.long_scope": "Mira Longa", - "item.cgm.silencer": "Silenciador", - "item.cgm.light_stock": "Coronha Leve", - "item.cgm.tactical_stock": "Coronha Tática", - "item.cgm.weighted_stock": "Coronha Pesada", - "item.cgm.light_grip": "Punho Leve", - "item.cgm.specialised_grip": "Punho Especializado", - "item.minecraft.potion.effect.blinding": "Poção de Cegueira", - "item.minecraft.potion.effect.deafening": "Poção de Surdez", - "item.minecraft.lingering_potion.effect.blinding": "Poção Prolongada de Cegueira", - "item.minecraft.lingering_potion.effect.deafening": "Poção Prolongada de Ensurdecimento", - "itemGroup.cgm": "MrCrayfish's Gun Mod", - "death.attack.cgm.bullet.killed": "%1$s foi derrubado por %2$s", - "death.attack.cgm.bullet.eliminated": "%1$s foi eliminado por %2$s", - "death.attack.cgm.bullet.executed": "%1$s foi executado por %2$s", - "death.attack.cgm.bullet.annihilated": "%1$s foi aniquilado por %2$s", - "death.attack.cgm.bullet.decimated": "%1$s foi dizimado por %2$s", - "info.cgm.damage": "Dano: %s", - "info.cgm.ignore_ammo": "Munição Infinita", - "info.cgm.ammo": "Munição: %s", - "info.cgm.ammo_type": "Tipo de Munição: %s", - "info.cgm.attachment_help": "Pressione %s com o inventario fechado para ver os acessórios", - "key.categories.cgm": "MrCrayfish's Gun Mod", - "key.cgm.reload": "Recarregar", - "key.cgm.unload": "Descarregar", - "key.cgm.attachments": "Modificar Acessórios", - "effect.cgm.blinded": "Cego", - "effect.cgm.deafened": "Ensurdecido", - "subtitle.cgm.stun.explosion": "Explosão de Granada de Atordoamento", - "subtitle.cgm.stun.ring": "Zumbido", - "subtitle.cgm.fire": "Tiros", - "subtitle.cgm.fire.silenced": "Tiros Silenciados", - "subtitle.cgm.fire.enchanted": "Enchanted Gunfire", - "subtitle.cgm.reload": "Recarregando", - "subtitle.cgm.grenade.pin": "Pino de Granada", - "subtitle.cgm.attach": "Acessório Anexado", - "subtitle.cgm.cock": "Cocking Weapon", - "cgm.option_list.no_items": "Sem Itens", - "cgm.options.adsSensitivity": "Sensibilidade de Velocidade da Mira (ADS)", - "cgm.options.adsSensitivity.format": "Sensibilidade de Velocidade da Mira (ADS): %s", - "cgm.options.crosshair": "Crosshair", + "button.categories.cgm": "MrCrayfish's Gun Mod", + "cgm.action.aim": "Mirar", + "cgm.action.reload": "Recaregar", + "cgm.action.shoot": "Atirar", + "cgm.action.steady_aim": "Mira Firme", + "cgm.button.aim": "Velocidade da Mira (ADS)", + "cgm.button.attachments": "Modificar acessórios", + "cgm.button.config.tooltip": "Opções de Configuração", + "cgm.button.reload": "Recarregar/Descarregar", + "cgm.button.shoot": "Disparar Arma", + "cgm.button.steadyAim": "Mira Firme", + "cgm.category.workbench.materials": "Materials", + "cgm.category.workbench.title": "Assembling", + "cgm.chat.install_configured": "Instale %s para acessar as opções de configuração", + "cgm.chat.open_curseforge_page": "Abra a página do CurseForge", "cgm.crosshair.arrow": "Seta", "cgm.crosshair.better_default": "Padrão Melhorado", "cgm.crosshair.box": "Caixa", "cgm.crosshair.circle": "Circulo", - "minecraft.crosshair.default": "Padrão", "cgm.crosshair.dot": "Ponto", "cgm.crosshair.filled_circle": "Círculo Preenchido", "cgm.crosshair.hit_marker": "Marcador de Acertos", @@ -73,78 +28,123 @@ "cgm.crosshair.square": "Quadrada", "cgm.crosshair.t": "T", "cgm.crosshair.tech": "Tecnologica", - "gui.cgm.workbench.assemble": "Montar", - "gui.cgm.workbench.show_remaining": "Itens que Faltam", - "gui.cgm.workbench.tab.weapons": "Armas", - "gui.cgm.workbench.tab.attachments": "Acessórios", - "gui.cgm.workbench.tab.ammo": "Munição", - "gui.cgm.workbench.tab.misc": "Diversos", - "container.cgm.workbench": "Bancada de Trabalho", + "cgm.option_list.no_items": "Sem Itens", + "cgm.options.adsSensitivity": "Sensibilidade de Velocidade da Mira (ADS)", + "cgm.options.adsSensitivity.format": "Sensibilidade de Velocidade da Mira (ADS): %s", + "cgm.options.crosshair": "Crosshair", "container.cgm.attachments": "Modificar Acessórios", "container.cgm.attachments.window_help": "Clique para mover e girar", - "slot.cgm.attachment.not_applicable": "§cNão Aplicável", - "slot.cgm.attachment.incompatible": "Isso não parece se encaixar...", - "slot.cgm.attachment.scope": "Mira", - "slot.cgm.attachment.barrel": "Cano", - "slot.cgm.attachment.stock": "Coronha", - "slot.cgm.attachment.under_barrel": "Debaixo do Cano", - "enchantment.cgm.quick_hands": "Mãos Rápidas", - "enchantment.cgm.trigger_finger": "Rapido no Gatilho", - "enchantment.cgm.lightweight": "Leveza", - "enchantment.cgm.collateral": "Dano Colateral", - "enchantment.cgm.over_capacity": "Carregador Alongado", - "enchantment.cgm.reclaimed": "Conservação", + "container.cgm.workbench": "Bancada de Trabalho", + "death.attack.cgm.bullet.annihilated": "%1$s foi aniquilado por %2$s", + "death.attack.cgm.bullet.decimated": "%1$s foi dizimado por %2$s", + "death.attack.cgm.bullet.eliminated": "%1$s foi eliminado por %2$s", + "death.attack.cgm.bullet.executed": "%1$s foi executado por %2$s", + "death.attack.cgm.bullet.killed": "%1$s foi derrubado por %2$s", + "effect.cgm.blinded": "Cego", + "effect.cgm.deafened": "Ensurdecido", "enchantment.cgm.accelerator": "Aceleração", - "enchantment.cgm.puncturing": "Acerto Crítico", + "enchantment.cgm.accelerator.desc": "Aumenta a velocidade dos projéteis disparados, fazendo com que eles causem mais danos", + "enchantment.cgm.collateral": "Dano Colateral", + "enchantment.cgm.collateral.desc": "Faz com que as balas disparadas percorram várias entidades", "enchantment.cgm.fire_starter": "Incendiário", - "enchantment.cgm.quick_hands.desc": "Aumenta a velocidade de recarga de armas", - "enchantment.cgm.trigger_finger.desc": "Aumenta a velocidade com que você pode disparar armas", + "enchantment.cgm.fire_starter.desc": "As balas disparadas incendiarão blocos e entidades com o impacto", + "enchantment.cgm.lightweight": "Leveza", "enchantment.cgm.lightweight.desc": "Reduz o peso de uma arma para aumentar a velocidade da mira (ADS)", - "enchantment.cgm.collateral.desc": "Faz com que as balas disparadas percorram várias entidades", + "enchantment.cgm.over_capacity": "Carregador Alongado", "enchantment.cgm.over_capacity.desc": "Aumenta a capacidade de munição de uma arma", - "enchantment.cgm.reclaimed.desc": "Cria uma chance de que uma bala não seja consumida ao disparar uma arma", - "enchantment.cgm.accelerator.desc": "Aumenta a velocidade dos projéteis disparados, fazendo com que eles causem mais danos", + "enchantment.cgm.puncturing": "Acerto Crítico", "enchantment.cgm.puncturing.desc": "Cria uma chance de que uma bala cause dano crítico", - "enchantment.cgm.fire_starter.desc": "As balas disparadas incendiarão blocos e entidades com o impacto", - "perk.cgm.title": "Vantagens:", - "perk.cgm.entry.positive": "+ %s", + "enchantment.cgm.quick_hands": "Mãos Rápidas", + "enchantment.cgm.quick_hands.desc": "Aumenta a velocidade de recarga de armas", + "enchantment.cgm.reclaimed": "Conservação", + "enchantment.cgm.reclaimed.desc": "Cria uma chance de que uma bala não seja consumida ao disparar uma arma", + "enchantment.cgm.trigger_finger": "Rapido no Gatilho", + "enchantment.cgm.trigger_finger.desc": "Aumenta a velocidade com que você pode disparar armas", + "gui.cgm.assemble": "Montar", + "gui.cgm.show_remaining": "Itens que Faltam", + "gui.cgm.workbench.assemble": "Montar", + "gui.cgm.workbench.show_remaining": "Itens que Faltam", + "gui.cgm.workbench.tab.ammo": "Munição", + "gui.cgm.workbench.tab.attachments": "Acessórios", + "gui.cgm.workbench.tab.misc": "Diversos", + "gui.cgm.workbench.tab.weapons": "Armas", + "info.cgm.ammo": "Munição: %s", + "info.cgm.ammo_type": "Tipo de Munição: %s", + "info.cgm.attachment_help": "Pressione %s com o inventario fechado para ver os acessórios", + "info.cgm.damage": "Dano: %s", + "info.cgm.ignore_ammo": "Munição Infinita", + "item.cgm.advanced_bullet": "Bala Avançada", + "item.cgm.assault_rifle": "Rifle de Assalto", + "item.cgm.basic_bullet": "Bala Básica", + "item.cgm.bazooka": "Bazuca", + "item.cgm.grenade": "Granada", + "item.cgm.grenade_launcher": "Lançador de granada", + "item.cgm.heavy_rifle": "Rifle Pesado", + "item.cgm.light_grip": "Punho Leve", + "item.cgm.light_stock": "Coronha Leve", + "item.cgm.long_scope": "Mira Longa", + "item.cgm.machine_pistol": "Pistola Automática", + "item.cgm.medium_scope": "Mira Média", + "item.cgm.mini_gun": "Minigun", + "item.cgm.missile": "Míssil", + "item.cgm.pistol": "Pistola", + "item.cgm.rifle": "Rifle", + "item.cgm.shell": "Cartucho", + "item.cgm.short_scope": "Mira Curta", + "item.cgm.shotgun": "Espingarda", + "item.cgm.silencer": "Silenciador", + "item.cgm.sniper_rifle": "Rifle de Precisão", + "item.cgm.specialised_grip": "Punho Especializado", + "item.cgm.stun_grenade": "Granada de Atordoamento", + "item.cgm.tactical_stock": "Coronha Tática", + "item.cgm.weighted_stock": "Coronha Pesada", + "item.minecraft.lingering_potion.effect.blinding": "Poção Prolongada de Cegueira", + "item.minecraft.lingering_potion.effect.deafening": "Poção Prolongada de Ensurdecimento", + "item.minecraft.potion.effect.blinding": "Poção de Cegueira", + "item.minecraft.potion.effect.deafening": "Poção de Surdez", + "itemGroup.cgm": "MrCrayfish's Gun Mod", + "key.categories.cgm": "MrCrayfish's Gun Mod", + "key.cgm.attachments": "Modificar Acessórios", + "key.cgm.reload": "Recarregar", + "key.cgm.unload": "Descarregar", + "minecraft.crosshair.default": "Padrão", + "perk.cgm.additional_damage.negative": "Dano Negativo §r(§l-%s ♥§r)", + "perk.cgm.additional_damage.positive": "Dano Adicional §r(§l+%s ♥§r)", + "perk.cgm.ads_speed.negative": "Reduz a Velocidade da Mira (ADS)", + "perk.cgm.ads_speed.positive": "Aumenta a Velocidade da Mira (ADS)", "perk.cgm.entry.negative": "- %s", - "perk.cgm.fire_volume.positive": "Disparo mais Silencioso", + "perk.cgm.entry.positive": "+ %s", "perk.cgm.fire_volume.negative": "Disparo mais Barulhento", - "perk.cgm.silenced.positive": "Silenciado", - "perk.cgm.sound_radius.positive": "Reduz do Alcance do Som de Disparo", - "perk.cgm.sound_radius.negative": "Aumenta do Alcance do Som de Disparo", - "perk.cgm.additional_damage.positive": "Dano Adicional §r(§l+%s ♥§r)", - "perk.cgm.additional_damage.negative": "Dano Negativo §r(§l-%s ♥§r)", - "perk.cgm.modified_damage.positive": "Aumenta o Dano da Arma ", + "perk.cgm.fire_volume.positive": "Disparo mais Silencioso", "perk.cgm.modified_damage.negative": "Reduz o Dano da Arma", - "perk.cgm.projectile_speed.positive": "Aumenta da Velocidade do Projétil", + "perk.cgm.modified_damage.positive": "Aumenta o Dano da Arma ", + "perk.cgm.projectile_life.negative": "Reduz o Alcance do Dano", + "perk.cgm.projectile_life.positive": "Aumenta o Alcance do Dano", "perk.cgm.projectile_speed.negative": "Reduz da Velocidade do Projétil", - "perk.cgm.projectile_spread.positive": "Reduz da Propagação do Projétil", + "perk.cgm.projectile_speed.positive": "Aumenta da Velocidade do Projétil", "perk.cgm.projectile_spread.negative": "Aumenta da Propagação do Projétil", - "perk.cgm.projectile_life.positive": "Aumenta o Alcance do Dano", - "perk.cgm.projectile_life.negative": "Reduz o Alcance do Dano", - "perk.cgm.recoil.positive": "Reduz o Recuo", - "perk.cgm.recoil.negative": "Aumenta o Recuo", - "perk.cgm.ads_speed.positive": "Aumenta a Velocidade da Mira (ADS)", - "perk.cgm.ads_speed.negative": "Reduz a Velocidade da Mira (ADS)", - "perk.cgm.rate.positive": "Aumenta a Cadência de Tiro", + "perk.cgm.projectile_spread.positive": "Reduz da Propagação do Projétil", "perk.cgm.rate.negative": "Reduz a Cadência de Tiro", - "gui.cgm.assemble": "Montar", - "gui.cgm.show_remaining": "Itens que Faltam", - "button.categories.cgm": "MrCrayfish's Gun Mod", - "cgm.button.shoot": "Disparar Arma", - "cgm.button.aim": "Velocidade da Mira (ADS)", - "cgm.button.reload": "Recarregar/Descarregar", - "cgm.button.attachments": "Modificar acessórios", - "cgm.button.steadyAim": "Mira Firme", - "cgm.category.workbench.title": "Assembling", - "cgm.category.workbench.materials": "Materials", - "cgm.action.aim": "Mirar", - "cgm.action.shoot": "Atirar", - "cgm.action.reload": "Recaregar", - "cgm.action.steady_aim": "Mira Firme", - "cgm.button.config.tooltip": "Opções de Configuração", - "cgm.chat.open_curseforge_page": "Abra a página do CurseForge", - "cgm.chat.install_configured": "Instale %s para acessar as opções de configuração" -} + "perk.cgm.rate.positive": "Aumenta a Cadência de Tiro", + "perk.cgm.recoil.negative": "Aumenta o Recuo", + "perk.cgm.recoil.positive": "Reduz o Recuo", + "perk.cgm.silenced.positive": "Silenciado", + "perk.cgm.sound_radius.negative": "Aumenta do Alcance do Som de Disparo", + "perk.cgm.sound_radius.positive": "Reduz do Alcance do Som de Disparo", + "perk.cgm.title": "Vantagens:", + "slot.cgm.attachment.barrel": "Cano", + "slot.cgm.attachment.incompatible": "Isso não parece se encaixar...", + "slot.cgm.attachment.not_applicable": "§cNão Aplicável", + "slot.cgm.attachment.scope": "Mira", + "slot.cgm.attachment.stock": "Coronha", + "slot.cgm.attachment.under_barrel": "Debaixo do Cano", + "subtitle.cgm.attach": "Acessório Anexado", + "subtitle.cgm.cock": "Cocking Weapon", + "subtitle.cgm.fire": "Tiros", + "subtitle.cgm.fire.enchanted": "Enchanted Gunfire", + "subtitle.cgm.fire.silenced": "Tiros Silenciados", + "subtitle.cgm.grenade.pin": "Pino de Granada", + "subtitle.cgm.reload": "Recarregando", + "subtitle.cgm.stun.explosion": "Explosão de Granada de Atordoamento", + "subtitle.cgm.stun.ring": "Zumbido" +} \ No newline at end of file diff --git a/src/main/resources/assets/cgm/lang/ru_ru.json b/src/main/resources/assets/cgm/lang/ru_ru.json index d06159695..4e8bf6ada 100644 --- a/src/main/resources/assets/cgm/lang/ru_ru.json +++ b/src/main/resources/assets/cgm/lang/ru_ru.json @@ -1,69 +1,21 @@ { "block.cgm.workbench": "Верстак", - "item.cgm.pistol": "Пистолет", - "item.cgm.shotgun": "Дробовик", - "item.cgm.sniper_rifle": "Снайперская винтовка", - "item.cgm.grenade_launcher": "Гранатомёт", - "item.cgm.bazooka": "Базука", - "item.cgm.mini_gun": "Миниган", - "item.cgm.rifle": "Винтовка", - "item.cgm.assault_rifle": "Штурмовая винтовка", - "item.cgm.machine_pistol": "Пистолет-пулемёт", - "item.cgm.heavy_rifle": "Тяжелая винтовка", - "item.cgm.basic_bullet": "Простой патрон", - "item.cgm.advanced_bullet": "Продвинутый патрон", - "item.cgm.shell": "Патрон дробовика", - "item.cgm.grenade": "Граната", - "item.cgm.stun_grenade": "Оглушающая граната", - "item.cgm.missile": "Ракета", - "item.cgm.short_scope": "Короткий прицел", - "item.cgm.medium_scope": "Средний прицел", - "item.cgm.long_scope": "Длинный прицел", - "item.cgm.silencer": "Глушитель", - "item.cgm.light_stock": "Лёгкая ложа", - "item.cgm.tactical_stock": "Тактическая ложа", - "item.cgm.weighted_stock": "Утяжеленная ложа", - "item.cgm.light_grip": "Легкая рукоять", - "item.cgm.specialised_grip": "Спец. рукоять", - "item.minecraft.potion.effect.blinding": "Зелье ослепления", - "item.minecraft.potion.effect.deafening": "Зелье оглушения", - "item.minecraft.lingering_potion.effect.blinding": "Туманное зелье ослепления", - "item.minecraft.lingering_potion.effect.deafening": "Туманное зелье оглушения", - "itemGroup.cgm": "MrCrayfish's Gun Mod", - "death.attack.cgm.bullet.killed": "%1$s был(а) убит(а) %2$s", - "death.attack.cgm.bullet.eliminated": "%1$s был(а) устранен(а) %2$s", - "death.attack.cgm.bullet.executed": "%1$s был(а) казнен(а) %2$s", - "death.attack.cgm.bullet.annihilated": "%1$s был(а) аннигилирован(а) %2$s", - "death.attack.cgm.bullet.decimated": "%1$s был(а) уничтожен(а) %2$s", - "info.cgm.damage": "Урон: %s", - "info.cgm.ignore_ammo": "Бесконечные боеприпасы", - "info.cgm.ammo": "Боеприпасов: %s/%s", - "info.cgm.ammo_type": "Тип боеприпасов: %s", - "info.cgm.attachment_help": "Нажмите %s в игре для изменения обвесов", - "key.categories.cgm": "MrCrayfish's Gun Mod", - "key.cgm.reload": "Перезарядить", - "key.cgm.unload": "Разрядить", - "key.cgm.attachments": "Изменить обвесы", - "effect.cgm.blinded": "Ослеплён", - "effect.cgm.deafened": "Оглушён", - "subtitle.cgm.stun.explosion": "Взрыв оглушающей гранаты", - "subtitle.cgm.stun.ring": "Звон", - "subtitle.cgm.fire": "Стрельба", - "subtitle.cgm.fire.silenced": "Приглушенная стрельба", - "subtitle.cgm.fire.enchanted": "Зачарованная стрельба", - "subtitle.cgm.reload": "Перезарядка", - "subtitle.cgm.grenade.pin": "Чека гранаты", - "subtitle.cgm.attach": "Обвес прикреплён", - "subtitle.cgm.cock": "Взведение оружия", - "cgm.option_list.no_items": "Нет предметов", - "cgm.options.adsSensitivity": "Чувствительность ADS", - "cgm.options.adsSensitivity.format": "Чувствительность ADS: %s", - "cgm.options.crosshair": "Перекрестие", + "button.categories.cgm": "MrCrayfish's Gun Mod", + "cgm.action.aim": "Прицел", + "cgm.action.reload": "Перезарядка", + "cgm.action.shoot": "Выстрел", + "cgm.action.steady_aim": "Твёрдая рука", + "cgm.button.aim": "Aim Down Sight (ADS)", + "cgm.button.attachments": "Изменить обвесы", + "cgm.button.reload": "Перезарядить / Разрядить", + "cgm.button.shoot": "Стрельба из оружия", + "cgm.button.steadyAim": "Твёрдая рука", + "cgm.category.workbench.materials": "Материалы", + "cgm.category.workbench.title": "Сборка", "cgm.crosshair.arrow": "Стрелка", "cgm.crosshair.better_default": "Улучшенный по умолчанию", "cgm.crosshair.box": "Бокс", "cgm.crosshair.circle": "Круг", - "minecraft.crosshair.default": "По умолчанию", "cgm.crosshair.dot": "Точка", "cgm.crosshair.filled_circle": "Заполненный круг", "cgm.crosshair.hit_marker": "Маркер попадания", @@ -73,74 +25,122 @@ "cgm.crosshair.square": "Квадрат", "cgm.crosshair.t": "T", "cgm.crosshair.tech": "Tech", - "gui.cgm.workbench.assemble": "Сбор", - "gui.cgm.workbench.show_remaining": "Показать оставшееся", - "gui.cgm.workbench.tab.weapons": "Оружие", - "gui.cgm.workbench.tab.attachments": "Обвесы", - "gui.cgm.workbench.tab.ammo": "Боеприпасы", - "gui.cgm.workbench.tab.misc": "Разное", - "container.cgm.workbench": "Верстак", + "cgm.option_list.no_items": "Нет предметов", + "cgm.options.adsSensitivity": "Чувствительность ADS", + "cgm.options.adsSensitivity.format": "Чувствительность ADS: %s", + "cgm.options.crosshair": "Перекрестие", "container.cgm.attachments": "Изменить обвесы", "container.cgm.attachments.window_help": "Кликните, чтобы перемещать и вертеть", - "slot.cgm.attachment.not_applicable": "§cНе применимо", - "slot.cgm.attachment.scope": "Прицел", - "slot.cgm.attachment.barrel": "Ствол", - "slot.cgm.attachment.stock": "Ложа", - "slot.cgm.attachment.under_barrel": "Подствольник", - "enchantment.cgm.quick_hands": "Быстрые руки", - "enchantment.cgm.trigger_finger": "Указательный палец", - "enchantment.cgm.lightweight": "Облегчённый", - "enchantment.cgm.collateral": "Прострел", - "enchantment.cgm.over_capacity": "Сверх боезапас", - "enchantment.cgm.reclaimed": "Возвращённые", + "container.cgm.workbench": "Верстак", + "death.attack.cgm.bullet.annihilated": "%1$s был(а) аннигилирован(а) %2$s", + "death.attack.cgm.bullet.decimated": "%1$s был(а) уничтожен(а) %2$s", + "death.attack.cgm.bullet.eliminated": "%1$s был(а) устранен(а) %2$s", + "death.attack.cgm.bullet.executed": "%1$s был(а) казнен(а) %2$s", + "death.attack.cgm.bullet.killed": "%1$s был(а) убит(а) %2$s", + "effect.cgm.blinded": "Ослеплён", + "effect.cgm.deafened": "Оглушён", "enchantment.cgm.accelerator": "Ускоритель", - "enchantment.cgm.puncturing": "Пробитие", + "enchantment.cgm.accelerator.desc": "Увеличивает скорость выпущенных снарядов, заставляя их наносить больше урона", + "enchantment.cgm.collateral": "Прострел", + "enchantment.cgm.collateral.desc": "Заставляет выпущенные пули проходить через несколько существ", "enchantment.cgm.fire_starter": "Поджигатель", - "enchantment.cgm.quick_hands.desc": "Увеличивает скорость перезарядки оружия.", - "enchantment.cgm.trigger_finger.desc": "Увеличивает скорость стрельбы из оружия", + "enchantment.cgm.fire_starter.desc": "Пули поджигают блоки и объекты при попадании", + "enchantment.cgm.lightweight": "Облегчённый", "enchantment.cgm.lightweight.desc": "Уменьшает вес оружия для увеличения скорости ADS", - "enchantment.cgm.collateral.desc": "Заставляет выпущенные пули проходить через несколько существ", + "enchantment.cgm.over_capacity": "Сверх боезапас", "enchantment.cgm.over_capacity.desc": "Увеличивает боезапас оружия", - "enchantment.cgm.reclaimed.desc": "Есть шанс, что пуля не израсходуется при стрельбе", - "enchantment.cgm.accelerator.desc": "Увеличивает скорость выпущенных снарядов, заставляя их наносить больше урона", + "enchantment.cgm.puncturing": "Пробитие", "enchantment.cgm.puncturing.desc": "Есть шанс, что пуля нанесет критический урон", - "enchantment.cgm.fire_starter.desc": "Пули поджигают блоки и объекты при попадании", - "perk.cgm.title": "Перки:", - "perk.cgm.entry.positive": "+ %s", + "enchantment.cgm.quick_hands": "Быстрые руки", + "enchantment.cgm.quick_hands.desc": "Увеличивает скорость перезарядки оружия.", + "enchantment.cgm.reclaimed": "Возвращённые", + "enchantment.cgm.reclaimed.desc": "Есть шанс, что пуля не израсходуется при стрельбе", + "enchantment.cgm.trigger_finger": "Указательный палец", + "enchantment.cgm.trigger_finger.desc": "Увеличивает скорость стрельбы из оружия", + "gui.cgm.assemble": "Собрать", + "gui.cgm.show_remaining": "Показать оставшееся", + "gui.cgm.workbench.assemble": "Сбор", + "gui.cgm.workbench.show_remaining": "Показать оставшееся", + "gui.cgm.workbench.tab.ammo": "Боеприпасы", + "gui.cgm.workbench.tab.attachments": "Обвесы", + "gui.cgm.workbench.tab.misc": "Разное", + "gui.cgm.workbench.tab.weapons": "Оружие", + "info.cgm.ammo": "Боеприпасов: %s/%s", + "info.cgm.ammo_type": "Тип боеприпасов: %s", + "info.cgm.attachment_help": "Нажмите %s в игре для изменения обвесов", + "info.cgm.damage": "Урон: %s", + "info.cgm.ignore_ammo": "Бесконечные боеприпасы", + "item.cgm.advanced_bullet": "Продвинутый патрон", + "item.cgm.assault_rifle": "Штурмовая винтовка", + "item.cgm.basic_bullet": "Простой патрон", + "item.cgm.bazooka": "Базука", + "item.cgm.grenade": "Граната", + "item.cgm.grenade_launcher": "Гранатомёт", + "item.cgm.heavy_rifle": "Тяжелая винтовка", + "item.cgm.light_grip": "Легкая рукоять", + "item.cgm.light_stock": "Лёгкая ложа", + "item.cgm.long_scope": "Длинный прицел", + "item.cgm.machine_pistol": "Пистолет-пулемёт", + "item.cgm.medium_scope": "Средний прицел", + "item.cgm.mini_gun": "Миниган", + "item.cgm.missile": "Ракета", + "item.cgm.pistol": "Пистолет", + "item.cgm.rifle": "Винтовка", + "item.cgm.shell": "Патрон дробовика", + "item.cgm.short_scope": "Короткий прицел", + "item.cgm.shotgun": "Дробовик", + "item.cgm.silencer": "Глушитель", + "item.cgm.sniper_rifle": "Снайперская винтовка", + "item.cgm.specialised_grip": "Спец. рукоять", + "item.cgm.stun_grenade": "Оглушающая граната", + "item.cgm.tactical_stock": "Тактическая ложа", + "item.cgm.weighted_stock": "Утяжеленная ложа", + "item.minecraft.lingering_potion.effect.blinding": "Туманное зелье ослепления", + "item.minecraft.lingering_potion.effect.deafening": "Туманное зелье оглушения", + "item.minecraft.potion.effect.blinding": "Зелье ослепления", + "item.minecraft.potion.effect.deafening": "Зелье оглушения", + "itemGroup.cgm": "MrCrayfish's Gun Mod", + "key.categories.cgm": "MrCrayfish's Gun Mod", + "key.cgm.attachments": "Изменить обвесы", + "key.cgm.reload": "Перезарядить", + "key.cgm.unload": "Разрядить", + "minecraft.crosshair.default": "По умолчанию", + "perk.cgm.additional_damage.negative": "Отрицательный урон §r(§l-%s ♥§r)", + "perk.cgm.additional_damage.positive": "Дополнительный урон §r(§l+%s ♥§r)", + "perk.cgm.ads_speed.negative": "Сниженная скорость ADS", + "perk.cgm.ads_speed.positive": "Повышенная скорость ADS", "perk.cgm.entry.negative": "- %s", - "perk.cgm.fire_volume.positive": "Более тихий звук огня", + "perk.cgm.entry.positive": "+ %s", "perk.cgm.fire_volume.negative": "Более громкий звук огня", - "perk.cgm.silenced.positive": "Заглушён", - "perk.cgm.sound_radius.positive": "Уменьшенный радиус звука огня", - "perk.cgm.sound_radius.negative": "Увеличенный радиус звука огня", - "perk.cgm.additional_damage.positive": "Дополнительный урон §r(§l+%s ♥§r)", - "perk.cgm.additional_damage.negative": "Отрицательный урон §r(§l-%s ♥§r)", - "perk.cgm.modified_damage.positive": "Увеличенный урон оружия", + "perk.cgm.fire_volume.positive": "Более тихий звук огня", "perk.cgm.modified_damage.negative": "Сниженный урон оружия", - "perk.cgm.projectile_speed.positive": "Повышенная скорость снаряда", + "perk.cgm.modified_damage.positive": "Увеличенный урон оружия", + "perk.cgm.projectile_life.negative": "Уменьшенный диапазон урона", + "perk.cgm.projectile_life.positive": "Увеличенный диапазон урона", "perk.cgm.projectile_speed.negative": "Сниженная скорость снаряда", - "perk.cgm.projectile_spread.positive": "Уменьшенный разброс снарядов", + "perk.cgm.projectile_speed.positive": "Повышенная скорость снаряда", "perk.cgm.projectile_spread.negative": "Увеличенный разброс снарядов", - "perk.cgm.projectile_life.positive": "Увеличенный диапазон урона", - "perk.cgm.projectile_life.negative": "Уменьшенный диапазон урона", - "perk.cgm.recoil.positive": "Сниженная отдача", - "perk.cgm.recoil.negative": "Увеличенная отдача", - "perk.cgm.ads_speed.positive": "Повышенная скорость ADS", - "perk.cgm.ads_speed.negative": "Сниженная скорость ADS", - "perk.cgm.rate.positive": "Повышенная скорострельность", + "perk.cgm.projectile_spread.positive": "Уменьшенный разброс снарядов", "perk.cgm.rate.negative": "Пониженная скорострельность", - "gui.cgm.assemble": "Собрать", - "gui.cgm.show_remaining": "Показать оставшееся", - "button.categories.cgm": "MrCrayfish's Gun Mod", - "cgm.button.shoot": "Стрельба из оружия", - "cgm.button.aim": "Aim Down Sight (ADS)", - "cgm.button.reload": "Перезарядить / Разрядить", - "cgm.button.attachments": "Изменить обвесы", - "cgm.button.steadyAim": "Твёрдая рука", - "cgm.category.workbench.title": "Сборка", - "cgm.category.workbench.materials": "Материалы", - "cgm.action.aim": "Прицел", - "cgm.action.shoot": "Выстрел", - "cgm.action.reload": "Перезарядка", - "cgm.action.steady_aim": "Твёрдая рука" -} + "perk.cgm.rate.positive": "Повышенная скорострельность", + "perk.cgm.recoil.negative": "Увеличенная отдача", + "perk.cgm.recoil.positive": "Сниженная отдача", + "perk.cgm.silenced.positive": "Заглушён", + "perk.cgm.sound_radius.negative": "Увеличенный радиус звука огня", + "perk.cgm.sound_radius.positive": "Уменьшенный радиус звука огня", + "perk.cgm.title": "Перки:", + "slot.cgm.attachment.barrel": "Ствол", + "slot.cgm.attachment.not_applicable": "§cНе применимо", + "slot.cgm.attachment.scope": "Прицел", + "slot.cgm.attachment.stock": "Ложа", + "slot.cgm.attachment.under_barrel": "Подствольник", + "subtitle.cgm.attach": "Обвес прикреплён", + "subtitle.cgm.cock": "Взведение оружия", + "subtitle.cgm.fire": "Стрельба", + "subtitle.cgm.fire.enchanted": "Зачарованная стрельба", + "subtitle.cgm.fire.silenced": "Приглушенная стрельба", + "subtitle.cgm.grenade.pin": "Чека гранаты", + "subtitle.cgm.reload": "Перезарядка", + "subtitle.cgm.stun.explosion": "Взрыв оглушающей гранаты", + "subtitle.cgm.stun.ring": "Звон" +} \ No newline at end of file diff --git a/src/main/resources/assets/cgm/lang/zh_cn.json b/src/main/resources/assets/cgm/lang/zh_cn.json index 360fd4d56..6710152f0 100644 --- a/src/main/resources/assets/cgm/lang/zh_cn.json +++ b/src/main/resources/assets/cgm/lang/zh_cn.json @@ -1,69 +1,24 @@ { "block.cgm.workbench": "工作台", - "item.cgm.pistol": "手枪", - "item.cgm.shotgun": "霰弹枪", - "item.cgm.sniper_rifle": "狙击步枪", - "item.cgm.grenade_launcher": "榴弹发射器", - "item.cgm.bazooka": "火箭筒", - "item.cgm.mini_gun": "速射机枪", - "item.cgm.rifle": "步枪", - "item.cgm.assault_rifle": "突击步枪", - "item.cgm.machine_pistol": "冲锋枪", - "item.cgm.heavy_rifle": "重型步枪", - "item.cgm.basic_bullet": "基础子弹", - "item.cgm.advanced_bullet": "高级子弹", - "item.cgm.shell": "霰弹", - "item.cgm.grenade": "榴弹", - "item.cgm.stun_grenade": "震撼弹", - "item.cgm.missile": "火箭弹", - "item.cgm.short_scope": "短距瞄准镜", - "item.cgm.medium_scope": "中距瞄准镜", - "item.cgm.long_scope": "长距瞄准镜", - "item.cgm.silencer": "消音器", - "item.cgm.light_stock": "轻型枪托", - "item.cgm.tactical_stock": "战术枪托", - "item.cgm.weighted_stock": "重型枪托", - "item.cgm.light_grip": "轻型握把", - "item.cgm.specialised_grip": "特种握把", - "item.minecraft.potion.effect.blinding": "致盲药水", - "item.minecraft.potion.effect.deafening": "耳聋药水", - "item.minecraft.lingering_potion.effect.blinding": "持续致盲药水", - "item.minecraft.lingering_potion.effect.deafening": "持续耳聋药水", - "itemGroup.cgm": "MrCrayfish的枪械模组", - "death.attack.cgm.bullet.killed": "%1$s 被 %2$s 击杀了", - "death.attack.cgm.bullet.eliminated": "%1$s 被 %2$s 淘汰了", - "death.attack.cgm.bullet.executed": "%1$s 被 %2$s 处决了", - "death.attack.cgm.bullet.annihilated": "%1$s 被 %2$s 歼灭了", - "death.attack.cgm.bullet.decimated": "%1$s 被 %2$s 清除了", - "info.cgm.damage": "伤害: %s", - "info.cgm.ignore_ammo": "无限弹药", - "info.cgm.ammo": "弹药: %s", - "info.cgm.ammo_type": "弹药类型: %s", - "info.cgm.attachment_help": "按下 %s 打开配件栏", - "key.categories.cgm": "MrCrayfish的枪械模组", - "key.cgm.reload": "装填弹药", - "key.cgm.unload": "卸载弹药", - "key.cgm.attachments": "修改配件", - "effect.cgm.blinded": "致盲", - "effect.cgm.deafened": "耳聋", - "subtitle.cgm.stun.explosion": "震撼弹爆炸", - "subtitle.cgm.stun.ring": "耳鸣", - "subtitle.cgm.fire": "枪火", - "subtitle.cgm.fire.silenced": "被消音的枪火", - "subtitle.cgm.fire.enchanted": "Enchanted Gunfire", - "subtitle.cgm.reload": "弹药装填", - "subtitle.cgm.grenade.pin": "榴弹拉环", - "subtitle.cgm.attach": "配件安装", - "subtitle.cgm.cock": "Cocking Weapon", - "cgm.option_list.no_items": "无物品", - "cgm.options.adsSensitivity": "ADS灵敏度", - "cgm.options.adsSensitivity.format": "ADS灵敏度: %s", - "cgm.options.crosshair": "Crosshair", + "button.categories.cgm": "MrCrayfish的枪械模组", + "cgm.action.aim": "瞄准", + "cgm.action.reload": "装填弹药", + "cgm.action.shoot": "开火", + "cgm.action.steady_aim": "稳定瞄准", + "cgm.button.aim": "开镜瞄准", + "cgm.button.attachments": "修改配件", + "cgm.button.config.tooltip": "配置设置", + "cgm.button.reload": "装填弹药 / 卸载弹药", + "cgm.button.shoot": "武器开火", + "cgm.button.steadyAim": "稳定瞄准", + "cgm.category.workbench.materials": "材料", + "cgm.category.workbench.title": "枪械装配台", + "cgm.chat.install_configured": "安装%s以更好地管理配置设置", + "cgm.chat.open_curseforge_page": "打开CurseForge页面", "cgm.crosshair.arrow": "箭头", "cgm.crosshair.better_default": "改进的默认", "cgm.crosshair.box": "框", "cgm.crosshair.circle": "圆", - "minecraft.crosshair.default": "默认", "cgm.crosshair.dot": "点", "cgm.crosshair.filled_circle": "填充的圆", "cgm.crosshair.hit_marker": "击中标记", @@ -73,74 +28,125 @@ "cgm.crosshair.square": "矩形", "cgm.crosshair.t": "T", "cgm.crosshair.tech": "科技", - "gui.cgm.workbench.assemble": "组装", - "gui.cgm.workbench.show_remaining": "只显示剩余需求", - "gui.cgm.workbench.tab.weapons": "武器", - "gui.cgm.workbench.tab.attachments": "配件", - "gui.cgm.workbench.tab.ammo": "弹药", - "gui.cgm.workbench.tab.misc": "杂项", - "container.cgm.workbench": "枪械工作台", + "cgm.option_list.no_items": "无物品", + "cgm.options.adsSensitivity": "ADS灵敏度", + "cgm.options.adsSensitivity.format": "ADS灵敏度: %s", + "cgm.options.crosshair": "准星", "container.cgm.attachments": "修改配件", "container.cgm.attachments.window_help": "点按以移动和旋转", - "slot.cgm.attachment.not_applicable": "§c不适用", - "slot.cgm.attachment.scope": "瞄准镜", - "slot.cgm.attachment.barrel": "枪管", - "slot.cgm.attachment.stock": "枪托", - "slot.cgm.attachment.under_barrel": "握把", - "enchantment.cgm.quick_hands": "熟练手", - "enchantment.cgm.trigger_finger": "快速扳机", - "enchantment.cgm.lightweight": "轻装上阵", - "enchantment.cgm.collateral": "间接伤害", - "enchantment.cgm.over_capacity": "超容量", - "enchantment.cgm.reclaimed": "弹药回收", + "container.cgm.workbench": "枪械工作台", + "death.attack.cgm.bullet.annihilated": "%1$s 被 %2$s 歼灭了", + "death.attack.cgm.bullet.decimated": "%1$s 被 %2$s 清除了", + "death.attack.cgm.bullet.eliminated": "%1$s 被 %2$s 淘汰了", + "death.attack.cgm.bullet.executed": "%1$s 被 %2$s 处决了", + "death.attack.cgm.bullet.killed": "%1$s 被 %2$s 击杀了", + "effect.cgm.blinded": "致盲", + "effect.cgm.deafened": "耳聋", "enchantment.cgm.accelerator": "加速器", - "enchantment.cgm.puncturing": "穿甲弹", + "enchantment.cgm.accelerator.desc": "提高子弹飞行速度,使其造成更大的伤害", + "enchantment.cgm.collateral": "间接伤害", + "enchantment.cgm.collateral.desc": "使子弹能够穿过多个实体", "enchantment.cgm.fire_starter": "纵火者", - "enchantment.cgm.quick_hands.desc": "加快装填速度", - "enchantment.cgm.trigger_finger.desc": "提高武器射速", + "enchantment.cgm.fire_starter.desc": "使子弹能够引燃方块和实体", + "enchantment.cgm.lightweight": "轻装上阵", "enchantment.cgm.lightweight.desc": "减轻武器重量,提高ADS速度", - "enchantment.cgm.collateral.desc": "使子弹能够穿过多个实体", + "enchantment.cgm.over_capacity": "超容量", "enchantment.cgm.over_capacity.desc": "增加弹药容量", - "enchantment.cgm.reclaimed.desc": "有几率在开火时不会消耗子弹", - "enchantment.cgm.accelerator.desc": "提高子弹飞行速度,使其造成更大的伤害", + "enchantment.cgm.puncturing": "穿甲弹", "enchantment.cgm.puncturing.desc": "子弹有几率造成爆发伤害", - "enchantment.cgm.fire_starter.desc": "使子弹能够引燃方块和实体", - "perk.cgm.title": "额外:", - "perk.cgm.entry.positive": "+ %s", + "enchantment.cgm.quick_hands": "熟练手", + "enchantment.cgm.quick_hands.desc": "加快装填速度", + "enchantment.cgm.reclaimed": "弹药回收", + "enchantment.cgm.reclaimed.desc": "有几率在开火时不会消耗子弹", + "enchantment.cgm.trigger_finger": "快速扳机", + "enchantment.cgm.trigger_finger.desc": "提高武器射速", + "gui.cgm.assemble": "组装", + "gui.cgm.show_remaining": "只显示剩余需求", + "gui.cgm.workbench.assemble": "组装", + "gui.cgm.workbench.show_remaining": "只显示剩余需求", + "gui.cgm.workbench.tab.ammo": "弹药", + "gui.cgm.workbench.tab.attachments": "配件", + "gui.cgm.workbench.tab.misc": "杂项", + "gui.cgm.workbench.tab.weapons": "武器", + "info.cgm.ammo": "弹药: %s", + "info.cgm.ammo_type": "弹药类型: %s", + "info.cgm.attachment_help": "按下 %s 打开配件栏", + "info.cgm.damage": "伤害: %s", + "info.cgm.ignore_ammo": "无限弹药", + "item.cgm.advanced_bullet": "高级子弹", + "item.cgm.assault_rifle": "突击步枪", + "item.cgm.basic_bullet": "基础子弹", + "item.cgm.bazooka": "火箭筒", + "item.cgm.grenade": "榴弹", + "item.cgm.grenade_launcher": "榴弹发射器", + "item.cgm.heavy_rifle": "重型步枪", + "item.cgm.light_grip": "轻型握把", + "item.cgm.light_stock": "轻型枪托", + "item.cgm.long_scope": "长距瞄准镜", + "item.cgm.machine_pistol": "冲锋枪", + "item.cgm.medium_scope": "中距瞄准镜", + "item.cgm.mini_gun": "速射机枪", + "item.cgm.missile": "火箭弹", + "item.cgm.pistol": "手枪", + "item.cgm.rifle": "步枪", + "item.cgm.shell": "霰弹", + "item.cgm.short_scope": "短距瞄准镜", + "item.cgm.shotgun": "霰弹枪", + "item.cgm.silencer": "消音器", + "item.cgm.sniper_rifle": "狙击步枪", + "item.cgm.specialised_grip": "特种握把", + "item.cgm.stun_grenade": "震撼弹", + "item.cgm.tactical_stock": "战术枪托", + "item.cgm.weighted_stock": "重型枪托", + "item.minecraft.lingering_potion.effect.blinding": "持续致盲药水", + "item.minecraft.lingering_potion.effect.deafening": "持续耳聋药水", + "item.minecraft.potion.effect.blinding": "致盲药水", + "item.minecraft.potion.effect.deafening": "耳聋药水", + "itemGroup.cgm": "MrCrayfish的枪械模组", + "key.categories.cgm": "MrCrayfish的枪械模组", + "key.cgm.attachments": "修改配件", + "key.cgm.reload": "装填弹药", + "key.cgm.unload": "卸载弹药", + "minecraft.crosshair.default": "默认", + "pack.cgm.pbr.desc": "适用于CGM枪械的PBR纹理", + "pack.cgm.pbr.title": "CGM PBR纹理", + "perk.cgm.additional_damage.negative": "降低伤害 §r(§l-%s ♥§r)", + "perk.cgm.additional_damage.positive": "额外伤害 §r(§l+%s ♥§r)", + "perk.cgm.ads_speed.negative": "降低ADS速度", + "perk.cgm.ads_speed.positive": "提高ADS速度", "perk.cgm.entry.negative": "- %s", - "perk.cgm.fire_volume.positive": "减小枪声", + "perk.cgm.entry.positive": "+ %s", "perk.cgm.fire_volume.negative": "增大枪声", - "perk.cgm.silenced.positive": "消音", - "perk.cgm.sound_radius.positive": "缩小枪声范围", - "perk.cgm.sound_radius.negative": "增大枪声范围", - "perk.cgm.additional_damage.positive": "额外伤害 §r(§l+%s ♥§r)", - "perk.cgm.additional_damage.negative": "降低伤害 §r(§l-%s ♥§r)", - "perk.cgm.modified_damage.positive": "提高武器伤害", + "perk.cgm.fire_volume.positive": "减小枪声", "perk.cgm.modified_damage.negative": "降低武器伤害", - "perk.cgm.projectile_speed.positive": "加快子弹飞行速度", + "perk.cgm.modified_damage.positive": "提高武器伤害", + "perk.cgm.projectile_life.negative": "缩小伤害范围", + "perk.cgm.projectile_life.positive": "增大伤害范围", "perk.cgm.projectile_speed.negative": "减慢子弹飞行速度", - "perk.cgm.projectile_spread.positive": "降低子弹扩散", + "perk.cgm.projectile_speed.positive": "加快子弹飞行速度", "perk.cgm.projectile_spread.negative": "增加子弹扩散", - "perk.cgm.projectile_life.positive": "增大伤害范围", - "perk.cgm.projectile_life.negative": "缩小伤害范围", - "perk.cgm.recoil.positive": "降低后坐力", - "perk.cgm.recoil.negative": "提高后坐力", - "perk.cgm.ads_speed.positive": "提高ADS速度", - "perk.cgm.ads_speed.negative": "降低ADS速度", - "perk.cgm.rate.positive": "提高射速", + "perk.cgm.projectile_spread.positive": "降低子弹扩散", "perk.cgm.rate.negative": "降低射速", - "gui.cgm.assemble": "组装", - "gui.cgm.show_remaining": "只显示剩余需求", - "button.categories.cgm": "MrCrayfish的枪械模组", - "cgm.button.shoot": "武器开火", - "cgm.button.aim": "开镜瞄准", - "cgm.button.reload": "装填弹药 / 卸载弹药", - "cgm.button.attachments": "修改配件", - "cgm.button.steadyAim": "稳定瞄准", - "cgm.category.workbench.title": "Assembling", - "cgm.category.workbench.materials": "Materials", - "cgm.action.aim": "Aim", - "cgm.action.shoot": "Shoot", - "cgm.action.reload": "Reload", - "cgm.action.steady_aim": "Steady Aim" + "perk.cgm.rate.positive": "提高射速", + "perk.cgm.recoil.negative": "提高后坐力", + "perk.cgm.recoil.positive": "降低后坐力", + "perk.cgm.silenced.positive": "消音", + "perk.cgm.sound_radius.negative": "增大枪声范围", + "perk.cgm.sound_radius.positive": "缩小枪声范围", + "perk.cgm.title": "额外:", + "slot.cgm.attachment.barrel": "枪管", + "slot.cgm.attachment.incompatible": "这个配件看上去并不合适……", + "slot.cgm.attachment.not_applicable": "§c不适用", + "slot.cgm.attachment.scope": "瞄准镜", + "slot.cgm.attachment.stock": "枪托", + "slot.cgm.attachment.under_barrel": "握把", + "subtitle.cgm.attach": "配件安装", + "subtitle.cgm.cock": "拉动枪机", + "subtitle.cgm.fire": "枪火", + "subtitle.cgm.fire.enchanted": "被附魔的枪火", + "subtitle.cgm.fire.silenced": "被消音的枪火", + "subtitle.cgm.grenade.pin": "榴弹拉环", + "subtitle.cgm.reload": "弹药装填", + "subtitle.cgm.stun.explosion": "震撼弹爆炸", + "subtitle.cgm.stun.ring": "耳鸣" } \ No newline at end of file diff --git a/src/main/resources/assets/cgm/lang/zh_tw.json b/src/main/resources/assets/cgm/lang/zh_tw.json index 0c3587849..f8ddcdc4e 100644 --- a/src/main/resources/assets/cgm/lang/zh_tw.json +++ b/src/main/resources/assets/cgm/lang/zh_tw.json @@ -1,69 +1,21 @@ { "block.cgm.workbench": "工作台", - "item.cgm.pistol": "手槍", - "item.cgm.shotgun": "滑膛槍", - "item.cgm.sniper_rifle": "狙擊槍", - "item.cgm.grenade_launcher": "榴彈發射器", - "item.cgm.bazooka": "火箭筒", - "item.cgm.mini_gun": "迷你槍", - "item.cgm.rifle": "步槍", - "item.cgm.assault_rifle": "突擊步槍", - "item.cgm.machine_pistol": "機槍", - "item.cgm.heavy_rifle": "重型步槍", - "item.cgm.basic_bullet": "普通子彈", - "item.cgm.advanced_bullet": "高級子彈", - "item.cgm.shell": "子彈殼", - "item.cgm.grenade": "手榴彈", - "item.cgm.stun_grenade": "眩暈手榴彈", - "item.cgm.missile": "導彈", - "item.cgm.short_scope": "短範圍", - "item.cgm.medium_scope": "中範圍", - "item.cgm.long_scope": "長範圍", - "item.cgm.silencer": "消音器", - "item.cgm.light_stock": "Light Stock", - "item.cgm.tactical_stock": "Tactical Stock", - "item.cgm.weighted_stock": "Weighted Stock", - "item.cgm.light_grip": "Light Grip", - "item.cgm.specialised_grip": "Specialised Grip", - "item.minecraft.potion.effect.blinding": "致盲藥水", - "item.minecraft.potion.effect.deafening": "耳聾藥水", - "item.minecraft.lingering_potion.effect.blinding": "滯留致盲藥水", - "item.minecraft.lingering_potion.effect.deafening": "滯留耳聾藥水", - "itemGroup.cgm": "MrCrayfish 槍械模組", - "death.attack.cgm.bullet.killed": "%1$s 被 %2$s 擊倒了", - "death.attack.cgm.bullet.eliminated": "%1$s 被 %2$s 消滅了", - "death.attack.cgm.bullet.executed": "%1$s 被 %2$s 處決了", - "death.attack.cgm.bullet.annihilated": "%1$s 被 %2$s 殲滅了", - "death.attack.cgm.bullet.decimated": "%1$s 被 %2$s 毀了", - "info.cgm.damage": "傷害: %s", - "info.cgm.ignore_ammo": "無限彈藥", - "info.cgm.ammo": "彈藥: %s", - "info.cgm.ammo_type": "Ammo Type: %s", - "info.cgm.attachment_help": "Press %s in-game for Attachments", - "key.categories.cgm": "MrCrayfish's Gun Mod", - "key.cgm.reload": "裝上彈藥", - "key.cgm.unload": "卸下彈藥", - "key.cgm.attachments": "修改配件", - "effect.cgm.blinded": "致盲", - "effect.cgm.deafened": "耳聾", - "subtitle.cgm.stun.explosion": "眩暈手榴彈爆炸", - "subtitle.cgm.stun.ring": "眩暈手榴彈的響聲", - "subtitle.cgm.fire": "炮火", - "subtitle.cgm.fire.silenced": "被消音的炮火", - "subtitle.cgm.fire.enchanted": "Enchanted Gunfire", - "subtitle.cgm.reload": "裝上彈藥中", - "subtitle.cgm.grenade.pin": "手榴彈的銷子", - "subtitle.cgm.attach": "裝上配件", - "subtitle.cgm.cock": "Cocking Weapon", - "cgm.option_list.no_items": "No Items", - "cgm.options.adsSensitivity": "ADS靈敏度", - "cgm.options.adsSensitivity.format": "ADS靈敏度: %s", - "cgm.options.crosshair": "Crosshair", + "button.categories.cgm": "MrCrayfish's Gun Mod", + "cgm.action.aim": "Aim", + "cgm.action.reload": "Reload", + "cgm.action.shoot": "Shoot", + "cgm.action.steady_aim": "Steady Aim", + "cgm.button.aim": "Aim Down Sight", + "cgm.button.attachments": "Modify Attachments", + "cgm.button.reload": "Reload / Unload", + "cgm.button.shoot": "Shoot Weapon", + "cgm.button.steadyAim": "Steady Aim", + "cgm.category.workbench.materials": "Materials", + "cgm.category.workbench.title": "Assembling", "cgm.crosshair.arrow": "Arrow", "cgm.crosshair.better_default": "Better Default", "cgm.crosshair.box": "Box", "cgm.crosshair.circle": "Circle", - "minecraft.crosshair.default": "Default", "cgm.crosshair.dot": "Dot", "cgm.crosshair.filled_circle": "Filled Circle", "cgm.crosshair.hit_marker": "Hit Marker", @@ -73,74 +25,122 @@ "cgm.crosshair.square": "Square", "cgm.crosshair.t": "T", "cgm.crosshair.tech": "Tech", - "gui.cgm.workbench.assemble": "Assemble", - "gui.cgm.workbench.show_remaining": "Show Remaining", - "gui.cgm.workbench.tab.weapons": "Weapons", - "gui.cgm.workbench.tab.attachments": "Attachments", - "gui.cgm.workbench.tab.ammo": "Ammo", - "gui.cgm.workbench.tab.misc": "Miscellaneous", - "container.cgm.workbench": "Workbench", + "cgm.option_list.no_items": "No Items", + "cgm.options.adsSensitivity": "ADS靈敏度", + "cgm.options.adsSensitivity.format": "ADS靈敏度: %s", + "cgm.options.crosshair": "Crosshair", "container.cgm.attachments": "修改配件", "container.cgm.attachments.window_help": "點擊以移動和旋轉", - "slot.cgm.attachment.not_applicable": "§c不適用", - "slot.cgm.attachment.scope": "範圍", - "slot.cgm.attachment.barrel": "槍管", - "slot.cgm.attachment.stock": "Stock", - "slot.cgm.attachment.under_barrel": "Under Barrel", - "enchantment.cgm.quick_hands": "Quick Hands", - "enchantment.cgm.trigger_finger": "Trigger Finger", - "enchantment.cgm.lightweight": "Lightweight", - "enchantment.cgm.collateral": "Collateral", - "enchantment.cgm.over_capacity": "Over Capacity", - "enchantment.cgm.reclaimed": "Reclaimed", + "container.cgm.workbench": "Workbench", + "death.attack.cgm.bullet.annihilated": "%1$s 被 %2$s 殲滅了", + "death.attack.cgm.bullet.decimated": "%1$s 被 %2$s 毀了", + "death.attack.cgm.bullet.eliminated": "%1$s 被 %2$s 消滅了", + "death.attack.cgm.bullet.executed": "%1$s 被 %2$s 處決了", + "death.attack.cgm.bullet.killed": "%1$s 被 %2$s 擊倒了", + "effect.cgm.blinded": "致盲", + "effect.cgm.deafened": "耳聾", "enchantment.cgm.accelerator": "Accelerator", - "enchantment.cgm.puncturing": "Puncturing", + "enchantment.cgm.accelerator.desc": "Increases the speed of fired projectiles causing them to do more damage", + "enchantment.cgm.collateral": "Collateral", + "enchantment.cgm.collateral.desc": "Makes fired bullets travel through multiple entities", "enchantment.cgm.fire_starter": "Fire Starter", - "enchantment.cgm.quick_hands.desc": "Increases the speed of reloading weapons", - "enchantment.cgm.trigger_finger.desc": "Increases the speed you can fire weapons", + "enchantment.cgm.fire_starter.desc": "Fired bullets will set blocks and entities on fire upon impact", + "enchantment.cgm.lightweight": "Lightweight", "enchantment.cgm.lightweight.desc": "Reduces the weight of a weapon to increase ADS speed", - "enchantment.cgm.collateral.desc": "Makes fired bullets travel through multiple entities", + "enchantment.cgm.over_capacity": "Over Capacity", "enchantment.cgm.over_capacity.desc": "Increases the ammo capacity of a weapon", - "enchantment.cgm.reclaimed.desc": "Creates a chance that a bullet won't be consumed upon firing a weapon", - "enchantment.cgm.accelerator.desc": "Increases the speed of fired projectiles causing them to do more damage", + "enchantment.cgm.puncturing": "Puncturing", "enchantment.cgm.puncturing.desc": "Creates a chance that a bullet will deal critical damage", - "enchantment.cgm.fire_starter.desc": "Fired bullets will set blocks and entities on fire upon impact", - "perk.cgm.title": "Perks:", - "perk.cgm.entry.positive": "+ %s", + "enchantment.cgm.quick_hands": "Quick Hands", + "enchantment.cgm.quick_hands.desc": "Increases the speed of reloading weapons", + "enchantment.cgm.reclaimed": "Reclaimed", + "enchantment.cgm.reclaimed.desc": "Creates a chance that a bullet won't be consumed upon firing a weapon", + "enchantment.cgm.trigger_finger": "Trigger Finger", + "enchantment.cgm.trigger_finger.desc": "Increases the speed you can fire weapons", + "gui.cgm.assemble": "Assemble", + "gui.cgm.show_remaining": "Show Remaining", + "gui.cgm.workbench.assemble": "Assemble", + "gui.cgm.workbench.show_remaining": "Show Remaining", + "gui.cgm.workbench.tab.ammo": "Ammo", + "gui.cgm.workbench.tab.attachments": "Attachments", + "gui.cgm.workbench.tab.misc": "Miscellaneous", + "gui.cgm.workbench.tab.weapons": "Weapons", + "info.cgm.ammo": "彈藥: %s", + "info.cgm.ammo_type": "Ammo Type: %s", + "info.cgm.attachment_help": "Press %s in-game for Attachments", + "info.cgm.damage": "傷害: %s", + "info.cgm.ignore_ammo": "無限彈藥", + "item.cgm.advanced_bullet": "高級子彈", + "item.cgm.assault_rifle": "突擊步槍", + "item.cgm.basic_bullet": "普通子彈", + "item.cgm.bazooka": "火箭筒", + "item.cgm.grenade": "手榴彈", + "item.cgm.grenade_launcher": "榴彈發射器", + "item.cgm.heavy_rifle": "重型步槍", + "item.cgm.light_grip": "Light Grip", + "item.cgm.light_stock": "Light Stock", + "item.cgm.long_scope": "長範圍", + "item.cgm.machine_pistol": "機槍", + "item.cgm.medium_scope": "中範圍", + "item.cgm.mini_gun": "迷你槍", + "item.cgm.missile": "導彈", + "item.cgm.pistol": "手槍", + "item.cgm.rifle": "步槍", + "item.cgm.shell": "子彈殼", + "item.cgm.short_scope": "短範圍", + "item.cgm.shotgun": "滑膛槍", + "item.cgm.silencer": "消音器", + "item.cgm.sniper_rifle": "狙擊槍", + "item.cgm.specialised_grip": "Specialised Grip", + "item.cgm.stun_grenade": "眩暈手榴彈", + "item.cgm.tactical_stock": "Tactical Stock", + "item.cgm.weighted_stock": "Weighted Stock", + "item.minecraft.lingering_potion.effect.blinding": "滯留致盲藥水", + "item.minecraft.lingering_potion.effect.deafening": "滯留耳聾藥水", + "item.minecraft.potion.effect.blinding": "致盲藥水", + "item.minecraft.potion.effect.deafening": "耳聾藥水", + "itemGroup.cgm": "MrCrayfish 槍械模組", + "key.categories.cgm": "MrCrayfish's Gun Mod", + "key.cgm.attachments": "修改配件", + "key.cgm.reload": "裝上彈藥", + "key.cgm.unload": "卸下彈藥", + "minecraft.crosshair.default": "Default", + "perk.cgm.additional_damage.negative": "Negative Damage §r(§l-%s ♥§r)", + "perk.cgm.additional_damage.positive": "Additional Damage §r(§l+%s ♥§r)", + "perk.cgm.ads_speed.negative": "Reduced ADS Speed", + "perk.cgm.ads_speed.positive": "Increased ADS Speed", "perk.cgm.entry.negative": "- %s", - "perk.cgm.fire_volume.positive": "Quieter Fire Sound", + "perk.cgm.entry.positive": "+ %s", "perk.cgm.fire_volume.negative": "Louder Fire Sound", - "perk.cgm.silenced.positive": "Silenced", - "perk.cgm.sound_radius.positive": "Reduced Fire Sound Radius", - "perk.cgm.sound_radius.negative": "Increased Fire Sound Radius", - "perk.cgm.additional_damage.positive": "Additional Damage §r(§l+%s ♥§r)", - "perk.cgm.additional_damage.negative": "Negative Damage §r(§l-%s ♥§r)", - "perk.cgm.modified_damage.positive": "Increased Weapon Damage", + "perk.cgm.fire_volume.positive": "Quieter Fire Sound", "perk.cgm.modified_damage.negative": "Reduced Weapon Damage", - "perk.cgm.projectile_speed.positive": "Increased Projectile Speed", + "perk.cgm.modified_damage.positive": "Increased Weapon Damage", + "perk.cgm.projectile_life.negative": "Reduced Damage Range", + "perk.cgm.projectile_life.positive": "Increased Damage Range", "perk.cgm.projectile_speed.negative": "Reduced Projectile Speed", - "perk.cgm.projectile_spread.positive": "Reduced Projectile Spread", + "perk.cgm.projectile_speed.positive": "Increased Projectile Speed", "perk.cgm.projectile_spread.negative": "Increased Projectile Spread", - "perk.cgm.projectile_life.positive": "Increased Damage Range", - "perk.cgm.projectile_life.negative": "Reduced Damage Range", - "perk.cgm.recoil.positive": "Reduced Recoil", - "perk.cgm.recoil.negative": "Increased Recoil", - "perk.cgm.ads_speed.positive": "Increased ADS Speed", - "perk.cgm.ads_speed.negative": "Reduced ADS Speed", - "perk.cgm.rate.positive": "Increased Fire Rate", + "perk.cgm.projectile_spread.positive": "Reduced Projectile Spread", "perk.cgm.rate.negative": "Reduced Fire Rate", - "gui.cgm.assemble": "Assemble", - "gui.cgm.show_remaining": "Show Remaining", - "button.categories.cgm": "MrCrayfish's Gun Mod", - "cgm.button.shoot": "Shoot Weapon", - "cgm.button.aim": "Aim Down Sight", - "cgm.button.reload": "Reload / Unload", - "cgm.button.attachments": "Modify Attachments", - "cgm.button.steadyAim": "Steady Aim", - "cgm.category.workbench.title": "Assembling", - "cgm.category.workbench.materials": "Materials", - "cgm.action.aim": "Aim", - "cgm.action.shoot": "Shoot", - "cgm.action.reload": "Reload", - "cgm.action.steady_aim": "Steady Aim" + "perk.cgm.rate.positive": "Increased Fire Rate", + "perk.cgm.recoil.negative": "Increased Recoil", + "perk.cgm.recoil.positive": "Reduced Recoil", + "perk.cgm.silenced.positive": "Silenced", + "perk.cgm.sound_radius.negative": "Increased Fire Sound Radius", + "perk.cgm.sound_radius.positive": "Reduced Fire Sound Radius", + "perk.cgm.title": "Perks:", + "slot.cgm.attachment.barrel": "槍管", + "slot.cgm.attachment.not_applicable": "§c不適用", + "slot.cgm.attachment.scope": "範圍", + "slot.cgm.attachment.stock": "Stock", + "slot.cgm.attachment.under_barrel": "Under Barrel", + "subtitle.cgm.attach": "裝上配件", + "subtitle.cgm.cock": "Cocking Weapon", + "subtitle.cgm.fire": "炮火", + "subtitle.cgm.fire.enchanted": "Enchanted Gunfire", + "subtitle.cgm.fire.silenced": "被消音的炮火", + "subtitle.cgm.grenade.pin": "手榴彈的銷子", + "subtitle.cgm.reload": "裝上彈藥中", + "subtitle.cgm.stun.explosion": "眩暈手榴彈爆炸", + "subtitle.cgm.stun.ring": "眩暈手榴彈的響聲" } \ No newline at end of file diff --git a/src/main/resources/assets/cgm/models/item/advanced_bullet.json b/src/main/resources/assets/cgm/models/item/advanced_bullet.json index 0ff5244fb..929ec0a2d 100644 --- a/src/main/resources/assets/cgm/models/item/advanced_bullet.json +++ b/src/main/resources/assets/cgm/models/item/advanced_bullet.json @@ -6,8 +6,8 @@ }, "elements": [ { - "from": [6, 0, 6], - "to": [10, 14, 10], + "from": [6, 2, 6], + "to": [10, 16, 10], "rotation": {"angle": 0, "axis": "y", "origin": [14, 8, 14]}, "faces": { "north": {"uv": [0, 0, 2, 7], "texture": "#1"}, @@ -15,7 +15,7 @@ "south": {"uv": [0, 0, 2, 7], "texture": "#1"}, "west": {"uv": [0, 0, 2, 7], "texture": "#1"}, "up": {"uv": [2, 0, 4, 2], "texture": "#1"}, - "down": {"uv": [2, 2, 6, 6], "texture": "#1"} + "down": {"uv": [2, 2, 4, 4], "texture": "#1"} } } ], @@ -41,7 +41,8 @@ "scale": [0.4, 0.4, 0.4] }, "ground": { - "scale": [0.5, 0.5, 0.5] + "translation": [0, 1.5, 0], + "scale": [0.25, 0.25, 0.25] }, "gui": { "rotation": [30, 225, 0], diff --git a/src/main/resources/assets/cgm/models/item/basic_bullet.json b/src/main/resources/assets/cgm/models/item/basic_bullet.json index f67fa27da..362538df7 100644 --- a/src/main/resources/assets/cgm/models/item/basic_bullet.json +++ b/src/main/resources/assets/cgm/models/item/basic_bullet.json @@ -41,6 +41,7 @@ "scale": [0.4, 0.4, 0.4] }, "ground": { + "translation": [0, 1.5, 0], "scale": [0.25, 0.25, 0.25] }, "gui": { diff --git a/src/main/resources/assets/cgm/models/item/missile.json b/src/main/resources/assets/cgm/models/item/missile.json index 43e98bc1d..42fd6084f 100644 --- a/src/main/resources/assets/cgm/models/item/missile.json +++ b/src/main/resources/assets/cgm/models/item/missile.json @@ -105,7 +105,7 @@ "scale": [0.4, 0.4, 0.4] }, "ground": { - "translation": [0, 2, 0], + "translation": [0, 2.5, 0], "scale": [0.6, 0.6, 0.6] }, "gui": { diff --git a/src/main/resources/assets/cgm/models/item/shell.json b/src/main/resources/assets/cgm/models/item/shell.json index 081041629..6b56f1fb7 100644 --- a/src/main/resources/assets/cgm/models/item/shell.json +++ b/src/main/resources/assets/cgm/models/item/shell.json @@ -9,12 +9,12 @@ "from": [6, 0, 6], "to": [10, 10, 10], "faces": { - "north": {"uv": [2, 0, 0, 5], "texture": "#1"}, - "east": {"uv": [0, 0, 2, 5], "texture": "#1"}, - "south": {"uv": [2, 0, 0, 5], "texture": "#1"}, - "west": {"uv": [0, 0, 2, 5], "texture": "#1"}, - "up": {"uv": [2, 0, 4, 2], "texture": "#1"}, - "down": {"uv": [2, 2, 4, 4], "texture": "#1"} + "north": {"uv": [2, 0, 0, 5], "rotation": 180, "texture": "#1"}, + "east": {"uv": [0, 0, 2, 5], "rotation": 180, "texture": "#1"}, + "south": {"uv": [2, 0, 0, 5], "rotation": 180, "texture": "#1"}, + "west": {"uv": [0, 0, 2, 5], "rotation": 180, "texture": "#1"}, + "up": {"uv": [2, 2, 4, 4], "rotation": 180, "texture": "#1"}, + "down": {"uv": [2, 0, 4, 2], "rotation": 180, "texture": "#1"} } } ], @@ -30,7 +30,8 @@ "scale": [0.4, 0.4, 0.4] }, "ground": { - "scale": [0.5, 0.5, 0.5] + "translation": [0, 1.5, 0], + "scale": [0.25, 0.25, 0.25] }, "gui": { "rotation": [30, 225, 0], diff --git a/src/main/resources/assets/cgm/sounds/entity/stun_grenade/explosion.ogg b/src/main/resources/assets/cgm/sounds/entity/stun_grenade/explosion.ogg index 04f7975b665ef2581969d206abd5a1e7dd77db7f..41a4bcd6ad21e4fead7b4e8b5a8ed75916ec628e 100644 GIT binary patch literal 6890 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 JYwHmtIsg?OI!*up diff --git a/src/main/resources/cgm.mixins.json b/src/main/resources/cgm.mixins.json index 1e8ce2e7f..c6dbab987 100644 --- a/src/main/resources/cgm.mixins.json +++ b/src/main/resources/cgm.mixins.json @@ -1,24 +1,25 @@ { - "required": true, - "package": "com.mrcrayfish.guns.mixin", - "compatibilityLevel": "JAVA_8", - "minVersion": "0.8", - "refmap": "cgm.refmap.json", - "plugin": "com.mrcrayfish.guns.mixin.MixinPlugin", - "mixins": [ - "common.EndPortalBlockMixin", - "common.LivingEntityMixin", - "common.SittingPhaseMixin" - ], - "client": [ - "client.GameRendererMixin", - "client.LevelRendererMixin", - "client.MinecraftMixin", - "client.MouseHandlerMixin", - "client.ItemInHandLayerMixin", - "client.PlayerModelMixin" - ], - "injectors": { - "defaultRequire": 1 - } + "required": true, + "package": "com.mrcrayfish.guns.mixin", + "compatibilityLevel": "JAVA_8", + "minVersion": "0.8", + "refmap": "cgm.refmap.json", + "plugin": "com.mrcrayfish.guns.mixin.MixinPlugin", + "mixins": [ + "common.EndPortalBlockMixin", + "common.LayeredCauldronBlockMixin", + "common.LivingEntityMixin", + "common.SittingPhaseMixin" + ], + "client": [ + "client.GameRendererMixin", + "client.ItemInHandLayerMixin", + "client.LevelRendererMixin", + "client.MinecraftMixin", + "client.MouseHandlerMixin", + "client.PlayerModelMixin" + ], + "injectors": { + "defaultRequire": 1 + } } \ No newline at end of file diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta index dec4a4b7c..331a3c7eb 100644 --- a/src/main/resources/pack.mcmeta +++ b/src/main/resources/pack.mcmeta @@ -1,7 +1,7 @@ { "pack": { "description": "Resources for MrCrayfish's Gun Mod", - "pack_format": 13, + "pack_format": 15, "forge:resource_pack_format": 13, "forge:data_pack_format": 12 }