update to 1.20.1
This commit is contained in:
		
							parent
							
								
									8f0c9fdf56
								
							
						
					
					
						commit
						db1d4b2df2
					
				
							
								
								
									
										101
									
								
								build.gradle
									
									
									
									
									
								
							
							
						
						
									
										101
									
								
								build.gradle
									
									
									
									
									
								
							@ -1,79 +1,102 @@
 | 
			
		||||
plugins {
 | 
			
		||||
	id 'fabric-loom' version '0.6-SNAPSHOT'
 | 
			
		||||
    id "com.modrinth.minotaur" version "2.+"
 | 
			
		||||
	id 'fabric-loom' version '1.2-SNAPSHOT'
 | 
			
		||||
	id 'maven-publish'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sourceCompatibility = JavaVersion.VERSION_1_8
 | 
			
		||||
targetCompatibility = JavaVersion.VERSION_1_8
 | 
			
		||||
 | 
			
		||||
archivesBaseName = project.archives_base_name
 | 
			
		||||
version = project.mod_version
 | 
			
		||||
group = project.maven_group
 | 
			
		||||
 | 
			
		||||
minecraft {
 | 
			
		||||
base {
 | 
			
		||||
	archivesName = project.archives_base_name
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
repositories {
 | 
			
		||||
	// Add repositories to retrieve artifacts from in here.
 | 
			
		||||
	// You should only use this when depending on other mods because
 | 
			
		||||
	// Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
 | 
			
		||||
	// See https://docs.gradle.org/current/userguide/declaring_repositories.html
 | 
			
		||||
	// for more information about repositories.
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
loom {
 | 
			
		||||
	splitEnvironmentSourceSets()
 | 
			
		||||
 | 
			
		||||
	mods {
 | 
			
		||||
		"modid" {
 | 
			
		||||
			sourceSet sourceSets.main
 | 
			
		||||
			sourceSet sourceSets.client
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
dependencies {
 | 
			
		||||
	//to change the versions see the gradle.properties file
 | 
			
		||||
	// To change the versions see the gradle.properties file
 | 
			
		||||
	minecraft "com.mojang:minecraft:${project.minecraft_version}"
 | 
			
		||||
	mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
 | 
			
		||||
	modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
 | 
			
		||||
 | 
			
		||||
	// Fabric API. This is technically optional, but you probably want it anyway.
 | 
			
		||||
	modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
 | 
			
		||||
 | 
			
		||||
	// Uncomment the following line to enable the deprecated Fabric API modules.
 | 
			
		||||
	// These are included in the Fabric API production distribution and allow you to update your mod to the latest modules at a later more convenient time.
 | 
			
		||||
 | 
			
		||||
	// modImplementation "net.fabricmc.fabric-api:fabric-api-deprecated:${project.fabric_version}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
processResources {
 | 
			
		||||
	inputs.property "version", project.version
 | 
			
		||||
 | 
			
		||||
	from(sourceSets.main.resources.srcDirs) {
 | 
			
		||||
		include "fabric.mod.json"
 | 
			
		||||
	filesMatching("fabric.mod.json") {
 | 
			
		||||
		expand "version": project.version
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	from(sourceSets.main.resources.srcDirs) {
 | 
			
		||||
		exclude "fabric.mod.json"
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ensure that the encoding is set to UTF-8, no matter what the system default is
 | 
			
		||||
// this fixes some edge cases with special characters not displaying correctly
 | 
			
		||||
// see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html
 | 
			
		||||
tasks.withType(JavaCompile) {
 | 
			
		||||
	options.encoding = "UTF-8"
 | 
			
		||||
tasks.withType(JavaCompile).configureEach {
 | 
			
		||||
	it.options.release = 17
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
 | 
			
		||||
// if it is present.
 | 
			
		||||
// If you remove this task, sources will not be generated.
 | 
			
		||||
task sourcesJar(type: Jar, dependsOn: classes) {
 | 
			
		||||
	classifier = "sources"
 | 
			
		||||
	from sourceSets.main.allSource
 | 
			
		||||
java {
 | 
			
		||||
	// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
 | 
			
		||||
	// if it is present.
 | 
			
		||||
	// If you remove this line, sources will not be generated.
 | 
			
		||||
	withSourcesJar()
 | 
			
		||||
 | 
			
		||||
	sourceCompatibility = JavaVersion.VERSION_17
 | 
			
		||||
	targetCompatibility = JavaVersion.VERSION_17
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jar {
 | 
			
		||||
	from "LICENSE"
 | 
			
		||||
	from("LICENSE") {
 | 
			
		||||
		rename { "${it}_${project.archivesBaseName}"}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
import com.modrinth.minotaur.dependencies.ModDependency
 | 
			
		||||
 | 
			
		||||
modrinth {
 | 
			
		||||
    projectId = 'lwR0Ovmu' // The ID of your Modrinth project. Slugs will not work.
 | 
			
		||||
    uploadFile = remapJar // Tells Minotaur to use the remapped jar
 | 
			
		||||
    versionType = "beta"
 | 
			
		||||
    dependencies = [
 | 
			
		||||
            new ModDependency('P7dR8mSH', 'required'), //required dependency on Fabric API
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
// configure the maven publication
 | 
			
		||||
publishing {
 | 
			
		||||
	publications {
 | 
			
		||||
		mavenJava(MavenPublication) {
 | 
			
		||||
			// add all the jars that should be included when publishing to maven
 | 
			
		||||
			artifact(jar) {
 | 
			
		||||
				builtBy remapJar
 | 
			
		||||
			}
 | 
			
		||||
			artifact("${project.buildDir.absolutePath}/libs/${archivesBaseName}-${project.version}.jar"){
 | 
			
		||||
				builtBy remapJar
 | 
			
		||||
			}
 | 
			
		||||
			artifact(sourcesJar) {
 | 
			
		||||
				builtBy remapSourcesJar
 | 
			
		||||
			}
 | 
			
		||||
			from components.java
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// select the repositories you want to publish to
 | 
			
		||||
	// See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
 | 
			
		||||
	repositories {
 | 
			
		||||
		// uncomment to publish to the local maven
 | 
			
		||||
		// mavenLocal()
 | 
			
		||||
		// Add repositories to publish to here.
 | 
			
		||||
		// Notice: This block does NOT have the same function as the block in the top level.
 | 
			
		||||
		// The repositories here will be used for publishing your artifact, not for
 | 
			
		||||
		// retrieving dependencies.
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
@ -1,15 +1,15 @@
 | 
			
		||||
org.gradle.jvmargs  = -Xmx1G
 | 
			
		||||
 | 
			
		||||
#Fabric properties
 | 
			
		||||
minecraft_version=1.16.5
 | 
			
		||||
yarn_mappings=1.16.5+build.6
 | 
			
		||||
loader_version=0.11.3
 | 
			
		||||
minecraft_version=1.20.1
 | 
			
		||||
yarn_mappings=1.20.1+build.9
 | 
			
		||||
loader_version=0.14.21
 | 
			
		||||
 | 
			
		||||
#Fabric api
 | 
			
		||||
fabric_version=0.32.5+1.16
 | 
			
		||||
#Fabric
 | 
			
		||||
fabric_version=0.84.0+1.20.1
 | 
			
		||||
 | 
			
		||||
#Mod properties
 | 
			
		||||
mod_version         = 0.8.1
 | 
			
		||||
mod_version         = 0.9.1
 | 
			
		||||
maven_group         = quimufu.structure_item
 | 
			
		||||
archives_base_name  = structure_item
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							@ -1,5 +1,5 @@
 | 
			
		||||
distributionBase=GRADLE_USER_HOME
 | 
			
		||||
distributionPath=wrapper/dists
 | 
			
		||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-bin.zip
 | 
			
		||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
 | 
			
		||||
zipStoreBase=GRADLE_USER_HOME
 | 
			
		||||
zipStorePath=wrapper/dists
 | 
			
		||||
 | 
			
		||||
@ -1,89 +1,93 @@
 | 
			
		||||
package quimufu.structure_item;
 | 
			
		||||
 | 
			
		||||
import com.google.common.collect.Lists;
 | 
			
		||||
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
 | 
			
		||||
import net.minecraft.block.Block;
 | 
			
		||||
import net.minecraft.client.item.TooltipContext;
 | 
			
		||||
import net.minecraft.item.Item;
 | 
			
		||||
import net.minecraft.item.ItemGroup;
 | 
			
		||||
import net.minecraft.item.ItemStack;
 | 
			
		||||
import net.minecraft.item.ItemUsageContext;
 | 
			
		||||
import net.minecraft.nbt.CompoundTag;
 | 
			
		||||
import net.minecraft.nbt.ListTag;
 | 
			
		||||
import net.minecraft.nbt.NbtCompound;
 | 
			
		||||
import net.minecraft.nbt.NbtElement;
 | 
			
		||||
import net.minecraft.nbt.NbtHelper;
 | 
			
		||||
import net.minecraft.nbt.Tag;
 | 
			
		||||
import net.minecraft.nbt.NbtList;
 | 
			
		||||
import net.minecraft.network.packet.s2c.play.SubtitleS2CPacket;
 | 
			
		||||
import net.minecraft.network.packet.s2c.play.TitleS2CPacket;
 | 
			
		||||
import net.minecraft.registry.DefaultedRegistry;
 | 
			
		||||
import net.minecraft.registry.Registries;
 | 
			
		||||
import net.minecraft.registry.Registry;
 | 
			
		||||
import net.minecraft.registry.SimpleDefaultedRegistry;
 | 
			
		||||
import net.minecraft.server.network.ServerPlayNetworkHandler;
 | 
			
		||||
import net.minecraft.server.network.ServerPlayerEntity;
 | 
			
		||||
import net.minecraft.server.world.ServerWorld;
 | 
			
		||||
import net.minecraft.structure.Structure;
 | 
			
		||||
import net.minecraft.text.LiteralText;
 | 
			
		||||
import net.minecraft.structure.StructureTemplate;
 | 
			
		||||
import net.minecraft.text.LiteralTextContent;
 | 
			
		||||
import net.minecraft.text.Text;
 | 
			
		||||
import net.minecraft.text.TranslatableText;
 | 
			
		||||
import net.minecraft.util.*;
 | 
			
		||||
import net.minecraft.util.math.BlockPos;
 | 
			
		||||
import net.minecraft.util.math.Direction;
 | 
			
		||||
import net.minecraft.util.registry.DefaultedRegistry;
 | 
			
		||||
import net.minecraft.util.registry.Registry;
 | 
			
		||||
import net.minecraft.util.math.Vec3i;
 | 
			
		||||
import net.minecraft.world.World;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Optional;
 | 
			
		||||
 | 
			
		||||
import static quimufu.structure_item.StructureItemMod.LOGGER;
 | 
			
		||||
 | 
			
		||||
public class MyItem extends Item {
 | 
			
		||||
    static Item.Settings p = (new Item.Settings()).group(ItemGroup.REDSTONE).maxCount(1);
 | 
			
		||||
    static Item.Settings p = new FabricItemSettings().fireproof().rarity(Rarity.RARE).maxCount(1);
 | 
			
		||||
 | 
			
		||||
    public MyItem() {
 | 
			
		||||
        super(p);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void appendTooltip(ItemStack itemStack, World world, List<Text> texts, TooltipContext tooltipFlag) {
 | 
			
		||||
        if (!itemStack.hasTag() || !itemStack.getTag().contains("structure", 8)) {
 | 
			
		||||
            texts.add((new TranslatableText("item.structure_item.item.tooltip.tag.invalid")).formatted(Formatting.RED));
 | 
			
		||||
        if (!itemStack.hasNbt() || !itemStack.getNbt().contains("structure", 8)) {
 | 
			
		||||
            texts.add((Text.translatable("item.structure_item.item.tooltip.tag.invalid")).formatted(Formatting.RED));
 | 
			
		||||
        } else {
 | 
			
		||||
            CompoundTag tag = itemStack.getTag();
 | 
			
		||||
            NbtCompound tag = itemStack.getNbt();
 | 
			
		||||
            if (tooltipFlag.isAdvanced()) {
 | 
			
		||||
                texts.add(new TranslatableText("item.structure_item.item.tooltip.structure"));
 | 
			
		||||
                texts.add(new LiteralText("  " + tag.getString("structure")));
 | 
			
		||||
                texts.add(Text.translatable("item.structure_item.item.tooltip.structure"));
 | 
			
		||||
                texts.add(Text.literal("  " + tag.getString("structure")));
 | 
			
		||||
                if (tag.contains("allowedOn", 8)) {
 | 
			
		||||
                    texts.add(new TranslatableText("item.structure_item.item.tooltip.allowed.on"));
 | 
			
		||||
                    texts.add(new LiteralText("  " + tag.getString("allowedOn")));
 | 
			
		||||
                    texts.add(Text.translatable("item.structure_item.item.tooltip.allowed.on"));
 | 
			
		||||
                    texts.add(Text.literal("  " + tag.getString("allowedOn")));
 | 
			
		||||
                }
 | 
			
		||||
                if (tag.contains("offset", 10)) {
 | 
			
		||||
                    BlockPos offset = NbtHelper.toBlockPos(tag.getCompound("offset"));
 | 
			
		||||
                    texts.add(new TranslatableText("item.structure_item.item.tooltip.fixed.offset"));
 | 
			
		||||
                    Text c = new TranslatableText("item.structure_item.item.tooltip.xyz",
 | 
			
		||||
                            new LiteralText(String.valueOf(offset.getX())),
 | 
			
		||||
                            new LiteralText(String.valueOf(offset.getY())),
 | 
			
		||||
                            new LiteralText(String.valueOf(offset.getZ())));
 | 
			
		||||
                    texts.add(Text.translatable("item.structure_item.item.tooltip.fixed.offset"));
 | 
			
		||||
                    Text c = Text.translatable("item.structure_item.item.tooltip.xyz",
 | 
			
		||||
                            Text.literal(String.valueOf(offset.getX())),
 | 
			
		||||
                            Text.literal(String.valueOf(offset.getY())),
 | 
			
		||||
                            Text.literal(String.valueOf(offset.getZ())));
 | 
			
		||||
                    texts.add(c);
 | 
			
		||||
                } else {
 | 
			
		||||
                    texts.add(new TranslatableText("item.structure_item.item.tooltip.dynamic.offset"));
 | 
			
		||||
                    texts.add(Text.translatable("item.structure_item.item.tooltip.dynamic.offset"));
 | 
			
		||||
                }
 | 
			
		||||
                if (tag.contains("blacklist", 9)) {
 | 
			
		||||
                    texts.add(new TranslatableText("item.structure_item.item.tooltip.blacklist"));
 | 
			
		||||
                    ListTag bl = tag.getList("blacklist", 8);
 | 
			
		||||
                    texts.add(Text.translatable("item.structure_item.item.tooltip.blacklist"));
 | 
			
		||||
                    NbtList bl = tag.getList("blacklist", 8);
 | 
			
		||||
                    int i = 0;
 | 
			
		||||
                    for ( Tag entry : bl) {
 | 
			
		||||
                        texts.add(new LiteralText("  " + entry.asString()));
 | 
			
		||||
                    for ( NbtElement entry : bl) {
 | 
			
		||||
                        texts.add(Text.literal("  " + entry.asString()));
 | 
			
		||||
                        i++;
 | 
			
		||||
                        if (i == 4) {
 | 
			
		||||
                            texts.add(new TranslatableText("item.structure_item.item.tooltip.blacklist.more",
 | 
			
		||||
                                    new LiteralText(String.valueOf(bl.size() - i))));
 | 
			
		||||
                            texts.add(Text.translatable("item.structure_item.item.tooltip.blacklist.more",
 | 
			
		||||
                                    Text.literal(String.valueOf(bl.size() - i))));
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (!tag.contains("replaceEntities", 99) || tag.getBoolean("replaceEntities")) {
 | 
			
		||||
                    texts.add(new TranslatableText("item.structure_item.item.tooltip.replaceEntities"));
 | 
			
		||||
                    texts.add(Text.translatable("item.structure_item.item.tooltip.replaceEntities"));
 | 
			
		||||
                } else {
 | 
			
		||||
                    texts.add(new TranslatableText("item.structure_item.item.tooltip.doNotReplaceEntities"));
 | 
			
		||||
                    texts.add(Text.translatable("item.structure_item.item.tooltip.doNotReplaceEntities"));
 | 
			
		||||
                }
 | 
			
		||||
                if (!tag.contains("placeEntities", 99) || tag.getBoolean("placeEntities")) {
 | 
			
		||||
                    texts.add(new TranslatableText("item.structure_item.item.tooltip.placeEntities"));
 | 
			
		||||
                    texts.add(Text.translatable("item.structure_item.item.tooltip.placeEntities"));
 | 
			
		||||
                } else {
 | 
			
		||||
                    texts.add(new TranslatableText("item.structure_item.item.tooltip.doNotPlaceEntities"));
 | 
			
		||||
                    texts.add(Text.translatable("item.structure_item.item.tooltip.doNotPlaceEntities"));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@ -98,10 +102,10 @@ public class MyItem extends Item {
 | 
			
		||||
            } else {
 | 
			
		||||
                player = null;
 | 
			
		||||
            }
 | 
			
		||||
            CompoundTag tag = c.getStack().getTag();
 | 
			
		||||
            NbtCompound tag = c.getStack().getNbt();
 | 
			
		||||
            if (tag == null) {
 | 
			
		||||
                TranslatableText message =
 | 
			
		||||
                        new TranslatableText("items.structure.spawner.no.tag");
 | 
			
		||||
                Text message =
 | 
			
		||||
                        Text.translatable("items.structure.spawner.no.tag");
 | 
			
		||||
                sendPlayerChat(player, message);
 | 
			
		||||
                return ActionResult.FAIL;
 | 
			
		||||
            }
 | 
			
		||||
@ -110,9 +114,9 @@ public class MyItem extends Item {
 | 
			
		||||
                String allowedOn = tag.getString("allowedOn");
 | 
			
		||||
                allowed = getBlock(allowedOn);
 | 
			
		||||
                if (allowed == null) {
 | 
			
		||||
                    TranslatableText message =
 | 
			
		||||
                            new TranslatableText("items.structure.spawner.invalid.block",
 | 
			
		||||
                                    new LiteralText(allowedOn));
 | 
			
		||||
                    Text message =
 | 
			
		||||
                            Text.translatable("items.structure.spawner.invalid.block",
 | 
			
		||||
                                    Text.literal(allowedOn));
 | 
			
		||||
                    sendPlayerChat(player, message);
 | 
			
		||||
                    return ActionResult.FAIL;
 | 
			
		||||
                }
 | 
			
		||||
@ -120,37 +124,39 @@ public class MyItem extends Item {
 | 
			
		||||
            Block current = c.getWorld().getBlockState(c.getBlockPos()).getBlock();
 | 
			
		||||
 | 
			
		||||
            if (allowed != null && !current.equals(allowed)) {
 | 
			
		||||
                Text currentName = new TranslatableText(current.getTranslationKey());
 | 
			
		||||
                Text allowedName = new TranslatableText(allowed.getTranslationKey());
 | 
			
		||||
                TranslatableText message =
 | 
			
		||||
                        new TranslatableText("items.structure.spawner.invalid.block.clicked",
 | 
			
		||||
                Text currentName = Text.translatable(current.getTranslationKey());
 | 
			
		||||
                Text allowedName = Text.translatable(allowed.getTranslationKey());
 | 
			
		||||
                Text message =
 | 
			
		||||
                        Text.translatable("items.structure.spawner.invalid.block.clicked",
 | 
			
		||||
                                currentName, allowedName);
 | 
			
		||||
                sendPlayer(player, message);
 | 
			
		||||
                return ActionResult.FAIL;
 | 
			
		||||
            }
 | 
			
		||||
            if (!tag.contains("structure", 8)) {
 | 
			
		||||
                LOGGER.info("No structure name set");
 | 
			
		||||
                TranslatableText message =
 | 
			
		||||
                        new TranslatableText("items.structure.spawner.no.structure");
 | 
			
		||||
                Text message =
 | 
			
		||||
                        Text.translatable("items.structure.spawner.no.structure");
 | 
			
		||||
                sendPlayerChat(player, message);
 | 
			
		||||
                return ActionResult.FAIL;
 | 
			
		||||
            }
 | 
			
		||||
            String structureName = tag.getString("structure");
 | 
			
		||||
            Identifier structureResourceID = Identifier.tryParse(structureName);
 | 
			
		||||
            if (structureResourceID == null) {
 | 
			
		||||
                TranslatableText message =
 | 
			
		||||
                        new TranslatableText("items.structure.spawner.invalid.structure.name");
 | 
			
		||||
                Text message =
 | 
			
		||||
                        Text.translatable("items.structure.spawner.invalid.structure.name");
 | 
			
		||||
                sendPlayerChat(player, message);
 | 
			
		||||
                return ActionResult.FAIL;
 | 
			
		||||
            }
 | 
			
		||||
            Structure x = ((ServerWorld) c.getWorld()).getStructureManager().getStructure(structureResourceID);
 | 
			
		||||
            if (x == null) {
 | 
			
		||||
                TranslatableText message =
 | 
			
		||||
                        new TranslatableText("items.structure.spawner.structure.nonexistent",
 | 
			
		||||
                                new LiteralText(structureResourceID.toString()));
 | 
			
		||||
            Optional<StructureTemplate> xOpt = ((ServerWorld) c.getWorld()).getStructureTemplateManager().getTemplate(structureResourceID);
 | 
			
		||||
            if (xOpt.isEmpty()) {
 | 
			
		||||
                Text message =
 | 
			
		||||
                        Text.translatable("items.structure.spawner.structure.nonexistent",
 | 
			
		||||
                                Text.literal(structureResourceID.toString()));
 | 
			
		||||
                sendPlayerChat(player, message);
 | 
			
		||||
                return ActionResult.FAIL;
 | 
			
		||||
            }
 | 
			
		||||
            StructureTemplate x = xOpt.get();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            BlockPos loc = c.getBlockPos().offset(c.getSide());
 | 
			
		||||
            if (tag.contains("offset", 10)) {
 | 
			
		||||
@ -158,7 +164,7 @@ public class MyItem extends Item {
 | 
			
		||||
                loc = loc.add(offset);
 | 
			
		||||
            } else if (c.getPlayer() != null) {
 | 
			
		||||
                Direction direction = Direction.getEntityFacingOrder(c.getPlayer())[0];
 | 
			
		||||
                BlockPos size = x.getSize();
 | 
			
		||||
                Vec3i size = x.getSize();
 | 
			
		||||
                loc = loc.add(getDirectionalOffset(direction, size));
 | 
			
		||||
            } else {
 | 
			
		||||
                LOGGER.info("No player & no offset");
 | 
			
		||||
@ -172,16 +178,16 @@ public class MyItem extends Item {
 | 
			
		||||
                ps.setIgnoreEntities(!tag.getBoolean("placeEntities"));
 | 
			
		||||
            }
 | 
			
		||||
            if (tag.contains("blacklist", 9)) {
 | 
			
		||||
                ListTag bl = tag.getList("blacklist", 8);
 | 
			
		||||
                NbtList bl = tag.getList("blacklist", 8);
 | 
			
		||||
                List<Block> blacklist = Lists.newArrayList();
 | 
			
		||||
                for (Tag b : bl) {
 | 
			
		||||
                for (NbtElement b : bl) {
 | 
			
		||||
                    Block block = getBlock(b.asString());
 | 
			
		||||
                    if (block != null) {
 | 
			
		||||
                        blacklist.add(block);
 | 
			
		||||
                    } else {
 | 
			
		||||
                        TranslatableText message =
 | 
			
		||||
                                new TranslatableText("items.structure.spawner.invalid.block",
 | 
			
		||||
                                        new LiteralText(b.asString()));
 | 
			
		||||
                        Text message =
 | 
			
		||||
                                Text.translatable("items.structure.spawner.invalid.block",
 | 
			
		||||
                                        Text.literal(b.asString()));
 | 
			
		||||
                        sendPlayerChat(player, message);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
@ -191,8 +197,7 @@ public class MyItem extends Item {
 | 
			
		||||
            ps.setWorld(c.getWorld())
 | 
			
		||||
                    .setSize(x.getSize())
 | 
			
		||||
                    .setMirror(BlockMirror.NONE)
 | 
			
		||||
                    .setRotation(BlockRotation.NONE)
 | 
			
		||||
                    .setChunkPosition(null);
 | 
			
		||||
                    .setRotation(BlockRotation.NONE);
 | 
			
		||||
            boolean success = false;
 | 
			
		||||
            try {
 | 
			
		||||
                if(x.place((ServerWorld)c.getWorld(), loc, loc, ps, c.getWorld().getRandom(), 2))
 | 
			
		||||
@ -203,8 +208,8 @@ public class MyItem extends Item {
 | 
			
		||||
                c.getStack().decrement(1);
 | 
			
		||||
                return ActionResult.SUCCESS;
 | 
			
		||||
            }
 | 
			
		||||
            TranslatableText message =
 | 
			
		||||
                    new TranslatableText("items.structure.spawner.invalid.location");
 | 
			
		||||
            Text message =
 | 
			
		||||
                    Text.translatable("items.structure.spawner.invalid.location");
 | 
			
		||||
            sendPlayer(player, message);
 | 
			
		||||
            return ActionResult.FAIL;
 | 
			
		||||
        }
 | 
			
		||||
@ -215,52 +220,50 @@ public class MyItem extends Item {
 | 
			
		||||
        if (player == null)
 | 
			
		||||
            return;
 | 
			
		||||
        ServerPlayNetworkHandler connection = player.networkHandler;
 | 
			
		||||
        TitleS2CPacket packet = new TitleS2CPacket(TitleS2CPacket.Action.SUBTITLE, message);
 | 
			
		||||
        connection.sendPacket(packet);
 | 
			
		||||
        packet = new TitleS2CPacket(TitleS2CPacket.Action.TITLE, new LiteralText(""));
 | 
			
		||||
        SubtitleS2CPacket packet = new SubtitleS2CPacket(message);
 | 
			
		||||
        connection.sendPacket(packet);
 | 
			
		||||
        TitleS2CPacket titleS2CPacket = new TitleS2CPacket(Text.literal(""));
 | 
			
		||||
        connection.sendPacket(titleS2CPacket);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void sendPlayerChat(ServerPlayerEntity player, Text message) {
 | 
			
		||||
        if (player != null)
 | 
			
		||||
            player.sendMessage(message, false);
 | 
			
		||||
        LOGGER.info(message.asString());
 | 
			
		||||
        LOGGER.info(message.getContent());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private BlockPos getDirectionalOffset(Direction direction, BlockPos size) {
 | 
			
		||||
    private BlockPos getDirectionalOffset(Direction direction, Vec3i size) {
 | 
			
		||||
        BlockPos loc = new BlockPos(0, 0, 0);
 | 
			
		||||
        switch (direction) {
 | 
			
		||||
            case WEST:
 | 
			
		||||
            case WEST -> {
 | 
			
		||||
                loc = loc.offset(Direction.NORTH, size.getZ() / 2);
 | 
			
		||||
                loc = loc.offset(Direction.WEST, size.getX() - 1);
 | 
			
		||||
                break;
 | 
			
		||||
            case EAST: //positive x
 | 
			
		||||
                loc = loc.offset(Direction.NORTH, size.getZ() / 2);
 | 
			
		||||
                break;
 | 
			
		||||
            case NORTH:
 | 
			
		||||
            }
 | 
			
		||||
            case EAST -> //positive x
 | 
			
		||||
                    loc = loc.offset(Direction.NORTH, size.getZ() / 2);
 | 
			
		||||
            case NORTH -> {
 | 
			
		||||
                loc = loc.offset(Direction.NORTH, size.getZ() - 1);
 | 
			
		||||
                loc = loc.offset(Direction.WEST, size.getX() / 2);
 | 
			
		||||
                break;
 | 
			
		||||
            case SOUTH: //positive z
 | 
			
		||||
                loc = loc.offset(Direction.WEST, size.getX() / 2);
 | 
			
		||||
                break;
 | 
			
		||||
            case UP:    //positive y
 | 
			
		||||
            }
 | 
			
		||||
            case SOUTH -> //positive z
 | 
			
		||||
                    loc = loc.offset(Direction.WEST, size.getX() / 2);
 | 
			
		||||
            case UP -> {    //positive y
 | 
			
		||||
                loc = loc.offset(Direction.NORTH, size.getZ() / 2);
 | 
			
		||||
                loc = loc.offset(Direction.WEST, size.getX() / 2);
 | 
			
		||||
                loc = loc.offset(Direction.UP);
 | 
			
		||||
                break;
 | 
			
		||||
            case DOWN:
 | 
			
		||||
            }
 | 
			
		||||
            case DOWN -> {
 | 
			
		||||
                loc = loc.offset(Direction.NORTH, size.getZ() / 2);
 | 
			
		||||
                loc = loc.offset(Direction.WEST, size.getX() / 2);
 | 
			
		||||
                loc = loc.offset(Direction.DOWN, size.getY());
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return loc;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private Block getBlock(String loc) {
 | 
			
		||||
        Identifier location = Identifier.tryParse(loc);
 | 
			
		||||
        DefaultedRegistry<Block> blocks = Registry.BLOCK;
 | 
			
		||||
        DefaultedRegistry<Block> blocks = Registries.BLOCK;
 | 
			
		||||
        if (location == null) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -4,10 +4,11 @@ import com.google.common.collect.Lists;
 | 
			
		||||
import net.minecraft.block.Block;
 | 
			
		||||
import net.minecraft.entity.Entity;
 | 
			
		||||
import net.minecraft.entity.player.PlayerEntity;
 | 
			
		||||
import net.minecraft.structure.Structure;
 | 
			
		||||
import net.minecraft.structure.StructurePlacementData;
 | 
			
		||||
import net.minecraft.structure.StructureTemplate;
 | 
			
		||||
import net.minecraft.util.math.BlockPos;
 | 
			
		||||
import net.minecraft.util.math.Box;
 | 
			
		||||
import net.minecraft.util.math.Vec3i;
 | 
			
		||||
import net.minecraft.world.World;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
@ -16,7 +17,7 @@ import java.util.List;
 | 
			
		||||
public class MyPlacementSettings extends StructurePlacementData {
 | 
			
		||||
    private List<Block> blacklist;
 | 
			
		||||
    private World world;
 | 
			
		||||
    private BlockPos size;
 | 
			
		||||
    private Vec3i size;
 | 
			
		||||
    private boolean replaceEntities = true;
 | 
			
		||||
 | 
			
		||||
    public void forbidOverwrite(List<Block> blocks) {
 | 
			
		||||
@ -32,30 +33,30 @@ public class MyPlacementSettings extends StructurePlacementData {
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public MyPlacementSettings setSize(BlockPos p) {
 | 
			
		||||
    public MyPlacementSettings setSize(Vec3i p) {
 | 
			
		||||
        size = p;
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Structure.PalettedBlockInfoList getRandomBlockInfos(List<Structure.PalettedBlockInfoList> blocks, BlockPos pos) {
 | 
			
		||||
    public StructureTemplate.PalettedBlockInfoList getRandomBlockInfos(List<StructureTemplate.PalettedBlockInfoList> blocks, BlockPos pos) {
 | 
			
		||||
        if (world == null || pos == null || size == null) {
 | 
			
		||||
            return super.getRandomBlockInfos(blocks, pos);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        List<Structure.PalettedBlockInfoList> eligibleStructures;
 | 
			
		||||
        List<StructureTemplate.PalettedBlockInfoList> eligibleStructures;
 | 
			
		||||
        eligibleStructures = getEligibleStructures(blocks, pos);
 | 
			
		||||
        if (eligibleStructures.size() == 0)
 | 
			
		||||
            return null;
 | 
			
		||||
        Structure.PalettedBlockInfoList randomBlockInfos = super.getRandomBlockInfos(eligibleStructures, pos);
 | 
			
		||||
        List<Structure.StructureBlockInfo> locs = randomBlockInfos.getAll();
 | 
			
		||||
        StructureTemplate.PalettedBlockInfoList randomBlockInfos = super.getRandomBlockInfos(eligibleStructures, pos);
 | 
			
		||||
        List<StructureTemplate.StructureBlockInfo> locs = randomBlockInfos.getAll();
 | 
			
		||||
        if (!locs.isEmpty()) {
 | 
			
		||||
            List<Entity> entitiesWithinAABB = world.getNonSpectatingEntities(Entity.class, new Box(pos,pos.add(size)));
 | 
			
		||||
            for (Structure.StructureBlockInfo blockInfo : locs) {
 | 
			
		||||
                BlockPos posToClean = blockInfo.pos.add(pos);
 | 
			
		||||
            for (StructureTemplate.StructureBlockInfo blockInfo : locs) {
 | 
			
		||||
                BlockPos posToClean = blockInfo.pos().add(pos);
 | 
			
		||||
                for (Entity e : entitiesWithinAABB) {
 | 
			
		||||
                    if (!(e instanceof PlayerEntity) && e.getBoundingBox().intersects(new Box(posToClean))) {
 | 
			
		||||
                        e.remove();
 | 
			
		||||
                        e.remove(Entity.RemovalReason.DISCARDED);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
@ -63,12 +64,12 @@ public class MyPlacementSettings extends StructurePlacementData {
 | 
			
		||||
        return randomBlockInfos;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private List<Structure.PalettedBlockInfoList> getEligibleStructures(List<Structure.PalettedBlockInfoList> blocks, BlockPos pos) {
 | 
			
		||||
        List<Structure.PalettedBlockInfoList> eligibleStructures = new ArrayList<>();
 | 
			
		||||
    private List<StructureTemplate.PalettedBlockInfoList> getEligibleStructures(List<StructureTemplate.PalettedBlockInfoList> blocks, BlockPos pos) {
 | 
			
		||||
        List<StructureTemplate.PalettedBlockInfoList> eligibleStructures = new ArrayList<>();
 | 
			
		||||
        if (blacklist == null && shouldReplaceEntities()) {
 | 
			
		||||
            eligibleStructures = blocks;
 | 
			
		||||
        } else {
 | 
			
		||||
            for (Structure.PalettedBlockInfoList struct : blocks) {
 | 
			
		||||
            for (StructureTemplate.PalettedBlockInfoList struct : blocks) {
 | 
			
		||||
                if (isValid(struct, pos)) {
 | 
			
		||||
                    eligibleStructures.add(struct);
 | 
			
		||||
                }
 | 
			
		||||
@ -77,10 +78,15 @@ public class MyPlacementSettings extends StructurePlacementData {
 | 
			
		||||
        return eligibleStructures;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private boolean isValid(Structure.PalettedBlockInfoList struct, BlockPos pos) {
 | 
			
		||||
        List<Entity> entitiesWithinAABB = world.getNonSpectatingEntities(shouldReplaceEntities()?PlayerEntity.class:Entity.class, new Box(pos,pos.add(size)));
 | 
			
		||||
        for (Structure.StructureBlockInfo bi : struct.getAll()) {
 | 
			
		||||
            BlockPos posToCheck = bi.pos.add(pos);
 | 
			
		||||
    private boolean isValid(StructureTemplate.PalettedBlockInfoList struct, BlockPos pos) {
 | 
			
		||||
        List<? extends Entity> entitiesWithinAABB;
 | 
			
		||||
        if (shouldReplaceEntities()) {
 | 
			
		||||
            entitiesWithinAABB = world.getNonSpectatingEntities(PlayerEntity.class, new Box(pos, pos.add(size)));
 | 
			
		||||
        } else {
 | 
			
		||||
            entitiesWithinAABB = world.getNonSpectatingEntities(Entity.class, new Box(pos, pos.add(size)));
 | 
			
		||||
        }
 | 
			
		||||
        for (StructureTemplate.StructureBlockInfo bi : struct.getAll()) {
 | 
			
		||||
            BlockPos posToCheck = bi.pos().add(pos);
 | 
			
		||||
            if (World.isValid(posToCheck)) {
 | 
			
		||||
                for (Entity e : entitiesWithinAABB) {
 | 
			
		||||
                    if (e.getBoundingBox().intersects(new Box(posToCheck))) {
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,8 @@ package quimufu.structure_item;
 | 
			
		||||
 | 
			
		||||
import net.fabricmc.api.ModInitializer;
 | 
			
		||||
import net.minecraft.item.Item;
 | 
			
		||||
import net.minecraft.util.registry.Registry;
 | 
			
		||||
import net.minecraft.registry.Registries;
 | 
			
		||||
import net.minecraft.registry.Registry;
 | 
			
		||||
import org.apache.logging.log4j.Level;
 | 
			
		||||
import org.apache.logging.log4j.LogManager;
 | 
			
		||||
import org.apache.logging.log4j.Logger;
 | 
			
		||||
@ -19,7 +20,7 @@ public class StructureItemMod implements ModInitializer {
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onInitialize() {
 | 
			
		||||
        log(Level.INFO, "Initializing");
 | 
			
		||||
        Registry.register(Registry.ITEM, MOD_ID + ":item", item);
 | 
			
		||||
        Registry.register(Registries.ITEM, MOD_ID + ":item", item);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void log(Level level, String message) {
 | 
			
		||||
 | 
			
		||||
@ -21,7 +21,7 @@
 | 
			
		||||
  },
 | 
			
		||||
  "mixins": [],
 | 
			
		||||
  "depends": {
 | 
			
		||||
    "fabricloader": ">=0.4.0",
 | 
			
		||||
    "fabricloader": ">=0.14",
 | 
			
		||||
    "fabric": "*"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user