Stuff go brr
This commit is contained in:
15
src/main/java/systems/brn/plasticgun/lib/CraftingItem.java
Normal file
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
|
||||
}
|
Reference in New Issue
Block a user