Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
2cd6021
Starter Commit
Absolutionism Nov 4, 2024
feede48
PR ready
Absolutionism Nov 4, 2024
1c22720
remove "runtime"
Absolutionism Nov 5, 2024
6736a9d
Changes
Absolutionism Nov 8, 2024
92e8162
Merge branch 'dev/feature' into dev/EquippableComponents
sovdeeth Nov 8, 2024
15d5fd7
Merge branch 'dev/feature' into dev/EquippableComponents
Absolutionism Nov 10, 2024
01b3fe7
Update
Absolutionism Nov 11, 2024
70c7186
Merge branch 'dev/feature' into dev/EquippableComponents
Absolutionism Nov 16, 2024
d78a8f2
Merge remote-tracking branch 'upstream/dev/feature' into dev/Equippab…
Absolutionism Nov 23, 2024
2500976
Merge remote-tracking branch 'upstream/dev/feature' into dev/Equippab…
Absolutionism Dec 15, 2024
8f944a2
Merge branch 'dev/feature' into dev/EquippableComponents
Absolutionism Dec 15, 2024
256781a
Merge remote-tracking branch 'upstream/dev/feature' into dev/Equippab…
Absolutionism Dec 24, 2024
e250c95
Update
Absolutionism Dec 24, 2024
7e59693
Merge branch 'dev/feature' into dev/EquippableComponents
Absolutionism Dec 24, 2024
cc57b63
Merge remote-tracking branch 'upstream/dev/feature' into dev/Equippab…
Absolutionism May 10, 2025
2c2cc84
Overhaul
Absolutionism May 11, 2025
e889044
Update CondEquipCompInteract.java
Absolutionism May 11, 2025
96c2481
Requested Changes
Absolutionism May 12, 2025
b51820a
Partial Changes
Absolutionism May 21, 2025
9b46199
Merge remote-tracking branch 'upstream/dev/feature' into dev/Equippab…
Absolutionism May 21, 2025
f312699
Update EquippableComponents.sk
Absolutionism May 21, 2025
29e19b0
revert
Absolutionism May 21, 2025
675c6b1
Record Usage
Absolutionism May 29, 2025
5536e9b
Merge branch 'dev/feature' into dev/EquippableComponents
Absolutionism May 29, 2025
e6f13bf
Partial Changes
Absolutionism Jun 6, 2025
a9f7382
Merge remote-tracking branch 'upstream/dev/feature' into dev/Equippab…
Absolutionism Jun 6, 2025
3394d3d
More Changes
Absolutionism Jun 7, 2025
df55cc3
Changes
Absolutionism Jun 11, 2025
024a0e1
Requested Changes
Absolutionism Jun 24, 2025
ab5ad52
Update EquippableComponents.sk
Absolutionism Jun 24, 2025
7a85b0e
Update EquippableComponents.sk
Absolutionism Jun 24, 2025
353ee6e
Adooblus Changes
Absolutionism Jun 25, 2025
a958f27
Merge remote-tracking branch 'upstream/dev/feature' into dev/Equippab…
Absolutionism Jun 27, 2025
f24aadb
Update EquippableExperiment.java
Absolutionism Jun 27, 2025
6404bc5
Update Experiment Class Name
Absolutionism Jun 27, 2025
838250b
Requested Changes
Absolutionism Jun 30, 2025
78e96dd
Cloneable Changes
Absolutionism Jun 30, 2025
888727a
Update EquippableModule.java
Absolutionism Jun 30, 2025
953c200
Update ItemComponentModule.java
Absolutionism Jun 30, 2025
bf978f2
Merge remote-tracking branch 'upstream/dev/feature' into dev/Equippab…
Absolutionism Jul 17, 2025
b424e24
Partial Update
Absolutionism Jul 18, 2025
8366ccb
Docs Update
Absolutionism Jul 18, 2025
e8dcdeb
Missing Import
Absolutionism Jul 18, 2025
6a694c2
More Elements
Absolutionism Jul 19, 2025
53cd00d
Docs Fix
Absolutionism Jul 19, 2025
5bc5797
Fix ItemType
Absolutionism Jul 19, 2025
63e05f8
Revert Misc Changed Files
Absolutionism Jul 19, 2025
76e97a6
Source Retainability
Absolutionism Jul 19, 2025
7adea5c
Update EquippableComponents.sk
Absolutionism Jul 19, 2025
53681d7
Update ExprEquippableComponent.java
Absolutionism Jul 19, 2025
29d6648
Requested Changes
Absolutionism Aug 27, 2025
21f02d9
Merge branch 'dev/feature' into dev/EquippableComponents
sovdeeth Aug 29, 2025
3e79e27
Update Wrapper
Absolutionism Sep 6, 2025
eb322ab
ComponentUtils
Absolutionism Sep 6, 2025
3a48edb
Docs Update
Absolutionism Sep 7, 2025
47e77d3
Initial Commit
Absolutionism Sep 9, 2025
6e53ad8
Syntax Docs
Absolutionism Sep 9, 2025
9dc3bbb
Javadocs
Absolutionism Sep 9, 2025
c2c8a8e
Test
Absolutionism Sep 10, 2025
c7a5ddd
Merge dev/feature
Absolutionism Sep 10, 2025
49caf92
Update ExprReductionDamageTypes.java
Absolutionism Sep 10, 2025
2003cd0
Update BlockingComponents.sk
Absolutionism Sep 10, 2025
80c4973
Merge remote-tracking branch 'upstream/dev/feature' into dev/Blocking…
Absolutionism Oct 1, 2025
3ad1861
Update
Absolutionism Oct 1, 2025
7894c7f
Merge branch 'dev/feature' into dev/BlockingComponent
Absolutionism Oct 2, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/main/java/ch/njol/skript/registrations/Feature.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ public enum Feature implements Experiment {
CATCH_ERRORS("catch runtime errors", LifeCycle.EXPERIMENTAL, "error catching [section]"),
TYPE_HINTS("type hints", LifeCycle.EXPERIMENTAL, "[local variable] type hints"),
DAMAGE_SOURCE("damage source", LifeCycle.EXPERIMENTAL, "damage source[s]"),
EQUIPPABLE_COMPONENTS("equippable components", LifeCycle.EXPERIMENTAL, "equippable components")
EQUIPPABLE_COMPONENTS("equippable components", LifeCycle.EXPERIMENTAL, "equippable components"),
BLOCKING_COMPONENTS("blocking components", LifeCycle.EXPERIMENTAL, "blocking components"),
;

private final String codeName;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import ch.njol.skript.registrations.Classes;
import org.skriptlang.skript.addon.AddonModule;
import org.skriptlang.skript.addon.SkriptAddon;
import org.skriptlang.skript.bukkit.itemcomponents.blocking.BlockingModule;
import org.skriptlang.skript.bukkit.itemcomponents.equippable.EquippableModule;
import org.skriptlang.skript.bukkit.itemcomponents.generic.ExprItemCompCopy;

Expand Down Expand Up @@ -47,7 +48,10 @@ public String toVariableNameString(ComponentWrapper wrapper) {

@Override
public void load(SkriptAddon addon) {
addon.loadModules(new EquippableModule());
addon.loadModules(
new EquippableModule(),
new BlockingModule()
);

ExprItemCompCopy.register(addon.syntaxRegistry());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.skriptlang.skript.bukkit.itemcomponents.blocking;

import ch.njol.skript.lang.SyntaxElement;
import ch.njol.skript.registrations.Feature;
import org.skriptlang.skript.lang.experiment.ExperimentData;
import org.skriptlang.skript.lang.experiment.SimpleExperimentalSyntax;

/**
* Typed {@link SimpleExperimentalSyntax} for {@link SyntaxElement}s that require {@link Feature#BLOCKING_COMPONENTS}.
*/
public interface BlockingExperimentalSyntax extends SimpleExperimentalSyntax {

ExperimentData EXPERIMENT_DATA = ExperimentData.createSingularData(Feature.BLOCKING_COMPONENTS);

@Override
default ExperimentData getExperimentData() {
return EXPERIMENT_DATA;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
package org.skriptlang.skript.bukkit.itemcomponents.blocking;

import ch.njol.skript.Skript;
import ch.njol.skript.aliases.ItemType;
import ch.njol.skript.classes.ClassInfo;
import ch.njol.skript.classes.Parser;
import ch.njol.skript.expressions.base.EventValueExpression;
import ch.njol.skript.lang.ParseContext;
import ch.njol.skript.registrations.Classes;
import ch.njol.skript.util.ItemSource;
import ch.njol.skript.util.slot.Slot;
import io.papermc.paper.datacomponent.item.BlocksAttacks;
import io.papermc.paper.datacomponent.item.blocksattacks.DamageReduction;
import io.papermc.paper.datacomponent.item.blocksattacks.ItemDamageFunction;
import org.bukkit.inventory.ItemStack;
import org.skriptlang.skript.addon.AddonModule;
import org.skriptlang.skript.addon.SkriptAddon;
import org.skriptlang.skript.bukkit.itemcomponents.blocking.elements.*;
import org.skriptlang.skript.lang.converter.Converter;
import org.skriptlang.skript.lang.converter.Converters;
import org.skriptlang.skript.registration.SyntaxRegistry;

import java.util.Arrays;
import java.util.function.Consumer;

public class BlockingModule implements AddonModule {

@Override
public boolean canLoad(SkriptAddon addon) {
return Skript.classExists("io.papermc.paper.datacomponent.item.BlocksAttacks");
}

@Override
public void init(SkriptAddon addon) {
Classes.registerClass(new ClassInfo<>(BlockingWrapper.class, "blockingcomponent")
.user("blocking ?components?")
.name("Blocking Component")
.description("""
Represents a blocking component used for items.
NOTE: Blocking component elements are experimental. Thus, they are subject to change and may not work as intended.
""")
.requiredPlugins("Minecraft 1.21.5+")
.since("INSERT VERSION")
.defaultExpression(new EventValueExpression<>(BlockingWrapper.class))
.parser(new Parser<>() {
@Override
public boolean canParse(ParseContext context) {
return false;
}

@Override
public String toString(BlockingWrapper wrapper, int flags) {
return "blocking component";
}

@Override
public String toVariableNameString(BlockingWrapper wrapper) {
return "blocking component#" + wrapper.hashCode();
}
})
.after("itemstack", "itemtype", "slot")
);

Classes.registerClass(new ClassInfo<>(DamageReductionWrapper.class, "damagereduction")
.user("damage ?reductions?")
.name("Damage Reduction")
.description("""
Represents a damage reduction that is applied to a blocking component.
Damage Reductions contain data that attribute to:
- What damage types can be being blocked
- The base amount of damage to block when blocking one of the damage types
- The factor amount of damage to block when blocking one of the damage types
- The angle at which the item can block when blocking one of the damage types
NOTE: Blocking component elements are experimental. Thus, they are subject to change and may not work as intended.
""")
.requiredPlugins("Minecraft 1.21.5+")
.since("INSERT VERSION")
.defaultExpression(new EventValueExpression<>(DamageReductionWrapper.class))
.parser(new Parser<>() {
@Override
public boolean canParse(ParseContext context) {
return false;
}

@Override
public String toString(DamageReductionWrapper wrapper, int flags) {
return "damage reduction";
}

@Override
public String toVariableNameString(DamageReductionWrapper wrapper) {
return "damage reduction#" + wrapper.hashCode();
}
})
);

Classes.registerClass(new ClassInfo<>(DamageFunctionWrapper.class, "itemdamagefunction")
.user("item ?damage ?functions?")
.name("Item Damage Function")
.description("""
Represents an item damage function that is applied to a blocking component.
Item Damage Functions contain data that attribute to:
- The base amount of damage to be applied to the item, if the attack damage passes the threshold
- The factor amount to get a fraction of the attack damage to be applied to the item, if the attack damage passes the threshold
- The threshold amount
NOTE: Blocking component elements are experimental. Thus, they are subject to change and may not work as intended.
""")
.requiredPlugins("Minecraft 1.21.5+")
.since("INSERT VERSION")
.defaultExpression(new EventValueExpression<>(DamageFunctionWrapper.class))
.parser(new Parser<>() {
@Override
public boolean canParse(ParseContext context) {
return false;
}

@Override
public String toString(DamageFunctionWrapper wrapper, int flags) {
return "item damage function";
}

@Override
public String toVariableNameString(DamageFunctionWrapper wrapper) {
return "item damage function#" + wrapper.hashCode();
}
})
);

Converters.registerConverter(BlocksAttacks.class, BlockingWrapper.class, BlockingWrapper::new, Converter.NO_RIGHT_CHAINING);
Converters.registerConverter(ItemStack.class, BlockingWrapper.class, BlockingWrapper::new, Converter.NO_RIGHT_CHAINING);
Converters.registerConverter(ItemType.class, BlockingWrapper.class, itemType -> new BlockingWrapper(new ItemSource<>(itemType)), Converter.NO_RIGHT_CHAINING);
Converters.registerConverter(Slot.class, BlockingWrapper.class, slot -> {
ItemSource<Slot> itemSource = ItemSource.fromSlot(slot);
if (itemSource == null)
return null;
return new BlockingWrapper(itemSource);
}, Converter.NO_RIGHT_CHAINING);

Converters.registerConverter(DamageReduction.class, DamageReductionWrapper.class, DamageReductionWrapper::new, Converter.NO_RIGHT_CHAINING);
Converters.registerConverter(ItemDamageFunction.class, DamageFunctionWrapper.class, DamageFunctionWrapper::new, Converter.NO_RIGHT_CHAINING);
}

@Override
public void load(SkriptAddon addon) {
register(addon.syntaxRegistry(),

ExprBlockCompBlockSound::register,
ExprBlockCompBypass::register,
ExprBlockCompDamageFunction::register,
ExprBlockCompDelay::register,
ExprBlockCompDisableScale::register,
ExprBlockCompDisableSound::register,
ExprBlockCompReductions::register,
ExprBlockingComponent::register,
ExprDamageFunctionBase::register,
ExprDamageFunctionFactor::register,
ExprDamageFunctionThreshold::register,
ExprReductionAngle::register,
ExprReductionBase::register,
ExprReductionDamageTypes::register,
ExprReductionFactor::register,

ExprSecBlankBlockComp::register,
ExprSecDamageFunction::register,
ExprSecReduction::register
);
}

private void register(SyntaxRegistry registry, Consumer<SyntaxRegistry>... consumers) {
Arrays.stream(consumers).forEach(consumer -> consumer.accept(registry));
}

}
Loading