Stuff go brr

This commit is contained in:
2024-07-29 15:19:28 +02:00
parent 0263a04d33
commit 8d00672806
189 changed files with 1733 additions and 44 deletions

View 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);
}
}

View File

@@ -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);
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -0,0 +1,8 @@
package systems.brn.plasticgun.lib;
public enum WeaponDamageType {
BULLET,
GRENADE,
FRAGMENTATION_GRENADE,
SHURIKEN
}