Merge branch 'mc1.20.1/feature-dev' into jay/mc1.20.1/attached-registry-refactors

# Conflicts:
#	src/main/java/com/simibubi/create/content/contraptions/actors/harvester/HarvesterMovementBehaviour.java
This commit is contained in:
IThundxr 2025-02-20 08:37:11 -05:00
commit 4e56f60de4
No known key found for this signature in database
8 changed files with 32 additions and 30 deletions

View file

@ -140,6 +140,7 @@ _Now using Flywheel 1.0_
- Added `#create:sugar_cane_variants` to allow the mechanical saw to work with custom sugarcane variants (#7263) - Added `#create:sugar_cane_variants` to allow the mechanical saw to work with custom sugarcane variants (#7263)
- New API for custom storage block behaviour on contraptions. - New API for custom storage block behaviour on contraptions.
For simple cases, create provides the `#create:simple_mounted_storage` and `#create:chest_mounted_storage` block tags. For simple cases, create provides the `#create:simple_mounted_storage` and `#create:chest_mounted_storage` block tags.
- Added `#create:non_breakable` to mark blocks that cannot be broken by block-breaking kinetics
- Removed LangMerger and related classes - Removed LangMerger and related classes
- Implemented an api to allow mods to register schematic requirements, partial safe nbt and contraption transforms - Implemented an api to allow mods to register schematic requirements, partial safe nbt and contraption transforms
without implementing interfaces (#4702) without implementing interfaces (#4702)

View file

@ -31,7 +31,7 @@ import net.minecraftforge.registries.IForgeRegistry;
public class AllTags { public class AllTags {
public static <T> TagKey<T> optionalTag(IForgeRegistry<T> registry, public static <T> TagKey<T> optionalTag(IForgeRegistry<T> registry,
ResourceLocation id) { ResourceLocation id) {
return registry.tags() return registry.tags()
.createOptionalTagKey(id, Collections.emptySet()); .createOptionalTagKey(id, Collections.emptySet());
} }
@ -59,9 +59,7 @@ public class AllTags {
TIC("tconstruct"), TIC("tconstruct"),
QUARK("quark"), QUARK("quark"),
GS("galosphere"), GS("galosphere"),
CURIOS("curios") CURIOS("curios");
;
public final String id; public final String id;
public final boolean optionalDefault; public final boolean optionalDefault;
@ -92,6 +90,7 @@ public class AllTags {
GIRDABLE_TRACKS, GIRDABLE_TRACKS,
MOVABLE_EMPTY_COLLIDER, MOVABLE_EMPTY_COLLIDER,
NON_MOVABLE, NON_MOVABLE,
NON_BREAKABLE,
ORE_OVERRIDE_STONE, ORE_OVERRIDE_STONE,
PASSIVE_BOILER_HEATERS, PASSIVE_BOILER_HEATERS,
SAFE_NBT, SAFE_NBT,
@ -163,7 +162,8 @@ public class AllTags {
return state.is(tag); return state.is(tag);
} }
private static void init() {} private static void init() {
}
} }
@ -199,17 +199,15 @@ public class AllTags {
STRIPPED_LOGS(FORGE), STRIPPED_LOGS(FORGE),
STRIPPED_WOOD(FORGE), STRIPPED_WOOD(FORGE),
PLATES(FORGE), PLATES(FORGE),
OBSIDIAN_DUST(FORGE,"dusts/obsidian"), OBSIDIAN_DUST(FORGE, "dusts/obsidian"),
WRENCH(FORGE, "tools/wrench"), WRENCH(FORGE, "tools/wrench"),
ALLURITE(MOD,"stone_types/galosphere/allurite"), ALLURITE(MOD, "stone_types/galosphere/allurite"),
AMETHYST(MOD,"stone_types/galosphere/amethyst"), AMETHYST(MOD, "stone_types/galosphere/amethyst"),
LUMIERE(MOD, "stone_types/galosphere/lumiere"), LUMIERE(MOD, "stone_types/galosphere/lumiere"),
UA_CORAL(MOD, "upgrade_aquatic/coral"), UA_CORAL(MOD, "upgrade_aquatic/coral"),
CURIOS_HEAD(CURIOS, "head") CURIOS_HEAD(CURIOS, "head");
;
public final TagKey<Item> tag; public final TagKey<Item> tag;
public final boolean alwaysDatagen; public final boolean alwaysDatagen;
@ -250,7 +248,8 @@ public class AllTags {
return stack.is(tag); return stack.is(tag);
} }
private static void init() {} private static void init() {
}
} }
@ -263,9 +262,7 @@ public class AllTags {
FAN_PROCESSING_CATALYSTS_SMOKING(MOD, "fan_processing_catalysts/smoking"), FAN_PROCESSING_CATALYSTS_SMOKING(MOD, "fan_processing_catalysts/smoking"),
FAN_PROCESSING_CATALYSTS_SPLASHING(MOD, "fan_processing_catalysts/splashing"), FAN_PROCESSING_CATALYSTS_SPLASHING(MOD, "fan_processing_catalysts/splashing"),
HONEY(FORGE) HONEY(FORGE);
;
public final TagKey<Fluid> tag; public final TagKey<Fluid> tag;
public final boolean alwaysDatagen; public final boolean alwaysDatagen;
@ -305,7 +302,8 @@ public class AllTags {
return state.is(tag); return state.is(tag);
} }
private static void init() {} private static void init() {
}
} }
@ -353,7 +351,8 @@ public class AllTags {
return matches(entity.getType()); return matches(entity.getType());
} }
private static void init() {} private static void init() {
}
} }
@ -396,7 +395,8 @@ public class AllTags {
return ForgeRegistries.RECIPE_SERIALIZERS.getHolder(recipeSerializer).orElseThrow().is(tag); return ForgeRegistries.RECIPE_SERIALIZERS.getHolder(recipeSerializer).orElseThrow().is(tag);
} }
private static void init() {} private static void init() {
}
} }
public static void init() { public static void init() {

View file

@ -4,7 +4,7 @@ import javax.annotation.Nullable;
import org.apache.commons.lang3.mutable.MutableBoolean; import org.apache.commons.lang3.mutable.MutableBoolean;
import com.simibubi.create.AllTags; import com.simibubi.create.AllTags.AllBlockTags;
import com.simibubi.create.api.behaviour.movement.MovementBehaviour; import com.simibubi.create.api.behaviour.movement.MovementBehaviour;
import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.contraptions.behaviour.MovementContext;
import com.simibubi.create.content.contraptions.render.ActorVisual; import com.simibubi.create.content.contraptions.render.ActorVisual;
@ -172,7 +172,7 @@ public class HarvesterMovementBehaviour implements MovementBehaviour {
if (block == Blocks.SWEET_BERRY_BUSH) { if (block == Blocks.SWEET_BERRY_BUSH) {
return state.setValue(BlockStateProperties.AGE_3, Integer.valueOf(1)); return state.setValue(BlockStateProperties.AGE_3, Integer.valueOf(1));
} }
if (state.is(AllTags.AllBlockTags.SUGAR_CANE_VARIANTS.tag) || block instanceof GrowingPlantBlock) { if (AllBlockTags.SUGAR_CANE_VARIANTS.matches(block) || block instanceof GrowingPlantBlock) {
if (state.getFluidState() if (state.getFluidState()
.isEmpty()) .isEmpty())
return Blocks.AIR.defaultBlockState(); return Blocks.AIR.defaultBlockState();

View file

@ -2,6 +2,7 @@ package com.simibubi.create.content.kinetics.base;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import com.simibubi.create.AllTags.AllBlockTags;
import com.simibubi.create.foundation.utility.BlockHelper; import com.simibubi.create.foundation.utility.BlockHelper;
import net.createmod.catnip.math.VecHelper; import net.createmod.catnip.math.VecHelper;
@ -129,7 +130,7 @@ public abstract class BlockBreakingKineticBlockEntity extends KineticBlockEntity
} }
public static boolean isBreakable(BlockState stateToBreak, float blockHardness) { public static boolean isBreakable(BlockState stateToBreak, float blockHardness) {
return !(stateToBreak.liquid() || stateToBreak.getBlock() instanceof AirBlock || blockHardness == -1); return !(stateToBreak.liquid() || stateToBreak.getBlock() instanceof AirBlock || blockHardness == -1 || AllBlockTags.NON_BREAKABLE.matches(stateToBreak));
} }
public void onBlockBroken(BlockState stateToBreak) { public void onBlockBroken(BlockState stateToBreak) {

View file

@ -86,10 +86,9 @@ public class TableClothBlockEntity extends SmartBlockEntity {
public void lazyTick() { public void lazyTick() {
super.lazyTick(); super.lazyTick();
BlockPos relativePos = worldPosition.relative(facing); BlockPos relativePos = worldPosition.relative(facing);
sideOccluded = level.getBlockState(relativePos) sideOccluded = AllBlockTags.TABLE_CLOTHS.matches(level.getBlockState(relativePos))
.is(AllBlockTags.TABLE_CLOTHS.tag)
|| Block.isFaceFull(level.getBlockState(relativePos.below()) || Block.isFaceFull(level.getBlockState(relativePos.below())
.getOcclusionShape(level, relativePos.below()), facing.getOpposite()); .getOcclusionShape(level, relativePos.below()), facing.getOpposite());
} }
@Override @Override

View file

@ -8,6 +8,7 @@ import java.util.Set;
import com.simibubi.create.AllSpecialTextures; import com.simibubi.create.AllSpecialTextures;
import com.simibubi.create.AllTags; import com.simibubi.create.AllTags;
import com.simibubi.create.AllTags.AllItemTags;
import com.simibubi.create.content.equipment.blueprint.BlueprintOverlayRenderer; import com.simibubi.create.content.equipment.blueprint.BlueprintOverlayRenderer;
import com.simibubi.create.foundation.block.ProperWaterloggedBlock; import com.simibubi.create.foundation.block.ProperWaterloggedBlock;
import com.simibubi.create.foundation.utility.BlockHelper; import com.simibubi.create.foundation.utility.BlockHelper;
@ -375,7 +376,7 @@ public class TrackPlacement {
ItemStack offhandItem = player.getOffhandItem() ItemStack offhandItem = player.getOffhandItem()
.copy(); .copy();
boolean shouldPave = offhandItem.getItem() instanceof BlockItem && !offhandItem.is(AllTags.AllItemTags.INVALID_FOR_TRACK_PAVING.tag); boolean shouldPave = offhandItem.getItem() instanceof BlockItem && !AllItemTags.INVALID_FOR_TRACK_PAVING.matches(offhandItem);
if (shouldPave) { if (shouldPave) {
BlockItem paveItem = (BlockItem) offhandItem.getItem(); BlockItem paveItem = (BlockItem) offhandItem.getItem();
paveTracks(level, info, paveItem, true); paveTracks(level, info, paveItem, true);

View file

@ -62,8 +62,8 @@ public class TreeCutter {
/** /**
* Finds a tree at the given pos. Block at the position should be air * Finds a tree at the given pos. Block at the position should be air
* *
* @param reader the level that will be searched for a tree * @param reader the level that will be searched for a tree
* @param pos position that the saw cut at * @param pos position that the saw cut at
* @param brokenState block state what was broken by the saw * @param brokenState block state what was broken by the saw
*/ */
@Nonnull @Nonnull
@ -288,14 +288,14 @@ public class TreeCutter {
} }
private static void forNeighbours(BlockPos pos, Set<BlockPos> visited, SearchDirection direction, private static void forNeighbours(BlockPos pos, Set<BlockPos> visited, SearchDirection direction,
Consumer<BlockPos> acceptor) { Consumer<BlockPos> acceptor) {
BlockPos.betweenClosedStream(pos.offset(-1, direction.minY, -1), pos.offset(1, direction.maxY, 1)) BlockPos.betweenClosedStream(pos.offset(-1, direction.minY, -1), pos.offset(1, direction.maxY, 1))
.filter(((Predicate<BlockPos>) visited::contains).negate()) .filter(((Predicate<BlockPos>) visited::contains).negate())
.forEach(acceptor); .forEach(acceptor);
} }
public static boolean isRoot(BlockState state) { public static boolean isRoot(BlockState state) {
return state.is(AllBlockTags.ROOTS.tag); return AllBlockTags.ROOTS.matches(state);
} }
public static boolean isLog(BlockState state) { public static boolean isLog(BlockState state) {
@ -333,7 +333,7 @@ public class TreeCutter {
@Override @Override
public void destroyBlocks(Level world, ItemStack toDamage, @Nullable Player playerEntity, public void destroyBlocks(Level world, ItemStack toDamage, @Nullable Player playerEntity,
BiConsumer<BlockPos, ItemStack> drop) { BiConsumer<BlockPos, ItemStack> drop) {
attachments.forEach(makeCallbackFor(world, 1 / 32f, toDamage, playerEntity, drop)); attachments.forEach(makeCallbackFor(world, 1 / 32f, toDamage, playerEntity, drop));
logs.forEach(makeCallbackFor(world, 1 / 2f, toDamage, playerEntity, drop)); logs.forEach(makeCallbackFor(world, 1 / 2f, toDamage, playerEntity, drop));
leaves.forEach(makeCallbackFor(world, 1 / 8f, toDamage, playerEntity, drop)); leaves.forEach(makeCallbackFor(world, 1 / 8f, toDamage, playerEntity, drop));

Binary file not shown.

Before

Width:  |  Height:  |  Size: 906 B