mirror of
https://github.com/Ellpeck/NaturesAura.git
synced 2024-11-27 13:38:34 +01:00
Compare commits
7 commits
5f9897ca1c
...
f831d48bba
Author | SHA1 | Date | |
---|---|---|---|
f831d48bba | |||
01813ed372 | |||
da7a7bab64 | |||
5a1f689b51 | |||
433bd56957 | |||
19cd7dcbce | |||
|
2a0f63e9f9 |
11 changed files with 25 additions and 17 deletions
|
@ -7,6 +7,7 @@ steps:
|
||||||
maven-publish:
|
maven-publish:
|
||||||
image: eclipse-temurin:17-jdk
|
image: eclipse-temurin:17-jdk
|
||||||
when:
|
when:
|
||||||
|
event: [push, manual]
|
||||||
branch: main
|
branch: main
|
||||||
commands:
|
commands:
|
||||||
- chmod +x ./gradlew
|
- chmod +x ./gradlew
|
||||||
|
|
|
@ -309,13 +309,14 @@ public final class Helper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ItemStack getEquippedItem(Predicate<ItemStack> predicate, Player player) {
|
public static ItemStack getEquippedItem(Predicate<ItemStack> predicate, Player player, boolean hotbarOnly) {
|
||||||
if (Compat.hasCompat("curios")) {
|
if (Compat.hasCompat("curios")) {
|
||||||
var stack = CuriosApi.getCuriosHelper().findFirstCurio(player, predicate).map(SlotResult::stack);
|
var stack = CuriosApi.getCuriosHelper().findFirstCurio(player, predicate).map(SlotResult::stack);
|
||||||
if (stack.isPresent())
|
if (stack.isPresent())
|
||||||
return stack.get();
|
return stack.get();
|
||||||
}
|
}
|
||||||
for (var i = 0; i < player.getInventory().getContainerSize(); i++) {
|
var invSize = hotbarOnly ? 9 : player.getInventory().getContainerSize();
|
||||||
|
for (var i = 0; i < invSize; i++) {
|
||||||
var slot = player.getInventory().getItem(i);
|
var slot = player.getInventory().getItem(i);
|
||||||
if (!slot.isEmpty() && predicate.test(slot))
|
if (!slot.isEmpty() && predicate.test(slot))
|
||||||
return slot;
|
return slot;
|
||||||
|
|
|
@ -37,7 +37,7 @@ public class InternalHooks implements NaturesAuraAPI.IInternalHooks {
|
||||||
private boolean auraPlayerInteraction(Player player, int amount, boolean extract, boolean simulate) {
|
private boolean auraPlayerInteraction(Player player, int amount, boolean extract, boolean simulate) {
|
||||||
if (extract && player.isCreative())
|
if (extract && player.isCreative())
|
||||||
return true;
|
return true;
|
||||||
var stack = Helper.getEquippedItem(s -> s.getCapability(NaturesAuraAPI.CAP_AURA_CONTAINER).isPresent(), player);
|
var stack = Helper.getEquippedItem(s -> s.getCapability(NaturesAuraAPI.CAP_AURA_CONTAINER).isPresent(), player, false);
|
||||||
if (!stack.isEmpty()) {
|
if (!stack.isEmpty()) {
|
||||||
var container = stack.getCapability(NaturesAuraAPI.CAP_AURA_CONTAINER).orElse(null);
|
var container = stack.getCapability(NaturesAuraAPI.CAP_AURA_CONTAINER).orElse(null);
|
||||||
if (extract) {
|
if (extract) {
|
||||||
|
@ -181,4 +181,5 @@ public class InternalHooks implements NaturesAuraAPI.IInternalHooks {
|
||||||
highest = defaultSpot;
|
highest = defaultSpot;
|
||||||
return highest;
|
return highest;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
public class BlockFieldCreator extends BlockContainerImpl implements ICustomBlockState {
|
public class BlockFieldCreator extends BlockContainerImpl implements ICustomBlockState {
|
||||||
|
|
||||||
public BlockFieldCreator() {
|
public BlockFieldCreator() {
|
||||||
super("field_creator", BlockEntityFieldCreator.class, Properties.of().strength(2F).noCollission().sound(SoundType.STONE));
|
super("field_creator", BlockEntityFieldCreator.class, Properties.of().strength(2F).noOcclusion().sound(SoundType.STONE));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -87,8 +87,6 @@ public class BlockGratedChute extends BlockContainerImpl implements ICustomBlock
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public InteractionResult use(BlockState state, Level levelIn, BlockPos pos, Player player, InteractionHand handIn, BlockHitResult hit) {
|
public InteractionResult use(BlockState state, Level levelIn, BlockPos pos, Player player, InteractionHand handIn, BlockHitResult hit) {
|
||||||
if (!player.isShiftKeyDown())
|
|
||||||
return InteractionResult.FAIL;
|
|
||||||
var tile = levelIn.getBlockEntity(pos);
|
var tile = levelIn.getBlockEntity(pos);
|
||||||
if (!(tile instanceof BlockEntityGratedChute chute))
|
if (!(tile instanceof BlockEntityGratedChute chute))
|
||||||
return InteractionResult.FAIL;
|
return InteractionResult.FAIL;
|
||||||
|
|
|
@ -33,7 +33,7 @@ public class BlockSpring extends BlockContainerImpl implements ICustomBlockState
|
||||||
@Override
|
@Override
|
||||||
@OnlyIn(Dist.CLIENT)
|
@OnlyIn(Dist.CLIENT)
|
||||||
public BlockColor getBlockColor() {
|
public BlockColor getBlockColor() {
|
||||||
return (state, level, pos, i) -> BiomeColors.getAverageWaterColor(level, pos);
|
return (state, level, pos, i) -> level == null || pos == null ? -1 : BiomeColors.getAverageWaterColor(level, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -153,9 +153,9 @@ public class ClientEvents {
|
||||||
inst.setParticleSpawnRange(32);
|
inst.setParticleSpawnRange(32);
|
||||||
}
|
}
|
||||||
|
|
||||||
ClientEvents.heldCache = Helper.getEquippedItem(s -> s.getItem() instanceof ItemAuraCache, mc.player);
|
ClientEvents.heldCache = Helper.getEquippedItem(s -> s.getItem() instanceof ItemAuraCache, mc.player, false);
|
||||||
ClientEvents.heldEye = Helper.getEquippedItem(s -> s.getItem() == ModItems.EYE, mc.player);
|
ClientEvents.heldEye = Helper.getEquippedItem(s -> s.getItem() == ModItems.EYE, mc.player, true);
|
||||||
ClientEvents.heldOcular = Helper.getEquippedItem(s -> s.getItem() == ModItems.EYE_IMPROVED, mc.player);
|
ClientEvents.heldOcular = Helper.getEquippedItem(s -> s.getItem() == ModItems.EYE_IMPROVED, mc.player, false);
|
||||||
|
|
||||||
if (!ClientEvents.heldOcular.isEmpty() && mc.level.getGameTime() % 20 == 0) {
|
if (!ClientEvents.heldOcular.isEmpty() && mc.level.getGameTime() % 20 == 0) {
|
||||||
ClientEvents.SHOWING_EFFECTS.clear();
|
ClientEvents.SHOWING_EFFECTS.clear();
|
||||||
|
|
|
@ -24,7 +24,7 @@ public class ItemDeathRing extends ItemImpl {
|
||||||
public void onDeath(LivingDeathEvent event) {
|
public void onDeath(LivingDeathEvent event) {
|
||||||
var entity = event.getEntity();
|
var entity = event.getEntity();
|
||||||
if (!entity.level().isClientSide && entity instanceof Player) {
|
if (!entity.level().isClientSide && entity instanceof Player) {
|
||||||
var equipped = Helper.getEquippedItem(s -> s.getItem() == ModItems.DEATH_RING, (Player) entity);
|
var equipped = Helper.getEquippedItem(s -> s.getItem() == ModItems.DEATH_RING, (Player) entity, false);
|
||||||
if (!equipped.isEmpty()) {
|
if (!equipped.isEmpty()) {
|
||||||
entity.setHealth(entity.getMaxHealth() / 2);
|
entity.setHealth(entity.getMaxHealth() / 2);
|
||||||
entity.removeAllEffects();
|
entity.removeAllEffects();
|
||||||
|
@ -39,5 +39,7 @@ public class ItemDeathRing extends ItemImpl {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.item.*;
|
import net.minecraft.world.item.*;
|
||||||
import net.minecraft.world.phys.AABB;
|
import net.minecraft.world.phys.AABB;
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
|
import net.minecraftforge.common.ForgeMod;
|
||||||
import net.minecraftforge.common.capabilities.ICapabilityProvider;
|
import net.minecraftforge.common.capabilities.ICapabilityProvider;
|
||||||
import net.minecraftforge.event.TickEvent;
|
import net.minecraftforge.event.TickEvent;
|
||||||
import net.minecraftforge.event.entity.living.LivingAttackEvent;
|
import net.minecraftforge.event.entity.living.LivingAttackEvent;
|
||||||
|
@ -32,6 +33,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||||
public class ItemArmor extends ArmorItem implements IModItem {
|
public class ItemArmor extends ArmorItem implements IModItem {
|
||||||
|
|
||||||
private static final AttributeModifier SKY_MOVEMENT_MODIFIER = new AttributeModifier(UUID.fromString("c1f96acc-e117-4dc1-a351-e196a4de6071"), NaturesAura.MOD_ID + ":sky_movement_speed", 0.15F, AttributeModifier.Operation.MULTIPLY_TOTAL);
|
private static final AttributeModifier SKY_MOVEMENT_MODIFIER = new AttributeModifier(UUID.fromString("c1f96acc-e117-4dc1-a351-e196a4de6071"), NaturesAura.MOD_ID + ":sky_movement_speed", 0.15F, AttributeModifier.Operation.MULTIPLY_TOTAL);
|
||||||
|
private static final AttributeModifier SKY_STEP_MODIFIER = new AttributeModifier(UUID.fromString("ac3ce414-7243-418c-97f8-ac84c2c102f6"), NaturesAura.MOD_ID + ":sky_step_modifier", 0.5F, AttributeModifier.Operation.ADDITION);
|
||||||
private static final Map<ArmorMaterial, Item[]> SETS = new ConcurrentHashMap<>();
|
private static final Map<ArmorMaterial, Item[]> SETS = new ConcurrentHashMap<>();
|
||||||
private final String baseName;
|
private final String baseName;
|
||||||
|
|
||||||
|
@ -90,22 +92,25 @@ public class ItemArmor extends ArmorItem implements IModItem {
|
||||||
public static void update(TickEvent.PlayerTickEvent event) {
|
public static void update(TickEvent.PlayerTickEvent event) {
|
||||||
var player = event.player;
|
var player = event.player;
|
||||||
var speed = player.getAttribute(Attributes.MOVEMENT_SPEED);
|
var speed = player.getAttribute(Attributes.MOVEMENT_SPEED);
|
||||||
|
var step = player.getAttribute(ForgeMod.STEP_HEIGHT_ADDITION.get());
|
||||||
var key = NaturesAura.MOD_ID + ":sky_equipped";
|
var key = NaturesAura.MOD_ID + ":sky_equipped";
|
||||||
var nbt = player.getPersistentData();
|
var nbt = player.getPersistentData();
|
||||||
var equipped = ItemArmor.isFullSetEquipped(player, ModArmorMaterial.SKY);
|
var equipped = ItemArmor.isFullSetEquipped(player, ModArmorMaterial.SKY);
|
||||||
if (equipped && !nbt.getBoolean(key)) {
|
if (equipped && !nbt.getBoolean(key)) {
|
||||||
// we just equipped it
|
// we just equipped it
|
||||||
nbt.putBoolean(key, true);
|
nbt.putBoolean(key, true);
|
||||||
// TODO use new forge attribute for step height
|
if (!step.hasModifier(ItemArmor.SKY_STEP_MODIFIER))
|
||||||
player.setMaxUpStep(1.1F);
|
step.addPermanentModifier(ItemArmor.SKY_STEP_MODIFIER);
|
||||||
if (!speed.hasModifier(ItemArmor.SKY_MOVEMENT_MODIFIER))
|
if (!speed.hasModifier(ItemArmor.SKY_MOVEMENT_MODIFIER))
|
||||||
speed.addPermanentModifier(ItemArmor.SKY_MOVEMENT_MODIFIER);
|
speed.addPermanentModifier(ItemArmor.SKY_MOVEMENT_MODIFIER);
|
||||||
} else if (!equipped && nbt.getBoolean(key)) {
|
} else if (!equipped && nbt.getBoolean(key)) {
|
||||||
// we just unequipped it
|
// we just unequipped it
|
||||||
nbt.putBoolean(key, false);
|
nbt.putBoolean(key, false);
|
||||||
player.setMaxUpStep(0.6F);
|
step.removeModifier(ItemArmor.SKY_STEP_MODIFIER);
|
||||||
speed.removeModifier(ItemArmor.SKY_MOVEMENT_MODIFIER);
|
speed.removeModifier(ItemArmor.SKY_MOVEMENT_MODIFIER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,11 +14,11 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"text": "Additionally, the $(item)Adept Hopper$()'s functionality can be $(thing)inverted$() simply by interacting with it while sneaking: This will cause not items $(italic)in$() the frames to be accepted, but all items that are $(italic)not$() in the frames. This, additionally, allows for throughput of any item, simply by not placing down any frames at all."
|
"text": "Additionally, the $(item)Adept Hopper$()'s functionality can be $(thing)inverted$() simply by interacting with it: This will cause not items $(italic)in$() the frames to be accepted, but all items that are $(italic)not$() in the frames. This, additionally, allows for throughput of any item, simply by not placing down any frames at all."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "crafting",
|
"type": "crafting",
|
||||||
"text": "Creating the $(item)Adept Hopper$()$(p)It should be noted that, when equipping an $(l:items/eye)Environmental Eye$(), the amount of items currently stored in the hopper can be seen.",
|
"text": "Creating the $(item)Adept Hopper$()$(p)It should be noted that, when equipping an $(l:items/eye)Environmental Eye$(), the amount of items currently stored in the hopper, as well as its current mode, can be seen.",
|
||||||
"recipe": "naturesaura:grated_chute"
|
"recipe": "naturesaura:grated_chute"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"text": "When it comes to the inner workings of $(aura), scientists are toubled to admit that they have not quite figured out how exactly it works yet.$(br)The only thing they know is that excess or missing amounts of $(aura) affect an area of varying size (based on the apparatus used) around the place the modification happened from.$(br)If an area is drained and a new generating instrument is added, it will renew the drained area first before creating its own luscious area."
|
"text": "When it comes to the inner workings of $(aura), scientists are troubled to admit that they have not quite figured out how exactly it works yet.$(br)The only thing they know is that excess or missing amounts of $(aura) affect an area of varying size (based on the apparatus used) around the place the modification happened from.$(br)If an area is drained and a new generating instrument is added, it will renew the drained area first before creating its own luscious area."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "text",
|
"type": "text",
|
||||||
|
|
Loading…
Reference in a new issue