Stuff go brr
13
build.gradle
@ -18,6 +18,11 @@ repositories {
|
||||
// See https://docs.gradle.org/current/userguide/declaring_repositories.html
|
||||
// for more information about repositories.
|
||||
maven { url 'https://maven.nucleoid.xyz' } // You should have it
|
||||
maven { url = "https://maven.terraformersmc.com/" }
|
||||
maven {
|
||||
name = "Ladysnake Mods"
|
||||
url = 'https://maven.ladysnake.org/releases'
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
@ -31,7 +36,7 @@ dependencies {
|
||||
modImplementation include("eu.pb4:polymer-blocks:${project.polymer_version}")
|
||||
modImplementation include("eu.pb4:polymer-resource-pack:${project.polymer_version}")
|
||||
modImplementation include("eu.pb4:polymer-autohost:${project.polymer_version}")
|
||||
|
||||
modImplementation "eu.pb4.polyport:trinkets:${project.trinkets_version}"
|
||||
|
||||
modImplementation include("xyz.nucleoid:server-translations-api:${project.server_translations_api_version}")
|
||||
|
||||
@ -64,6 +69,12 @@ tasks.withType(JavaCompile).configureEach {
|
||||
}
|
||||
}
|
||||
|
||||
tasks.withType(JavaExec).configureEach {
|
||||
if (name == 'runServer') {
|
||||
jvmArgs '-Dfabric-tag-conventions-v2.missingTagTranslationWarning=VERBOSE'
|
||||
}
|
||||
}
|
||||
|
||||
java {
|
||||
def javaVersion = JavaVersion.toVersion(targetJavaVersion)
|
||||
if (JavaVersion.current() < javaVersion) {
|
||||
|
@ -6,7 +6,7 @@ minecraft_version=1.21
|
||||
yarn_mappings=1.21+build.9
|
||||
loader_version=0.16.0
|
||||
# Mod Properties
|
||||
mod_version=1.4
|
||||
mod_version=1.5
|
||||
maven_group=systems.brn
|
||||
archives_base_name=plasticgun
|
||||
# Dependencies
|
||||
@ -15,3 +15,4 @@ fabric_version=0.100.7+1.21
|
||||
|
||||
polymer_version=0.9.4+1.21
|
||||
server_translations_api_version=2.3.1+1.21-pre2
|
||||
trinkets_version=3.10.0+polymerport.2
|
||||
|
@ -15,9 +15,11 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import systems.brn.plasticgun.bullets.BulletEntity;
|
||||
import systems.brn.plasticgun.bullets.BulletItem;
|
||||
import systems.brn.plasticgun.defence.WeaponArmor;
|
||||
import systems.brn.plasticgun.grenades.GrenadeEntity;
|
||||
import systems.brn.plasticgun.grenades.GrenadeItem;
|
||||
import systems.brn.plasticgun.guns.Gun;
|
||||
import systems.brn.plasticgun.lib.CraftingItem;
|
||||
import systems.brn.plasticgun.lib.EventHandler;
|
||||
import systems.brn.plasticgun.lib.ItemGroups;
|
||||
import systems.brn.plasticgun.shurikens.ShurikenEntity;
|
||||
@ -40,10 +42,14 @@ public class PlasticGun implements ModInitializer {
|
||||
|
||||
public static final ArrayList<ShurikenItem> shurikens = new ArrayList<>();
|
||||
|
||||
public static final ArrayList<CraftingItem> craftingItems = new ArrayList<>();
|
||||
|
||||
public static EntityType<BulletEntity> BULLET_ENTITY_TYPE;
|
||||
|
||||
public static EntityType<GrenadeEntity> GRENADE_ENTITY_TYPE;
|
||||
|
||||
public static final ArrayList<WeaponArmor> weaponArmors = new ArrayList<>();
|
||||
|
||||
public static EntityType<ShurikenEntity> SHURIKEN_ENTITY_TYPE;
|
||||
|
||||
public static EntityType<DamageTester> DAMAGE_TESTER_ENTITY_TYPE;
|
||||
@ -74,23 +80,24 @@ public class PlasticGun implements ModInitializer {
|
||||
bullets.add(new BulletItem("force_container", 99, 0, 888, false, 0, 1));
|
||||
|
||||
// Guns
|
||||
guns.add(new Gun("357_revolver", 1, 8, 5, 6, 45, 357, 14, 0, 0));
|
||||
guns.add(new Gun("colt_1903", 0.3, 10, 5, 8, 38, 32, 5, 0, 0));
|
||||
guns.add(new Gun("colt_45", 0.4, 9, 5, 7, 48, 45, 5, 0, 0));
|
||||
guns.add(new Gun("colt_peacemaker", 0.6, 8, 5, 6, 43, 45, 5, 0, 0));
|
||||
guns.add(new Gun("p2022", 0.2, 12, 5, 10, 41, 9, 5, 0, 0));
|
||||
guns.add(new Gun("snub_nosed_revolver", 0.4, 7, 3, 5, 36, 38, 14, 0, 0));
|
||||
guns.add(new Gun("tokarev_tt_33", 0.7, 10, 5, 8, 45, 762, 5, 0, 0));
|
||||
guns.add(new Gun("ak_47", 0.2, 4, 5, 30, 45, 762, 0, 0, 0));
|
||||
guns.add(new Gun("awp", 1, 4, 20, 1, 75, 762, 20, 0, 0));
|
||||
guns.add(new Gun("357_revolver", 1, 8, 5, 6, 45, 357, 14, 0, 0, 2, 4, 0.2f, 0.5f, -1, 1));
|
||||
guns.add(new Gun("colt_1903", 0.3, 10, 5, 8, 38, 32, 5, 0, 0, 1, 3, 0.1f, 0.3f, -1, 1));
|
||||
guns.add(new Gun("colt_45", 0.4, 9, 5, 7, 48, 45, 5, 0, 0, 1.5f, 2, 0.15f, 0.4f, -1, 1));
|
||||
guns.add(new Gun("colt_peacemaker", 0.6, 8, 5, 6, 43, 45, 5, 0, 0, 0.9f, 2, 0.2f, 0.5f, -1, 1));
|
||||
guns.add(new Gun("p2022", 0.2, 12, 5, 10, 41, 9, 5, 0, 0, 1f, 4, 0.1f, 0.25f, -1, 1));
|
||||
guns.add(new Gun("snub_nosed_revolver", 0.4, 7, 3, 5, 36, 38, 14, 0, 0, 1f, 2, 0.2f, 0.45f, -1, 1));
|
||||
guns.add(new Gun("tokarev_tt_33", 0.7, 10, 5, 8, 45, 762, 5, 0, 0, 1.5f, 2.5f, 0.25f, 0.5f, -1, 1));
|
||||
guns.add(new Gun("ak_47", 0.2, 4, 5, 30, 45, 762, 0, 0, 0, 1f, 2, 0.2f, 0.4f, -1, 1));
|
||||
guns.add(new Gun("awp", 1, 4, 20, 1, 75, 762, 20, 0, 0, 2f, 8, 0.3f, 0.6f, -1, 1));
|
||||
|
||||
guns.add(new Gun("rpg9", 2, 4, 20, 1, 10, 999, 8, 20, 0));
|
||||
guns.add(new Gun("forcegun", 0, 2, 5, 20, 10, 888, 0, 0, 20));
|
||||
guns.add(new Gun("rpg9", 2, 4, 20, 1, 10, 999, 8, 20, 0, 3f, 0.5f, 1, 2, -1, 1));
|
||||
guns.add(new Gun("forcegun", 0, 2, 5, 20, 10, 888, 0, 0, 20, 0f, 0f, 5f, 10f, 0, 0));
|
||||
|
||||
|
||||
grenades.add(new GrenadeItem("grenade_an_m14", 1, 5f, 0.5f, 40, true, false, 0, 0, 0, 8, 0)); // AN-M14 Incendiary Grenade
|
||||
grenades.add(new GrenadeItem("grenade_m34", 1, 10f, 0.5f, 60, true, true, 0, 0, 0, 10, 0)); // M34 White Phosphorus Incendiary Fragmentation Grenade
|
||||
grenades.add(new GrenadeItem("grenade_m18", 1, 0.1f, 0.2f, 50, false, false, 0, 0, 100, 15, 0)); // M18 Smoke Grenadegrenades.add(new GrenadeItem("grenade_m84", 1, 0.5f, 0.2f, 120, false, false, 10, 10, 5, 12, 10)); // M84 Stun Grenade (Flashbang)
|
||||
grenades.add(new GrenadeItem("grenade_m18", 1, 0.1f, 0.2f, 50, false, false, 0, 0, 100, 15, 30)); // M18 Smoke Grenade
|
||||
grenades.add(new GrenadeItem("grenade_m84", 1, 0.5f, 0.2f, 120, false, false, 10, 10, 5, 12, 10)); // M84 Stun Grenade (Flashbang)
|
||||
grenades.add(new GrenadeItem("grenade_rgd_5", 1, 6.5f, 0.5f, 60, false, true, 0, 0, 0, 10, 0)); // RGD-5 Fragmentation Grenade
|
||||
grenades.add(new GrenadeItem("grenade_thermite", 1, 4f, 0.3f, 80, true, false, 0, 0, 0, 8, 15)); // Thermite Grenade
|
||||
grenades.add(new GrenadeItem("grenade_f1", 1, 7f, 0.5f, 60, false, true, 0, 0, 0, 10, 0)); // F1 Soviet Fragmentation Grenade
|
||||
@ -100,6 +107,8 @@ public class PlasticGun implements ModInitializer {
|
||||
grenades.add(new GrenadeItem("grenade_rgo", 1, 6.5f, 0.5f, 90, false, true, 0, 0, 0, 10, 0)); // RGO Fragmentation Grenade
|
||||
grenades.add(new GrenadeItem("grenade_k417", 1, 7f, 0.5f, 70, false, true, 0, 0, 0, 10, 0)); // K417 Fragmentation Grenade
|
||||
|
||||
weaponArmors.add(new WeaponArmor("kevlar_vest", 200, 0.8, 0.8, 0.4, 0.3));
|
||||
weaponArmors.add(new WeaponArmor("flak_vest", 500, 0.8, 0.4, 0.8, 0.2));
|
||||
|
||||
shurikens.add(new ShurikenItem("wooden_shuriken", 1, 5, 4f));
|
||||
shurikens.add(new ShurikenItem("stone_shuriken", 2, 5, 4f));
|
||||
@ -108,6 +117,31 @@ public class PlasticGun implements ModInitializer {
|
||||
shurikens.add(new ShurikenItem("diamond_shuriken", 4, 5, 4f));
|
||||
shurikens.add(new ShurikenItem("netherite_shuriken", 8, 5, 4f));
|
||||
|
||||
craftingItems.add(new CraftingItem("advanced_circuit"));
|
||||
craftingItems.add(new CraftingItem("alloy_wheel"));
|
||||
craftingItems.add(new CraftingItem("ceramic_mixture"));
|
||||
craftingItems.add(new CraftingItem("ceramic_plate"));
|
||||
craftingItems.add(new CraftingItem("composite_frame"));
|
||||
craftingItems.add(new CraftingItem("composite_resin"));
|
||||
craftingItems.add(new CraftingItem("copper_wiring"));
|
||||
craftingItems.add(new CraftingItem("enhanced_gunpowder"));
|
||||
craftingItems.add(new CraftingItem("explosive_powder"));
|
||||
craftingItems.add(new CraftingItem("graphene_sheet"));
|
||||
craftingItems.add(new CraftingItem("hardened_steel"));
|
||||
craftingItems.add(new CraftingItem("hyperalloy"));
|
||||
craftingItems.add(new CraftingItem("kevlar_sheet"));
|
||||
craftingItems.add(new CraftingItem("magnetic_coil"));
|
||||
craftingItems.add(new CraftingItem("microchip"));
|
||||
craftingItems.add(new CraftingItem("nano_tubes"));
|
||||
craftingItems.add(new CraftingItem("plasma_core"));
|
||||
craftingItems.add(new CraftingItem("power_cell"));
|
||||
craftingItems.add(new CraftingItem("precision_gear"));
|
||||
craftingItems.add(new CraftingItem("reinforced_fiber"));
|
||||
craftingItems.add(new CraftingItem("silicon_mixture"));
|
||||
craftingItems.add(new CraftingItem("silicon_wafer"));
|
||||
craftingItems.add(new CraftingItem("titanium_alloy"));
|
||||
craftingItems.add(new CraftingItem("trigger_mechanism"));
|
||||
|
||||
|
||||
GRENADE_ENTITY_TYPE = Registry.register(
|
||||
Registries.ENTITY_TYPE,
|
||||
|
@ -2,6 +2,7 @@ package systems.brn.plasticgun.bullets;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.entity.data.DataTracker;
|
||||
import net.minecraft.entity.projectile.PersistentProjectileEntity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
@ -16,12 +17,12 @@ import net.minecraft.util.hit.HitResult;
|
||||
import eu.pb4.polymer.core.api.entity.PolymerEntity;
|
||||
import net.minecraft.world.World;
|
||||
import systems.brn.plasticgun.guns.Gun;
|
||||
import systems.brn.plasticgun.lib.WeaponDamageType;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.List;
|
||||
|
||||
import static systems.brn.plasticgun.PlasticGun.BULLET_ENTITY_TYPE;
|
||||
import static systems.brn.plasticgun.PlasticGun.bullets;
|
||||
import static systems.brn.plasticgun.PlasticGun.*;
|
||||
import static systems.brn.plasticgun.lib.Util.*;
|
||||
|
||||
public class BulletEntity extends PersistentProjectileEntity implements PolymerEntity {
|
||||
@ -42,7 +43,7 @@ public class BulletEntity extends PersistentProjectileEntity implements PolymerE
|
||||
this.gun = gun;
|
||||
this.scale = scale;
|
||||
this.setCustomPierceLevel((byte) 1);
|
||||
this.setItemStack(stack);
|
||||
this.setItemStack(stack.copy());
|
||||
this.explosionPower = explosionPower;
|
||||
this.repulsionPower = repulsionPower;
|
||||
this.isIncendiary = isIncendiary;
|
||||
@ -113,6 +114,9 @@ public class BulletEntity extends PersistentProjectileEntity implements PolymerE
|
||||
setSilent(false);
|
||||
playSound(SoundEvents.BLOCK_BAMBOO_HIT, 4.0F, 1.0F);
|
||||
setSilent(true);
|
||||
if (entityHitResult.getEntity() instanceof LivingEntity livingEntity) {
|
||||
this.setDamage(getFinalDamage(livingEntity, WeaponDamageType.BULLET, this.getDamage()));
|
||||
}
|
||||
|
||||
super.onEntityHit(entityHitResult);
|
||||
hitDamage(entityHitResult.getPos(), explosionPower, repulsionPower, getWorld(), this, isIncendiary, 5, null);
|
||||
|
@ -1,14 +1,11 @@
|
||||
package systems.brn.plasticgun.bullets;
|
||||
|
||||
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
|
||||
import net.minecraft.component.DataComponentTypes;
|
||||
import net.minecraft.component.type.LoreComponent;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.registry.Registries;
|
||||
import net.minecraft.registry.Registry;
|
||||
import net.minecraft.text.Text;
|
||||
import systems.brn.plasticgun.lib.ItemGroups;
|
||||
import systems.brn.plasticgun.lib.SimpleItem;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -0,0 +1,38 @@
|
||||
package systems.brn.plasticgun.defence;
|
||||
|
||||
import dev.emi.trinkets.api.TrinketsApi;
|
||||
import net.minecraft.component.DataComponentTypes;
|
||||
import net.minecraft.component.type.LoreComponent;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.registry.Registries;
|
||||
import net.minecraft.registry.Registry;
|
||||
import net.minecraft.text.Text;
|
||||
import systems.brn.plasticgun.lib.TrinketPolymerItem;
|
||||
import systems.brn.plasticgun.lib.WeaponDamageType;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import static systems.brn.plasticgun.lib.Util.id;
|
||||
|
||||
public class WeaponArmor extends TrinketPolymerItem {
|
||||
public final HashMap<WeaponDamageType, Double> resistances = new HashMap<>();
|
||||
|
||||
public WeaponArmor(String name, int durability, double grenadeDamageCoefficient, double fragmentationDamageCoefficient, double bulletDamageCoefficient, double shurikenDamageCoefficient) {
|
||||
super(
|
||||
new Item.Settings().maxDamage(durability).maxCount(1).component(DataComponentTypes.LORE, new LoreComponent(List.of(
|
||||
Text.translatable("gun.description.armor.bullet", (int) ((1 - bulletDamageCoefficient) * 100)),
|
||||
Text.translatable("gun.description.armor.grenade", (int) ((1 - grenadeDamageCoefficient) * 100)),
|
||||
Text.translatable("gun.description.armor.fragmentation_grenade", (int) ((1 - fragmentationDamageCoefficient) * 100)),
|
||||
Text.translatable("gun.description.armor.shuriken", (int) ((1 - shurikenDamageCoefficient) * 100))
|
||||
)))
|
||||
, name)
|
||||
;
|
||||
Registry.register(Registries.ITEM, id(name), this);
|
||||
TrinketsApi.registerTrinket(this, this);
|
||||
resistances.put(WeaponDamageType.BULLET, bulletDamageCoefficient);
|
||||
resistances.put(WeaponDamageType.FRAGMENTATION_GRENADE, fragmentationDamageCoefficient);
|
||||
resistances.put(WeaponDamageType.GRENADE, grenadeDamageCoefficient);
|
||||
resistances.put(WeaponDamageType.SHURIKEN, shurikenDamageCoefficient);
|
||||
}
|
||||
}
|
@ -1,15 +1,72 @@
|
||||
package systems.brn.plasticgun.grenades;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.BlockView;
|
||||
import net.minecraft.world.explosion.Explosion;
|
||||
import net.minecraft.world.explosion.ExplosionBehavior;
|
||||
import systems.brn.plasticgun.lib.WeaponDamageType;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import static systems.brn.plasticgun.lib.Util.getFinalDamage;
|
||||
|
||||
public class FragmentationExplosionBehavior extends ExplosionBehavior {
|
||||
final static ArrayList<Block> blocks = new ArrayList<>() {{
|
||||
add(Blocks.AIR);
|
||||
add(Blocks.WHITE_STAINED_GLASS);
|
||||
add(Blocks.ORANGE_STAINED_GLASS);
|
||||
add(Blocks.MAGENTA_STAINED_GLASS);
|
||||
add(Blocks.LIGHT_BLUE_STAINED_GLASS);
|
||||
add(Blocks.YELLOW_STAINED_GLASS);
|
||||
add(Blocks.LIME_STAINED_GLASS);
|
||||
add(Blocks.PINK_STAINED_GLASS);
|
||||
add(Blocks.GRAY_STAINED_GLASS);
|
||||
add(Blocks.LIGHT_GRAY_STAINED_GLASS);
|
||||
add(Blocks.CYAN_STAINED_GLASS);
|
||||
add(Blocks.PURPLE_STAINED_GLASS);
|
||||
add(Blocks.BLUE_STAINED_GLASS);
|
||||
add(Blocks.BROWN_STAINED_GLASS);
|
||||
add(Blocks.GREEN_STAINED_GLASS);
|
||||
add(Blocks.RED_STAINED_GLASS);
|
||||
add(Blocks.BLACK_STAINED_GLASS);
|
||||
add(Blocks.TINTED_GLASS);
|
||||
|
||||
add(Blocks.WHITE_STAINED_GLASS_PANE);
|
||||
add(Blocks.ORANGE_STAINED_GLASS_PANE);
|
||||
add(Blocks.MAGENTA_STAINED_GLASS_PANE);
|
||||
add(Blocks.LIGHT_BLUE_STAINED_GLASS_PANE);
|
||||
add(Blocks.YELLOW_STAINED_GLASS_PANE);
|
||||
add(Blocks.LIME_STAINED_GLASS_PANE);
|
||||
add(Blocks.PINK_STAINED_GLASS_PANE);
|
||||
add(Blocks.GRAY_STAINED_GLASS_PANE);
|
||||
add(Blocks.LIGHT_GRAY_STAINED_GLASS_PANE);
|
||||
add(Blocks.CYAN_STAINED_GLASS_PANE);
|
||||
add(Blocks.PURPLE_STAINED_GLASS_PANE);
|
||||
add(Blocks.BLUE_STAINED_GLASS_PANE);
|
||||
add(Blocks.BROWN_STAINED_GLASS_PANE);
|
||||
add(Blocks.GREEN_STAINED_GLASS_PANE);
|
||||
add(Blocks.RED_STAINED_GLASS_PANE);
|
||||
add(Blocks.BLACK_STAINED_GLASS_PANE);
|
||||
|
||||
}};
|
||||
|
||||
@Override
|
||||
public boolean canDestroyBlock(Explosion explosion, BlockView world, BlockPos pos, BlockState state, float power) {
|
||||
return state.getBlock() == Blocks.AIR;
|
||||
Block block = state.getBlock();
|
||||
return blocks.contains(block);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float calculateDamage(Explosion explosion, Entity entity) {
|
||||
float original = super.calculateDamage(explosion, entity);
|
||||
if (entity instanceof LivingEntity livingEntity) {
|
||||
original = (float) getFinalDamage(livingEntity, WeaponDamageType.FRAGMENTATION_GRENADE, original);
|
||||
}
|
||||
return original;
|
||||
}
|
||||
}
|
||||
|
@ -113,7 +113,7 @@ public class GrenadeEntity extends ThrowableProjectile implements PolymerEntity
|
||||
}
|
||||
|
||||
private void explode() {
|
||||
hitDamage(getPos(), explosionPower, repulsionPower, getWorld(), this, isIncendiary, effectRadius, isFragmentation ? new FragmentationExplosionBehavior() : null);
|
||||
hitDamage(getPos(), explosionPower, repulsionPower, getWorld(), this, isIncendiary, effectRadius, isFragmentation ? new FragmentationExplosionBehavior() : new GrenadeExplosionBehavior());
|
||||
List<Entity> nearbyEntities = getEntitiesAround(this, effectRadius);
|
||||
if (stunDuration > 0) {
|
||||
for (Entity entity : nearbyEntities) {
|
||||
|
@ -0,0 +1,22 @@
|
||||
package systems.brn.plasticgun.grenades;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.world.explosion.Explosion;
|
||||
import net.minecraft.world.explosion.ExplosionBehavior;
|
||||
import systems.brn.plasticgun.lib.WeaponDamageType;
|
||||
|
||||
import static systems.brn.plasticgun.lib.Util.getFinalDamage;
|
||||
|
||||
public class GrenadeExplosionBehavior extends ExplosionBehavior {
|
||||
|
||||
|
||||
@Override
|
||||
public float calculateDamage(Explosion explosion, Entity entity) {
|
||||
float original = super.calculateDamage(explosion, entity);
|
||||
if (entity instanceof LivingEntity livingEntity) {
|
||||
original = (float) getFinalDamage(livingEntity, WeaponDamageType.GRENADE, original);
|
||||
}
|
||||
return original;
|
||||
}
|
||||
}
|
@ -1,7 +1,6 @@
|
||||
package systems.brn.plasticgun.grenades;
|
||||
|
||||
import eu.pb4.polymer.core.api.item.PolymerItem;
|
||||
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
|
||||
import net.minecraft.component.DataComponentTypes;
|
||||
import net.minecraft.component.type.LoreComponent;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
@ -62,7 +61,7 @@ public class GrenadeItem extends SimpleItem implements PolymerItem {
|
||||
);
|
||||
this.explosionTarget = explosionTarget;
|
||||
this.isIncendiary = isIncendiary;
|
||||
Item item = Registry.register(Registries.ITEM, id(path), this);
|
||||
Registry.register(Registries.ITEM, id(path), this);
|
||||
this.speed = speed;
|
||||
this.explosionPower = explosionPower;
|
||||
this.repulsionPower = repulsionPower;
|
||||
@ -100,7 +99,7 @@ public class GrenadeItem extends SimpleItem implements PolymerItem {
|
||||
ItemStack stack = user.getStackInHand(hand);
|
||||
int timer = stack.getOrDefault(GRENADE_TIMER_COMPONENT, -1);
|
||||
if (timer > 0) {
|
||||
turnIntoEntity(player, stack, speed, timer);
|
||||
turnIntoEntity(player, stack.copy(), speed, timer);
|
||||
if (!player.isCreative()) {
|
||||
stack.decrement(1);
|
||||
}
|
||||
|
@ -1,7 +1,6 @@
|
||||
package systems.brn.plasticgun.guns;
|
||||
|
||||
import eu.pb4.polymer.core.api.item.PolymerItem;
|
||||
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
|
||||
import net.minecraft.component.DataComponentTypes;
|
||||
import net.minecraft.component.type.LoreComponent;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
@ -16,6 +15,7 @@ import net.minecraft.sound.SoundEvents;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Hand;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.util.math.random.Random;
|
||||
import net.minecraft.world.World;
|
||||
import systems.brn.plasticgun.bullets.BulletEntity;
|
||||
import systems.brn.plasticgun.bullets.BulletItem;
|
||||
@ -41,7 +41,16 @@ public class Gun extends SimpleItem implements PolymerItem {
|
||||
private final int cooldownTarget;
|
||||
private final int reloadTarget;
|
||||
|
||||
public Gun(String path, double damage, int reloadCount, int reloadTarget, int clipSize, int speed, int caliber, int cooldownTarget, double explosionPowerGun, double repulsionPowerGun) {
|
||||
private final float verticalRecoilMin;
|
||||
private final float verticalRecoilMax;
|
||||
|
||||
private final float velocityRecoilMin;
|
||||
private final float velocityRecoilMax;
|
||||
|
||||
private final double horizontalRecoilMin;
|
||||
private final double horizontalRecoilMax;
|
||||
|
||||
public Gun(String path, double damage, int reloadCount, int reloadTarget, int clipSize, int speed, int caliber, int cooldownTarget, double explosionPowerGun, double repulsionPowerGun, float verticalRecoilMin, float verticalRecoilMax, float velocityRecoilMin, float velocityRecoilMax, double horizontalRecoilMin, double horizontalRecoilMax) {
|
||||
super(
|
||||
new Settings()
|
||||
.maxCount(1)
|
||||
@ -51,6 +60,12 @@ public class Gun extends SimpleItem implements PolymerItem {
|
||||
.maxDamage(clipSize + 1)
|
||||
, id(path), Items.WOODEN_SWORD
|
||||
);
|
||||
this.verticalRecoilMin = verticalRecoilMin;
|
||||
this.verticalRecoilMax = verticalRecoilMax;
|
||||
this.velocityRecoilMin = velocityRecoilMin;
|
||||
this.velocityRecoilMax = velocityRecoilMax;
|
||||
this.horizontalRecoilMin = horizontalRecoilMin;
|
||||
this.horizontalRecoilMax = horizontalRecoilMax;
|
||||
Registry.register(Registries.ITEM, id(path), this);
|
||||
this.damage = damage;
|
||||
this.reloadCount = reloadCount;
|
||||
@ -163,6 +178,7 @@ public class Gun extends SimpleItem implements PolymerItem {
|
||||
loreList.add(Text.translatable("gun.description.magazine_count", numBullets, clipSize));
|
||||
if (!chamber.isEmpty() && bulletItem != null) {
|
||||
loreList.add(Text.translatable("gun.description.damage_with_coefficient", damage * bulletItem.damageCoefficient));
|
||||
loreList.add(Text.translatable("gun.description.damage_with_coefficient_muzzle_speed", speed, speed * damage * bulletItem.damageCoefficient));
|
||||
loreList.add(Text.translatable("gun.description.magazine_bullet", bulletItem.getName()));
|
||||
loreList.add(Text.translatable("gun.description.damage_coefficient", bulletItem.damageCoefficient));
|
||||
loreList.add(Text.translatable("gun.description.explosion_coefficient", bulletItem.explosionPowerCoefficient));
|
||||
@ -179,14 +195,21 @@ public class Gun extends SimpleItem implements PolymerItem {
|
||||
}
|
||||
|
||||
public void doRecoil(ServerPlayerEntity player) {
|
||||
Random rng = player.getServerWorld().getRandom();
|
||||
// Get the player's current position and yaw
|
||||
Vec3d pos = player.getPos();
|
||||
float yaw = player.getYaw();
|
||||
float newPitch = player.getPitch();
|
||||
newPitch -= player.getServerWorld().getRandom().nextBetween(1, 4);
|
||||
yaw -= player.getServerWorld().getRandom().nextBetween(-2, 2);
|
||||
Vec3d currentLook = player.getRotationVector().multiply(-1);
|
||||
newPitch -= verticalRecoilMin + rng.nextFloat() * (verticalRecoilMax - verticalRecoilMin);
|
||||
yaw -= (float) (horizontalRecoilMin + rng.nextFloat() * (horizontalRecoilMax - horizontalRecoilMin));
|
||||
|
||||
|
||||
player.teleport(player.getServerWorld(), pos.x, pos.y, pos.z, PositionFlag.ROT, yaw, newPitch);
|
||||
double velocityRecoil = rng.nextDouble() * (velocityRecoilMax - velocityRecoilMin);
|
||||
if (velocityRecoil > 0) {
|
||||
player.setVelocity(currentLook.multiply(velocityRecoil));
|
||||
}
|
||||
}
|
||||
|
||||
public void shoot(ServerWorld world, PlayerEntity user, Hand hand) {
|
||||
|
15
src/main/java/systems/brn/plasticgun/lib/CraftingItem.java
Normal file
@ -0,0 +1,15 @@
|
||||
package systems.brn.plasticgun.lib;
|
||||
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.registry.Registries;
|
||||
import net.minecraft.registry.Registry;
|
||||
|
||||
import static systems.brn.plasticgun.lib.Util.id;
|
||||
|
||||
public class CraftingItem extends SimpleItem{
|
||||
|
||||
public CraftingItem(String name) {
|
||||
super(new Settings(), id(name), Items.STICK);
|
||||
Registry.register(Registries.ITEM, id(name), this);
|
||||
}
|
||||
}
|
@ -1,19 +1,16 @@
|
||||
package systems.brn.plasticgun.lib;
|
||||
|
||||
import eu.pb4.polymer.core.api.item.PolymerItemGroupUtils;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemGroup;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.text.Text;
|
||||
import systems.brn.plasticgun.PlasticGun;
|
||||
import systems.brn.plasticgun.bullets.BulletItem;
|
||||
import systems.brn.plasticgun.defence.WeaponArmor;
|
||||
import systems.brn.plasticgun.grenades.GrenadeItem;
|
||||
import systems.brn.plasticgun.guns.Gun;
|
||||
import systems.brn.plasticgun.shurikens.ShurikenItem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
import static systems.brn.plasticgun.lib.Util.id;
|
||||
|
||||
public class ItemGroups {
|
||||
@ -57,10 +54,32 @@ public class ItemGroups {
|
||||
}))
|
||||
.build();
|
||||
|
||||
public static final ItemGroup MATERIALS_GROUPS = PolymerItemGroupUtils.builder()
|
||||
.icon(() -> new ItemStack(PlasticGun.craftingItems.getFirst()))
|
||||
.displayName(Text.translatable("guns.groups.materials"))
|
||||
.entries(((context, entries) -> {
|
||||
for (CraftingItem craftingItem : PlasticGun.craftingItems) {
|
||||
entries.add(craftingItem);
|
||||
}
|
||||
}))
|
||||
.build();
|
||||
|
||||
public static final ItemGroup DEFENSE = PolymerItemGroupUtils.builder()
|
||||
.icon(() -> new ItemStack(PlasticGun.weaponArmors.getFirst()))
|
||||
.displayName(Text.translatable("guns.groups.defense"))
|
||||
.entries(((context, entries) -> {
|
||||
for (WeaponArmor weaponArmor : PlasticGun.weaponArmors) {
|
||||
entries.add(weaponArmor);
|
||||
}
|
||||
}))
|
||||
.build();
|
||||
|
||||
public static void register() {
|
||||
PolymerItemGroupUtils.registerPolymerItemGroup(id("guns"), GUNS_GROUP);
|
||||
PolymerItemGroupUtils.registerPolymerItemGroup(id("ammo"), AMMO_GROUP);
|
||||
PolymerItemGroupUtils.registerPolymerItemGroup(id("shurikens"), SHURIKEN_GROUP);
|
||||
PolymerItemGroupUtils.registerPolymerItemGroup(id("grenades"), GRENADES_GROUP);
|
||||
PolymerItemGroupUtils.registerPolymerItemGroup(id("materials"), MATERIALS_GROUPS);
|
||||
PolymerItemGroupUtils.registerPolymerItemGroup(id("defense"), DEFENSE);
|
||||
}
|
||||
}
|
@ -0,0 +1,70 @@
|
||||
package systems.brn.plasticgun.lib;
|
||||
|
||||
import dev.emi.trinkets.TrinketSlot;
|
||||
import dev.emi.trinkets.api.*;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.registry.entry.RegistryEntry;
|
||||
import net.minecraft.sound.SoundEvent;
|
||||
import net.minecraft.util.Hand;
|
||||
import net.minecraft.util.TypedActionResult;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.event.GameEvent;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
import static systems.brn.plasticgun.lib.Util.id;
|
||||
|
||||
public class TrinketPolymerItem extends SimpleItem implements Trinket {
|
||||
|
||||
public TrinketPolymerItem(Item.Settings settings, String name) {
|
||||
super(settings, id(name), Items.STICK);
|
||||
TrinketsApi.registerTrinket(this, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TypedActionResult<ItemStack> use(World world, PlayerEntity user, Hand hand) {
|
||||
ItemStack stack = user.getStackInHand(hand);
|
||||
if (equipItem(user, stack)) {
|
||||
return TypedActionResult.success(stack, world.isClient());
|
||||
}
|
||||
return super.use(world, user, hand);
|
||||
}
|
||||
|
||||
public static boolean equipItem(PlayerEntity user, ItemStack stack) {
|
||||
return equipItem((LivingEntity) user, stack);
|
||||
}
|
||||
|
||||
public static boolean equipItem(LivingEntity user, ItemStack stack) {
|
||||
Optional<TrinketComponent> optional = TrinketsApi.getTrinketComponent(user);
|
||||
if (optional.isPresent()) {
|
||||
TrinketComponent comp = optional.get();
|
||||
for (Map<String, TrinketInventory> group : comp.getInventory().values()) {
|
||||
for (TrinketInventory inv : group.values()) {
|
||||
for (int i = 0; i < inv.size(); i++) {
|
||||
if (inv.getStack(i).isEmpty()) {
|
||||
SlotReference ref = new SlotReference(inv, i);
|
||||
if (TrinketSlot.canInsert(stack, ref, user)) {
|
||||
ItemStack newStack = stack.copy();
|
||||
inv.setStack(i, newStack);
|
||||
Trinket trinket = TrinketsApi.getTrinket(stack.getItem());
|
||||
RegistryEntry<SoundEvent> soundEvent = trinket.getEquipSound(stack, ref, user);
|
||||
if (!stack.isEmpty() && soundEvent != null) {
|
||||
user.emitGameEvent(GameEvent.EQUIP);
|
||||
user.playSound(soundEvent.value(), 1.0F, 1.0F);
|
||||
}
|
||||
stack.setCount(0);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
@ -1,5 +1,9 @@
|
||||
package systems.brn.plasticgun.lib;
|
||||
|
||||
import dev.emi.trinkets.api.SlotReference;
|
||||
import dev.emi.trinkets.api.TrinketComponent;
|
||||
import dev.emi.trinkets.api.TrinketInventory;
|
||||
import dev.emi.trinkets.api.TrinketsApi;
|
||||
import eu.pb4.polymer.virtualentity.api.tracker.DisplayTrackedData;
|
||||
import net.minecraft.client.render.model.json.ModelTransformationMode;
|
||||
import net.minecraft.entity.Entity;
|
||||
@ -14,6 +18,7 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.server.world.ServerWorld;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.Pair;
|
||||
import net.minecraft.util.math.Box;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
@ -22,12 +27,15 @@ import net.minecraft.world.explosion.Explosion;
|
||||
import net.minecraft.world.explosion.ExplosionBehavior;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.joml.Vector3f;
|
||||
import systems.brn.plasticgun.defence.WeaponArmor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import static net.minecraft.world.explosion.Explosion.getExposure;
|
||||
import static systems.brn.plasticgun.PlasticGun.MOD_ID;
|
||||
import static systems.brn.plasticgun.PlasticGun.weaponArmors;
|
||||
|
||||
public class Util {
|
||||
|
||||
@ -177,4 +185,39 @@ public class Util {
|
||||
}
|
||||
}
|
||||
|
||||
public static double getFinalDamage(LivingEntity livingEntity, WeaponDamageType damageType, double damage) {
|
||||
Optional<TrinketComponent> trinketComponentTemp = TrinketsApi.getTrinketComponent(livingEntity);
|
||||
if (trinketComponentTemp.isPresent()) {
|
||||
TrinketComponent trinketComponent = trinketComponentTemp.get();
|
||||
for (WeaponArmor weaponArmor : weaponArmors) {
|
||||
if (weaponArmor.resistances.containsKey(damageType)) {
|
||||
|
||||
List<Pair<SlotReference, ItemStack>> vestsComponents = trinketComponent.getEquipped(weaponArmor);
|
||||
if (!vestsComponents.isEmpty()) {
|
||||
Pair<SlotReference, ItemStack> vestComponent = vestsComponents.getFirst();
|
||||
TrinketInventory trinketInventory = vestComponent.getLeft().inventory();
|
||||
int currentDamage = vestComponent.getRight().getDamage();
|
||||
int maxDamage = vestComponent.getRight().getMaxDamage();
|
||||
double reducedDamage = 0;
|
||||
if (currentDamage < maxDamage) {
|
||||
double coefficient = weaponArmor.resistances.get(damageType);
|
||||
reducedDamage = (1 - coefficient) * damage;
|
||||
damage *= coefficient;
|
||||
}
|
||||
|
||||
int nextDamage = currentDamage + (int) reducedDamage;
|
||||
int inventoryIndex = vestComponent.getLeft().index();
|
||||
ItemStack vestStack = trinketInventory.getStack(inventoryIndex);
|
||||
if (nextDamage >= maxDamage) {
|
||||
vestStack.setCount(0);
|
||||
} else {
|
||||
vestStack.setDamage(nextDamage);
|
||||
}
|
||||
trinketInventory.setStack(inventoryIndex, vestStack);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return damage;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,8 @@
|
||||
package systems.brn.plasticgun.lib;
|
||||
|
||||
public enum WeaponDamageType {
|
||||
BULLET,
|
||||
GRENADE,
|
||||
FRAGMENTATION_GRENADE,
|
||||
SHURIKEN
|
||||
}
|
@ -3,16 +3,20 @@ package systems.brn.plasticgun.shurikens;
|
||||
import eu.pb4.polymer.core.api.entity.PolymerEntity;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.sound.SoundEvent;
|
||||
import net.minecraft.util.hit.BlockHitResult;
|
||||
import net.minecraft.util.hit.EntityHitResult;
|
||||
import net.minecraft.util.hit.HitResult;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.world.World;
|
||||
import systems.brn.plasticgun.lib.WeaponDamageType;
|
||||
import systems.brn.plasticgun.throwables.ThrowableProjectile;
|
||||
|
||||
import static systems.brn.plasticgun.PlasticGun.SHURIKEN_ENTITY_TYPE;
|
||||
import static systems.brn.plasticgun.PlasticGun.*;
|
||||
import static systems.brn.plasticgun.lib.Util.getFinalDamage;
|
||||
|
||||
public class ShurikenEntity extends ThrowableProjectile implements PolymerEntity {
|
||||
public ShurikenEntity(ServerPlayerEntity player, ItemStack itemStack, float speed, double damage) {
|
||||
@ -45,4 +49,13 @@ public class ShurikenEntity extends ThrowableProjectile implements PolymerEntity
|
||||
}
|
||||
super.onBlockHit(blockHitResult);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onEntityHit(EntityHitResult entityHitResult) {
|
||||
if (entityHitResult.getEntity() instanceof LivingEntity livingEntity) {
|
||||
this.setDamage(getFinalDamage(livingEntity, WeaponDamageType.SHURIKEN, this.getDamage()));
|
||||
}
|
||||
|
||||
super.onEntityHit(entityHitResult);
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +1,9 @@
|
||||
package systems.brn.plasticgun.shurikens;
|
||||
|
||||
import eu.pb4.polymer.core.api.item.PolymerItem;
|
||||
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
|
||||
import net.minecraft.component.DataComponentTypes;
|
||||
import net.minecraft.component.type.LoreComponent;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemGroups;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.registry.Registries;
|
||||
@ -35,7 +32,8 @@ public class ShurikenItem extends SimpleItem implements PolymerItem {
|
||||
.maxDamage(durability)
|
||||
.component(DataComponentTypes.LORE, new LoreComponent(List.of(
|
||||
Text.translatable("gun.description.damage", damage),
|
||||
Text.translatable("gun.description.speed", speed)
|
||||
Text.translatable("gun.description.speed", speed),
|
||||
Text.translatable("gun.description.damage_with_coefficient_max_speed", speed, speed * damage)
|
||||
)))
|
||||
, id(path), Items.WOODEN_PICKAXE
|
||||
);
|
||||
|
@ -26,7 +26,7 @@ public class ThrowableProjectile extends PersistentProjectileEntity implements P
|
||||
this.setSilent(true);
|
||||
this.scale = scale;
|
||||
this.setCustomPierceLevel(penetration);
|
||||
this.setItemStack(itemStack);
|
||||
this.setItemStack(itemStack.copy());
|
||||
}
|
||||
|
||||
public ThrowableProjectile(EntityType<? extends PersistentProjectileEntity> entityType, ServerPlayerEntity player, ItemStack itemStack, float scale, float speed, double damage, PickupPermission pickupPermission, byte penetration) {
|
||||
|
@ -1,4 +1,28 @@
|
||||
{
|
||||
"item.plasticgun.advanced_circuit": "Advanced Circuit",
|
||||
"item.plasticgun.alloy_wheel": "Alloy Wheel",
|
||||
"item.plasticgun.ceramic_mixture": "Ceramic Mixture",
|
||||
"item.plasticgun.ceramic_plate": "Ceramic Plate",
|
||||
"item.plasticgun.composite_frame": "Composite Frame",
|
||||
"item.plasticgun.composite_resin": "Composite Resin",
|
||||
"item.plasticgun.copper_wiring": "Copper Wiring",
|
||||
"item.plasticgun.enhanced_gunpowder": "Enhanced Gunpowder",
|
||||
"item.plasticgun.explosive_powder": "Explosive Powder",
|
||||
"item.plasticgun.graphene_sheet": "Graphene Sheet",
|
||||
"item.plasticgun.hardened_steel": "Hardened Steel",
|
||||
"item.plasticgun.hyperalloy": "Hyperalloy",
|
||||
"item.plasticgun.kevlar_sheet": "Kevlar Sheet",
|
||||
"item.plasticgun.magnetic_coil": "Magnetic Coil",
|
||||
"item.plasticgun.microchip": "Microchip",
|
||||
"item.plasticgun.nano_tubes": "Nano Tubes",
|
||||
"item.plasticgun.plasma_core": "Plasma Core",
|
||||
"item.plasticgun.power_cell": "Power Cell",
|
||||
"item.plasticgun.precision_gear": "Precision Gear",
|
||||
"item.plasticgun.reinforced_fiber": "Reinforced Fiber",
|
||||
"item.plasticgun.silicon_mixture": "Silicon Mixture",
|
||||
"item.plasticgun.silicon_wafer": "Silicon Wafer",
|
||||
"item.plasticgun.titanium_alloy": "Titanium Alloy",
|
||||
"item.plasticgun.trigger_mechanism": "Trigger Mechanism",
|
||||
"item.plasticgun.357_magnum": "357 Magnum",
|
||||
"item.plasticgun.32_acp_high_velocity": "32 ACP High Velocity",
|
||||
"item.plasticgun.45_acp_hollow_point": "45 ACP Hollow Point",
|
||||
@ -49,7 +73,10 @@
|
||||
"item.plasticgun.golden_shuriken": "Golden Shuriken",
|
||||
"item.plasticgun.diamond_shuriken": "Diamond Shuriken",
|
||||
"item.plasticgun.netherite_shuriken": "Netherite Shuriken",
|
||||
|
||||
"item.plasticgun.kevlar_vest": "Kevlar vest",
|
||||
"item.plasticgun.flak_vest": "Flak vest",
|
||||
"trinkets.slot.chest.vest": "Vest",
|
||||
"tag.item.trinkets.chest.vest": "Vest slot compatible",
|
||||
"gun.description.damage_coefficient": "Damage coefficient: %d",
|
||||
"gun.description.explosion_coefficient": "Explosion coefficient: %d",
|
||||
"gun.description.repulsion_efficient": "Repulsion coefficient: %d",
|
||||
@ -59,6 +86,8 @@
|
||||
"gun.description.caliber": "Caliber: %d",
|
||||
"gun.description.damage_absolute": "Gun damage (speed 1): %d hp",
|
||||
"gun.description.damage_with_coefficient": "Gun damage with coefficient (speed 1): %d hp",
|
||||
"gun.description.damage_with_coefficient_muzzle_speed": "Gun damage with coefficient and muzzle speed (speed %d): %d hp",
|
||||
"gun.description.damage_with_coefficient_max_speed": "Gun damage with coefficient and maximal throwing speed (speed %d): %d hp",
|
||||
"gun.description.damage": "Damage: %d hp",
|
||||
"gun.description.speed": "Speed: %d b/t",
|
||||
"gun.description.clip_size": "Magazine size: %d rounds",
|
||||
@ -70,16 +99,20 @@
|
||||
"gun.description.magazine_count": "Magazine: %d/%d",
|
||||
"gun.description.magazine_bullet": "Magazine bullet: %s",
|
||||
"gun.description.explosion_time": "Fuse: %d ticks",
|
||||
|
||||
"gun.description.flashbang_duration": "Flashbang: %d seconds",
|
||||
"gun.description.stun_duration": "Stun: %d seconds",
|
||||
"gun.description.smoke_ticks": "Smoke: %d ticks",
|
||||
"gun.description.effect_radius": "Radius: %d blocks",
|
||||
"gun.description.particle_count": "Particles per tick: %d particles",
|
||||
"gun.description.fragmentation_grenade": "Fragmentation: %d",
|
||||
|
||||
"gun.description.armor.bullet": "Bullet damage reduction: %d%%",
|
||||
"gun.description.armor.grenade": "Grenade damage reduction: %d%%",
|
||||
"gun.description.armor.fragmentation_grenade": "Fragmentation grenade damage reduction: %d%%",
|
||||
"gun.description.armor.shuriken": "Shuriken damage reduction: %d%%",
|
||||
"guns.groups.guns": "Guns",
|
||||
"guns.groups.ammo": "Ammo",
|
||||
"guns.groups.grenades": "Grenades",
|
||||
"guns.groups.shurikens": "Shurikens"
|
||||
"guns.groups.shurikens": "Shurikens",
|
||||
"guns.groups.materials": "Weapon materials",
|
||||
"guns.groups.defense": "Defensive"
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/advanced_circuit"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/alloy_wheel"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/ceramic_mixture"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/ceramic_plate"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/composite_frame"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/composite_resin"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/copper_wiring"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/enhanced_gunpowder"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/explosive_powder"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/flak_vest"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/graphene_sheet"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/grenade_m34"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/hardened_steel"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/hyperalloy"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/kevlar_sheet"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/kevlar_vest"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/magnetic_coil"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/microchip"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/nano_tubes"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/plasma_core"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/power_cell"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/precision_gear"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/reinforced_fiber"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/silicon_mixture"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/silicon_wafer"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/titanium_alloy"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/handheld",
|
||||
"textures": {
|
||||
"layer0": "plasticgun:item/trigger_mechanism"
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 379 B |
Before Width: | Height: | Size: 166 B After Width: | Height: | Size: 386 B |
Before Width: | Height: | Size: 166 B After Width: | Height: | Size: 386 B |
Before Width: | Height: | Size: 150 B After Width: | Height: | Size: 365 B |
Before Width: | Height: | Size: 610 B After Width: | Height: | Size: 762 B |
Before Width: | Height: | Size: 150 B After Width: | Height: | Size: 365 B |
Before Width: | Height: | Size: 170 B After Width: | Height: | Size: 386 B |
Before Width: | Height: | Size: 170 B After Width: | Height: | Size: 386 B |
Before Width: | Height: | Size: 170 B After Width: | Height: | Size: 391 B |
Before Width: | Height: | Size: 170 B After Width: | Height: | Size: 391 B |
Before Width: | Height: | Size: 153 B After Width: | Height: | Size: 371 B |
Before Width: | Height: | Size: 153 B After Width: | Height: | Size: 371 B |
Before Width: | Height: | Size: 175 B After Width: | Height: | Size: 391 B |
Before Width: | Height: | Size: 175 B After Width: | Height: | Size: 391 B |
After Width: | Height: | Size: 387 B |
Before Width: | Height: | Size: 245 B After Width: | Height: | Size: 440 B |
After Width: | Height: | Size: 431 B |
Before Width: | Height: | Size: 225 B After Width: | Height: | Size: 459 B |
After Width: | Height: | Size: 461 B |
After Width: | Height: | Size: 687 B |
Before Width: | Height: | Size: 669 B After Width: | Height: | Size: 818 B |
Before Width: | Height: | Size: 642 B After Width: | Height: | Size: 792 B |
Before Width: | Height: | Size: 594 B After Width: | Height: | Size: 745 B |
After Width: | Height: | Size: 567 B |
After Width: | Height: | Size: 338 B |
After Width: | Height: | Size: 348 B |
Before Width: | Height: | Size: 589 B After Width: | Height: | Size: 548 B |
After Width: | Height: | Size: 434 B |
After Width: | Height: | Size: 420 B |
BIN
src/main/resources/assets/plasticgun/textures/item/flak_vest.png
Normal file
After Width: | Height: | Size: 496 B |
Before Width: | Height: | Size: 154 B After Width: | Height: | Size: 365 B |
Before Width: | Height: | Size: 388 B After Width: | Height: | Size: 451 B |
Before Width: | Height: | Size: 535 B After Width: | Height: | Size: 532 B |
After Width: | Height: | Size: 322 B |
Before Width: | Height: | Size: 179 B After Width: | Height: | Size: 388 B |
Before Width: | Height: | Size: 175 B After Width: | Height: | Size: 389 B |
Before Width: | Height: | Size: 191 B After Width: | Height: | Size: 399 B |
Before Width: | Height: | Size: 292 B After Width: | Height: | Size: 437 B |
Before Width: | Height: | Size: 155 B After Width: | Height: | Size: 368 B |
Before Width: | Height: | Size: 179 B After Width: | Height: | Size: 388 B |
Before Width: | Height: | Size: 334 B After Width: | Height: | Size: 445 B |
Before Width: | Height: | Size: 373 B After Width: | Height: | Size: 460 B |
Before Width: | Height: | Size: 249 B After Width: | Height: | Size: 459 B |
Before Width: | Height: | Size: 201 B After Width: | Height: | Size: 404 B |
Before Width: | Height: | Size: 296 B After Width: | Height: | Size: 407 B |
Before Width: | Height: | Size: 179 B After Width: | Height: | Size: 388 B |
After Width: | Height: | Size: 655 B |
After Width: | Height: | Size: 659 B |
Before Width: | Height: | Size: 579 B After Width: | Height: | Size: 548 B |
After Width: | Height: | Size: 610 B |
After Width: | Height: | Size: 608 B |
After Width: | Height: | Size: 369 B |
BIN
src/main/resources/assets/plasticgun/textures/item/microchip.png
Normal file
After Width: | Height: | Size: 387 B |