Skip to content

Commit

Permalink
sculk_shrieker and sculk_catalyst support (#2347)
Browse files Browse the repository at this point in the history
  • Loading branch information
tal5 committed Jul 6, 2022
1 parent 3c3ccbc commit d851a8c
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 12 deletions.
Expand Up @@ -31,7 +31,9 @@ public static boolean describes(ObjectTag material) {
|| data instanceof DaylightDetector
|| data instanceof CommandBlock
|| (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_17) && (data instanceof SculkSensor
|| data instanceof BigDripleaf));
|| data instanceof BigDripleaf))
|| (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_19) && (data instanceof SculkCatalyst
|| data instanceof SculkShrieker));
}

public static MaterialMode getFrom(ObjectTag _material) {
Expand Down Expand Up @@ -70,6 +72,8 @@ public static void registerTags() {
// For daylight_detectors, output is INVERTED or NORMAL.
// For command_blocks, output is CONDITIONAL or NORMAL.
// For big_dripleafs, output is FULL, NONE, PARTIAL, or UNSTABLE.
// For sculk_catalysts, output is BLOOM or NORMAL.
// For sculk_shriekers, output is SHRIEKING or NORMAL.
// -->
PropertyParser.<MaterialMode, ElementTag>registerStaticTag(ElementTag.class, "mode", (attribute, material) -> {
return new ElementTag(material.getPropertyString());
Expand All @@ -92,10 +96,6 @@ public boolean isStructureBlock() {
return material.getModernData() instanceof StructureBlock;
}

public boolean isSculkSensor() {
return NMSHandler.getVersion().isAtLeast(NMSVersion.v1_17) && material.getModernData() instanceof SculkSensor;
}

public boolean isDaylightDetector() {
return material.getModernData() instanceof DaylightDetector;
}
Expand All @@ -108,6 +108,18 @@ public boolean isBigDripleaf() {
return NMSHandler.getVersion().isAtLeast(NMSVersion.v1_17) && material.getModernData() instanceof BigDripleaf;
}

public boolean isSculkSensor() {
return NMSHandler.getVersion().isAtLeast(NMSVersion.v1_17) && material.getModernData() instanceof SculkSensor;
}

public boolean isSculkCatalyst() {
return NMSHandler.getVersion().isAtLeast(NMSVersion.v1_19) && material.getModernData() instanceof SculkCatalyst;
}

public boolean isSculkShrieker() {
return NMSHandler.getVersion().isAtLeast(NMSVersion.v1_19) && material.getModernData() instanceof SculkShrieker;
}

public Comparator getComparator() {
return (Comparator) material.getModernData();
}
Expand Down Expand Up @@ -140,6 +152,14 @@ public BigDripleaf getBigDripleaf() {
return (BigDripleaf) material.getModernData();
}*/

/*public SculkCatalyst getSculkCatalyst() { // TODO: 1.19
return (SculkCatalyst) material.getModernData();
}
public SculkShrieker getSculkShrieker() {
return (SculkShrieker) material.getModernData();
}*/

@Override
public String getPropertyString() {
if (isComparator()) {
Expand All @@ -166,6 +186,12 @@ else if (isSculkSensor()) {
else if (isBigDripleaf()) {
return ((BigDripleaf) material.getModernData()).getTilt().name(); // TODO: 1.17
}
else if (isSculkCatalyst()) {
return ((SculkCatalyst) material.getModernData()).isBloom() ? "BLOOM" : "NORMAL"; // TODO: 1.19
}
else if (isSculkShrieker()) {
return ((SculkShrieker) material.getModernData()).isShrieking() ? "SHRIEKING" : "NORMAL"; // TODO: 1.19
}
return null; // Unreachable
}

Expand All @@ -191,6 +217,8 @@ public void adjust(Mechanism mechanism) {
// For daylight_detectors, input is INVERTED or NORMAL.
// For command_blocks, input is CONDITIONAL or NORMAL.
// For big_dripleafs, input is FULL, NONE, PARTIAL, or UNSTABLE.
// For sculk_catalysts, input is BLOOM or NORMAL.
// For sculk_shriekers, input is SHRIEKING or NORMAL.
// @tags
// <MaterialTag.mode>
// -->
Expand All @@ -216,6 +244,12 @@ else if (isCommandBlock()) {
else if (isSculkSensor() || isBigDripleaf()) {
MultiVersionHelper1_17.materialModeRunMech(mechanism, this);
}
else if (isSculkCatalyst()) {
((SculkCatalyst) material.getModernData()).setBloom(CoreUtilities.equalsIgnoreCase(mechanism.getValue().asString(), "bloom")); // TODO: 1.19
}
else if (isSculkShrieker()) {
((SculkShrieker) material.getModernData()).setShrieking(CoreUtilities.equalsIgnoreCase(mechanism.getValue().asString(), "shrieking")); // TODO: 1.19
}
}
}
}
@@ -1,5 +1,7 @@
package com.denizenscript.denizen.objects.properties.material;

import com.denizenscript.denizen.nms.NMSHandler;
import com.denizenscript.denizen.nms.NMSVersion;
import com.denizenscript.denizen.objects.MaterialTag;
import com.denizenscript.denizencore.objects.Mechanism;
import com.denizenscript.denizencore.objects.ObjectTag;
Expand Down Expand Up @@ -30,7 +32,8 @@ public static boolean describes(ObjectTag material) {
|| data instanceof Piston
|| data instanceof Lightable
|| data instanceof EndPortalFrame
|| data instanceof Hopper;
|| data instanceof Hopper
|| (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_19) && data instanceof SculkShrieker);
}

public static MaterialSwitchable getFrom(ObjectTag _material) {
Expand Down Expand Up @@ -71,6 +74,7 @@ public static void registerTags() {
// - a piston block is extended
// - an end portal frame has an ender eye in it
// - a hopper is NOT being powered by redstone
// - a sculk_shrieker can summon a warden
// -->
PropertyParser.<MaterialSwitchable, ElementTag>registerStaticTag(ElementTag.class, "switched", (attribute, material) -> {
return new ElementTag(material.getState());
Expand All @@ -81,10 +85,6 @@ public boolean isPowerable() {
return material.getModernData() instanceof Powerable;
}

public Powerable getPowerable() {
return (Powerable) material.getModernData();
}

public boolean isOpenable() {
return material.getModernData() instanceof Openable;
}
Expand Down Expand Up @@ -113,6 +113,14 @@ public boolean isHopper() {
return material.getModernData() instanceof Hopper;
}

public boolean isSculkShrieker() {
return NMSHandler.getVersion().isAtLeast(NMSVersion.v1_19) && material.getModernData() instanceof SculkShrieker;
}

public Powerable getPowerable() {
return (Powerable) material.getModernData();
}

public Openable getOpenable() {
return (Openable) material.getModernData();
}
Expand Down Expand Up @@ -141,6 +149,10 @@ public Hopper getHopper() {
return (Hopper) material.getModernData();
}

/*public SculkShrieker getSculkShrieker() { // TODO: 1.19
return (SculkShrieker) material.getModernData();
}*/

public boolean getState() {
if (isOpenable()) {
return getOpenable().isOpen();
Expand All @@ -166,6 +178,9 @@ else if (isEndFrame()) {
else if (isHopper()) {
return getHopper().isEnabled();
}
else if (isSculkShrieker()) {
return ((SculkShrieker) material.getModernData()).isCanSummon();
}
return false; // Unreachable
}

Expand Down Expand Up @@ -194,6 +209,9 @@ else if (isEndFrame()) {
else if (isHopper()) {
getHopper().setEnabled(state);
}
else if (isSculkShrieker()) {
((SculkShrieker) material.getModernData()).setCanSummon(state);
}
}

@Override
Expand All @@ -214,8 +232,17 @@ public void adjust(Mechanism mechanism) {
// @name switched
// @input ElementTag(Boolean)
// @description
// Sets whether a material is 'switched on', which has different semantic meaning depending on the material type (eg a door is opened, a piston is extended, etc).
// Refer to <@link tag MaterialTag.switched> for specifics.
// Sets whether a material is 'switched on', which has different semantic meaning depending on the material type.
// More specifically, this sets whether:
// - a Powerable material (like pressure plates) is activated
// - an Openable material (like doors) is open
// - a dispenser is powered and should dispense its contents
// - a daylight sensor can see the sun
// - a lightable block is lit
// - a piston block is extended
// - an end portal frame has an ender eye in it
// - a hopper is NOT being powered by redstone
// - a sculk_shrieker can summon a warden
// @tags
// <MaterialTag.switched>
// -->
Expand Down

0 comments on commit d851a8c

Please sign in to comment.