Initial Commit

This commit is contained in:
barry 2026-03-26 13:17:41 +01:00
commit 6cc81ce6d8
3654 changed files with 1404676 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
logs/*
crash-reports/*
secrets.py

22
DiscordBot.service Normal file
View File

@ -0,0 +1,22 @@
[Unit]
Description=Discord Bot
After=network.target
[Service]
Type=simple
User=minecraft
WorkingDirectory=/home/minecraft/GPack
ExecStart=/home/minecraft/.local/bin/uv run discord_bot.py
Restart=always
RestartSec=5
# Optional but recommended
Environment=PYTHONUNBUFFERED=1
# Allow binding to privileged ports like :80 while still running as `minecraft`.
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target

1
banned-ips.json Normal file
View File

@ -0,0 +1 @@
[]

1
banned-players.json Normal file
View File

@ -0,0 +1 @@
[]

View File

@ -0,0 +1,24 @@
[client]
#If true, shows the hunger (and saturation if showSaturationHudOverlay is true) that would be restored by food you are currently holding
showFoodValuesHudOverlay = true
#If true, shows your food exhaustion as a progress bar behind the hunger bars
showFoodExhaustionHudUnderlay = true
#Alpha value of the flashing icons at their most visible point (1.0 = fully opaque, 0.0 = fully transparent)
#Range: 0.0 ~ 1.0
maxHudOverlayFlashAlpha = 0.65
#If true, health/hunger overlay will shake to match Minecraft's icon animations
showVanillaAnimationsOverlay = true
#If true, adds a line that shows your hunger, saturation, and exhaustion level in the F3 debug overlay
showFoodStatsInDebugOverlay = true
#If true, shows the hunger and saturation values of food in its tooltip while holding SHIFT
showFoodValuesInTooltip = true
#If true, shows the hunger and saturation values of food in its tooltip automatically (without needing to hold SHIFT)
showFoodValuesInTooltipAlways = true
#If true, shows estimated health restored by food on the health bar
showFoodHealthHudOverlay = true
#If true, shows your current saturation level overlayed on the hunger bar
showSaturationHudOverlay = true
#If true, enables the hunger/saturation/health overlays for food in your off-hand
showFoodValuesHudOverlayWhenOffhand = true

224
config/attributefix.json Normal file
View File

@ -0,0 +1,224 @@
{
"attributes": {
"tacz:tacz.bullet_resistance": {
"enabled": false,
"min": {
"default": 0,
"value": 0
},
"max": {
"default": 1,
"value": 1
}
},
"forge:step_height_addition": {
"enabled": false,
"min": {
"default": -512,
"value": -512
},
"max": {
"default": 512,
"value": 512
}
},
"minecraft:generic.follow_range": {
"enabled": true,
"min": {
"default": 0,
"value": 0
},
"max": {
"default": 2048,
"value": 2048
}
},
"minecraft:generic.flying_speed": {
"enabled": true,
"min": {
"default": 0,
"value": 0
},
"max": {
"default": 1024,
"value": 1024
}
},
"forge:nametag_distance": {
"enabled": false,
"min": {
"default": 0,
"value": 0
},
"max": {
"default": 64,
"value": 64
}
},
"minecraft:generic.movement_speed": {
"enabled": true,
"min": {
"default": 0,
"value": 0
},
"max": {
"default": 1024,
"value": 1024
}
},
"forge:entity_gravity": {
"enabled": false,
"min": {
"default": -8,
"value": -8
},
"max": {
"default": 8,
"value": 8
}
},
"forge:block_reach": {
"enabled": false,
"min": {
"default": 0,
"value": 0
},
"max": {
"default": 1024,
"value": 1024
}
},
"minecraft:generic.max_health": {
"enabled": true,
"min": {
"default": 1,
"value": 1
},
"max": {
"default": 1024,
"value": 1000000
}
},
"minecraft:generic.attack_speed": {
"enabled": true,
"min": {
"default": 0,
"value": 0
},
"max": {
"default": 1024,
"value": 1024
}
},
"minecraft:generic.attack_damage": {
"enabled": true,
"min": {
"default": 0,
"value": 0
},
"max": {
"default": 2048,
"value": 1000000
}
},
"minecraft:generic.luck": {
"enabled": true,
"min": {
"default": -1024,
"value": -1024
},
"max": {
"default": 1024,
"value": 1024
}
},
"minecraft:zombie.spawn_reinforcements": {
"enabled": true,
"min": {
"default": 0,
"value": 0
},
"max": {
"default": 1,
"value": 1
}
},
"minecraft:horse.jump_strength": {
"enabled": true,
"min": {
"default": 0,
"value": 0
},
"max": {
"default": 2,
"value": 2
}
},
"minecraft:generic.attack_knockback": {
"enabled": true,
"min": {
"default": 0,
"value": 0
},
"max": {
"default": 5,
"value": 1000000
}
},
"minecraft:generic.armor": {
"enabled": true,
"min": {
"default": 0,
"value": 0
},
"max": {
"default": 30,
"value": 1000000
}
},
"forge:swim_speed": {
"enabled": false,
"min": {
"default": 0,
"value": 0
},
"max": {
"default": 1024,
"value": 1024
}
},
"minecraft:generic.knockback_resistance": {
"enabled": true,
"min": {
"default": 0,
"value": 0
},
"max": {
"default": 1,
"value": 1
}
},
"minecraft:generic.armor_toughness": {
"enabled": true,
"min": {
"default": 0,
"value": 0
},
"max": {
"default": 20,
"value": 1000000
}
},
"forge:entity_reach": {
"enabled": false,
"min": {
"default": 0,
"value": 0
},
"max": {
"default": 1024,
"value": 1024
}
}
}
}

View File

@ -0,0 +1,5 @@
#List of slots to create or modify.
#See documentation for syntax: https://docs.illusivesoulworks.com/curios/configuration#slot-configuration
#
slots = []

View File

@ -0,0 +1,6 @@
# This is the configuration file for Embeddium.
#
# You can find information on editing this file and all the available options here:
# https://github.com/jellysquid3/sodium-fabric/wiki/Configuration-File
#
# By default, this file will be empty except for this notice.

View File

@ -0,0 +1,30 @@
{
"quality": {
"weather_quality": "DEFAULT",
"leaves_quality": "DEFAULT",
"enable_vignette": true,
"use_quad_normals_for_shading": false
},
"advanced": {
"enable_memory_tracing": false,
"use_advanced_staging_buffers": true,
"disable_incompatible_mod_warnings": false,
"cpu_render_ahead_limit": 3
},
"performance": {
"chunk_builder_threads": 0,
"always_defer_chunk_updates_v2": true,
"animate_only_visible_textures": true,
"use_entity_culling": true,
"use_fog_occlusion": true,
"use_block_face_culling": true,
"use_compact_vertex_format": true,
"use_translucent_face_sorting_v2": true,
"use_no_error_g_l_context": true
},
"notifications": {
"force_disable_donation_prompts": false,
"has_cleared_donation_button": false,
"has_seen_donation_prompt": false
}
}

View File

@ -0,0 +1,23 @@
#Use a slightly more compact, but also slightly slower representation for block states
compactFastMap = false
#Replace objects used to detect multi-threaded access to chunks by a much smaller field. This option is disabled by default due to very rare and very hard-to-reproduce crashes, use at your own risk!
useSmallThreadingDetector = false
#Cache the predicate instances used in multipart models
cacheMultipartPredicates = true
#Do not create a new MultipartBakedModel instance for each block state using the same multipartmodel. Requires cacheMultipartPredicates to be enabled
multipartDeduplication = true
#Deduplicate cached data for blockstates, most importantly collision and render shapes
blockstateCacheDeduplication = true
#Avoid creation of new strings when creating ModelResourceLocations
modelResourceLocations = true
#Use smaller data structures for "simple" models, especially models with few side-specific faces
modelSides = true
#Replace the blockstate neighbor table
replaceNeighborLookup = true
#Populate the neighbor table used by vanilla. Enabling this slightly increases memory usage, but can help with issues in the rare case where mods access it directly.
populateNeighborTable = false
#Do not store the properties of a state explicitly and read themfrom the replace neighbor table instead. Requires replaceNeighborLookup to be enabled
replacePropertyMap = true
#Deduplicate vertex data of baked quads in the basic model implementations
bakedQuadDeduplication = true

View File

@ -0,0 +1,7 @@
#Generic configuration settings
[misc]
#Enabled additional debug logs - May slow down the game and will increase log file size
#Only enable for special purposes
debug = false

29
config/fml.toml Normal file
View File

@ -0,0 +1,29 @@
#Early window height
earlyWindowHeight = 480
#Enable forge global version checking
versionCheck = true
#Should we control the window. Disabling this disables new GL features and can be bad for mods that rely on them.
earlyWindowControl = true
#Early window framebuffer scale
earlyWindowFBScale = 1
#Early window provider
earlyWindowProvider = "fmlearlywindow"
#Early window width
earlyWindowWidth = 854
#Early window starts maximized
earlyWindowMaximized = false
#Default config path for servers
defaultConfigPath = "defaultconfigs"
#Disables Optimized DFU client-side - already disabled on servers
disableOptimizedDFU = true
#Skip specific GL versions, may help with buggy graphics card drivers
earlyWindowSkipGLVersions = []
#Whether to log a help message on first attempt, to aid troubleshooting. This setting should automatically disable itself after a successful launch
earlyWindowLogHelpMessage = true
#Max threads for early initialization parallelism, -1 is based on processor count
maxThreads = -1
#Squir?
earlyWindowSquir = false
#Whether to show CPU usage stats in early window
earlyWindowShowCPU = false

View File

@ -0,0 +1,21 @@
{
"REGULAR_INFO": "----- Regular config values below -----",
"font_atlas_resizing": true,
"map_atlas_generation": true,
"hud_batching": true,
"fast_text_lookup": true,
"fast_buffer_upload": true,
"COSMETIC_INFO": "----- Cosmetic only config values below (Does not optimize anything) -----",
"dont_add_info_into_debug_hud": false,
"EXPERIMENTAL_INFO": "----- Experimental config values below (Rendering glitches may occur) -----",
"experimental_disable_error_checking": false,
"experimental_disable_resource_pack_conflict_handling": false,
"experimental_sign_text_buffering": false,
"experimental_screen_batching": false,
"DEBUG_INFO": "----- Debug only config values below (Do not touch) -----",
"debug_only_and_not_recommended_disable_universal_batching": false,
"debug_only_and_not_recommended_disable_mod_conflict_handling": false,
"debug_only_and_not_recommended_disable_hardware_conflict_handling": false,
"debug_only_print_additional_error_information": false,
"debug_only_use_last_usage_for_batch_ordering": false
}

View File

@ -0,0 +1,22 @@
{
"block_type": "barrel",
"shape": {
"type": "cube",
"min": [0, 0, 0],
"max": [1, 1, 1]
},
"length": 9,
"rows": 4,
"inventoryOffset": 8,
"menuOffset": 8,
"width": 176,
"height": 187,
"properties": {
"type": "builder",
"material": "metal",
"requiresCorrectToolForDrops": true,
"explosionResistance": 6.0,
"destroyTime": 3.0,
"sound": "copper"
}
}

View File

@ -0,0 +1,24 @@
{
"block_type": "barrel",
"shape": {
"type": "cube",
"min": [0, 0, 0],
"max": [1, 1, 1]
},
"length": 12,
"rows": 6,
"inventoryOffset": 35,
"menuOffset": 8,
"width": 232,
"height": 222,
"transparent": true,
"renderItems": true,
"properties": {
"type": "builder",
"material": "glass",
"explosionResistance": 0.3,
"destroyTime": 0.3,
"sound": "glass",
"noOcclusion": true
}
}

View File

@ -0,0 +1,22 @@
{
"block_type": "barrel",
"shape": {
"type": "cube",
"min": [0, 0, 0],
"max": [1, 1, 1]
},
"length": 12,
"rows": 6,
"inventoryOffset": 35,
"menuOffset": 8,
"width": 232,
"height": 222,
"properties": {
"type": "builder",
"material": "metal",
"requiresCorrectToolForDrops": true,
"explosionResistance": 6.0,
"destroyTime": 5.0,
"sound": "metal"
}
}

View File

@ -0,0 +1,22 @@
{
"block_type": "barrel",
"shape": {
"type": "cube",
"min": [0, 0, 0],
"max": [1, 1, 1]
},
"length": 11,
"rows": 6,
"inventoryOffset": 26,
"menuOffset": 8,
"width": 212,
"height": 222,
"properties": {
"type": "builder",
"material": "metal",
"requiresCorrectToolForDrops": true,
"explosionResistance": 6.0,
"destroyTime": 3.0,
"sound": "metal"
}
}

View File

@ -0,0 +1,22 @@
{
"block_type": "barrel",
"shape": {
"type": "cube",
"min": [0, 0, 0],
"max": [1, 1, 1]
},
"length": 9,
"rows": 6,
"inventoryOffset": 8,
"menuOffset": 8,
"width": 176,
"height": 222,
"properties": {
"type": "builder",
"material": "metal",
"requiresCorrectToolForDrops": true,
"explosionResistance": 6.0,
"destroyTime": 5.0,
"sound": "metal"
}
}

View File

@ -0,0 +1,23 @@
{
"block_type": "barrel",
"shape": {
"type": "cube",
"min": [0, 0, 0],
"max": [1, 1, 1]
},
"length": 13,
"rows": 7,
"inventoryOffset": 44,
"menuOffset": 8,
"width": 250,
"height": 240,
"properties": {
"type": "builder",
"material": "metal",
"requiresCorrectToolForDrops": true,
"explosionResistance": 1200.0,
"destroyTime": 50.0,
"sound": "netherite_block"
},
"fireResistant": true
}

View File

@ -0,0 +1,22 @@
{
"block_type": "barrel",
"shape": {
"type": "cube",
"min": [0, 0, 0],
"max": [1, 1, 1]
},
"length": 12,
"rows": 6,
"inventoryOffset": 35,
"menuOffset": 8,
"width": 232,
"height": 222,
"properties": {
"type": "builder",
"material": "metal",
"requiresCorrectToolForDrops": true,
"explosionResistance": 1200.0,
"destroyTime": 50.0,
"sound": "metal"
}
}

View File

@ -0,0 +1,16 @@
{
"length": 9,
"rows": 4,
"inventoryOffset": 8,
"menuOffset": 8,
"width": 176,
"height": 187,
"properties": {
"type": "builder",
"material": "metal",
"requiresCorrectToolForDrops": true,
"explosionResistance": 6.0,
"destroyTime": 3.0,
"sound": "copper"
}
}

View File

@ -0,0 +1,18 @@
{
"length": 12,
"rows": 6,
"inventoryOffset": 35,
"menuOffset": 8,
"width": 232,
"height": 222,
"transparent": true,
"renderItems": true,
"properties": {
"type": "builder",
"material": "glass",
"explosionResistance": 0.3,
"destroyTime": 0.3,
"sound": "glass",
"noOcclusion": true
}
}

View File

@ -0,0 +1,16 @@
{
"length": 12,
"rows": 6,
"inventoryOffset": 35,
"menuOffset": 8,
"width": 232,
"height": 222,
"properties": {
"type": "builder",
"material": "metal",
"requiresCorrectToolForDrops": true,
"explosionResistance": 6.0,
"destroyTime": 5.0,
"sound": "metal"
}
}

View File

@ -0,0 +1,20 @@
{
"length": 1,
"rows": 1,
"inventoryOffset": 8,
"menuOffset": 80,
"width": 176,
"height": 133,
"properties": {
"type": "builder",
"material": "dirt",
"explosionResistance": 0.5,
"destroyTime": 0.5,
"sound": "gravel"
},
"predicate": {
"items": [
"minecraft:dirt"
]
}
}

View File

@ -0,0 +1,16 @@
{
"length": 11,
"rows": 6,
"inventoryOffset": 26,
"menuOffset": 8,
"width": 212,
"height": 222,
"properties": {
"type": "builder",
"material": "metal",
"requiresCorrectToolForDrops": true,
"explosionResistance": 6.0,
"destroyTime": 3.0,
"sound": "metal"
}
}

View File

@ -0,0 +1,16 @@
{
"length": 9,
"rows": 6,
"inventoryOffset": 8,
"menuOffset": 8,
"width": 176,
"height": 222,
"properties": {
"type": "builder",
"material": "metal",
"requiresCorrectToolForDrops": true,
"explosionResistance": 6.0,
"destroyTime": 5.0,
"sound": "metal"
}
}

View File

@ -0,0 +1,17 @@
{
"length": 13,
"rows": 7,
"inventoryOffset": 44,
"menuOffset": 8,
"width": 250,
"height": 240,
"properties": {
"type": "builder",
"material": "metal",
"requiresCorrectToolForDrops": true,
"explosionResistance": 1200.0,
"destroyTime": 50.0,
"sound": "netherite_block"
},
"fireResistant": true
}

View File

@ -0,0 +1,16 @@
{
"length": 12,
"rows": 6,
"inventoryOffset": 35,
"menuOffset": 8,
"width": 232,
"height": 222,
"properties": {
"type": "builder",
"material": "metal",
"requiresCorrectToolForDrops": true,
"explosionResistance": 1200.0,
"destroyTime": 50.0,
"sound": "metal"
}
}

View File

@ -0,0 +1,6 @@
#Iron Chests Default Files
#Setting a value will recopy the default files.
#Wed Mar 25 22:46:11 CET 2026
barrels=true
chests=true
chest_upgrades=true

View File

@ -0,0 +1,3 @@
{
"to": "copper_chest"
}

View File

@ -0,0 +1,4 @@
{
"to": "crystal_chest",
"from": "diamond_chest"
}

View File

@ -0,0 +1,4 @@
{
"to": "diamond_chest",
"from": "gold_chest"
}

View File

@ -0,0 +1,4 @@
{
"to": "gold_chest",
"from": "iron_chest"
}

View File

@ -0,0 +1,4 @@
{
"to": "iron_chest",
"from": "copper_chest"
}

View File

@ -0,0 +1,4 @@
{
"to": "netherite_chest",
"from": "diamond_chest"
}

View File

@ -0,0 +1,4 @@
{
"to": "obsidian_chest",
"from": "diamond_chest"
}

View File

@ -0,0 +1,7 @@
[general]
#Enable armor set effect
enableArmorSetEffect = true
#Enable armor attribute
enableArmorAttribute = true

View File

@ -0,0 +1,12 @@
[grenade]
#Whether grenade explosion can damage blocks (if it can)
grenadeExplosionBlockDamage = true
[melee]
#Whether melee items consume durability on attack
meleeItemConsumeDurability = true
#when target's invulnerable tick is less than this value, melee attack will ignore it
#Range: 0 ~ 100
meleeIgnoreInvulnerableTickThreshold = 20

View File

@ -0,0 +1,3 @@
#These JEI plugins will be loaded on the main thread
blacklist_async_jei_plugins = ["jepb:jei_plugin"]

View File

@ -0,0 +1,111 @@
# This is the configuration file for ModernFix.
# In general, prefer using the config screen to editing this file. It can be accessed
# via the standard mod menu on your respective mod loader. Changes will, however,
# require restarting the game to take effect.
#
# The following options can be enabled or disabled if there is a compatibility issue.
# Add a line with your option name and =true or =false at the bottom of the file to enable
# or disable a rule. For example:
# mixin.perf.dynamic_resources=true
# Do not include the #. You may reset to defaults by deleting this file.
#
# Available options:
# mixin.bugfix.buffer_builder_leak=true # (default)
# mixin.bugfix.chunk_deadlock=true # (default)
# mixin.bugfix.cofh_core_crash=true # (default)
# mixin.bugfix.concurrency=true # (default)
# mixin.bugfix.ctm_resourceutil_cme=true # (default)
# mixin.bugfix.ender_dragon_leak=true # (default)
# mixin.bugfix.entity_pose_stack=true # (default)
# mixin.bugfix.extra_experimental_screen=true # (default)
# mixin.bugfix.fix_config_crashes=true # (default)
# mixin.bugfix.forge_at_inject_error=true # (default)
# mixin.bugfix.forge_vehicle_packets=true # (default)
# mixin.bugfix.missing_block_entities=false # (default)
# mixin.bugfix.model_data_manager_cme=true # (default)
# mixin.bugfix.packet_leak=false # (default)
# mixin.bugfix.paper_chunk_patches=true # (default)
# mixin.bugfix.recipe_book_type_desync=true # (default)
# mixin.bugfix.registry_ops_cme=true # (default)
# mixin.bugfix.removed_dimensions=true # (default)
# mixin.bugfix.restore_old_dragon_movement=false # (default)
# mixin.bugfix.unsafe_modded_shape_caches=true # (default)
# mixin.bugfix.world_leaks=true # (default)
# mixin.bugfix.world_screen_skipped=true # (default)
# mixin.devenv=false # (default)
# mixin.feature.blockentity_incorrect_thread=false # (default)
# mixin.feature.branding=true # (default)
# mixin.feature.cause_lag_by_disabling_threads=false # (default)
# mixin.feature.direct_stack_trace=false # (default)
# mixin.feature.disable_unihex_font=false # (default)
# mixin.feature.integrated_server_watchdog=true # (default)
# mixin.feature.log_stdout_in_log_files=true # (default)
# mixin.feature.mcfunction_profiling=true # (default)
# mixin.feature.measure_time=true # (default)
# mixin.feature.registry_event_progress=false # (default)
# mixin.feature.remove_chat_signing=false # (default)
# mixin.feature.remove_telemetry=true # (default)
# mixin.feature.snapshot_easter_egg=true # (default)
# mixin.feature.spam_thread_dump=false # (default)
# mixin.feature.spark_profile_launch=false # (default)
# mixin.feature.spark_profile_world_join=false # (default)
# mixin.feature.stalled_chunk_load_detection=false # (default)
# mixin.feature.suppress_narrator_stacktrace=true # (default)
# mixin.feature.warn_missing_perf_mods=true # (default)
# mixin.launch.class_search_cache=true # (default)
# mixin.perf.blast_search_trees=true # (default)
# mixin.perf.blast_search_trees.force=false # (default)
# mixin.perf.cache_blockstate_cache_arrays=true # (default)
# mixin.perf.cache_profile_texture_url=true # (default)
# mixin.perf.cache_strongholds=true # (default)
# mixin.perf.cache_upgraded_structures=true # (default)
# mixin.perf.chunk_meshing=true # (default)
# mixin.perf.clear_mixin_classinfo=false # (default)
# mixin.perf.compact_bit_storage=true # (default)
# mixin.perf.compact_mojang_registries=true # (default)
# mixin.perf.compress_unihex_font=true # (default)
# mixin.perf.datapack_reload_exceptions=true # (default)
# mixin.perf.dedicated_reload_executor=true # (default)
# mixin.perf.deduplicate_climate_parameters=false # (default)
# mixin.perf.deduplicate_location=false # (default)
# mixin.perf.deduplicate_wall_shapes=true # (default)
# mixin.perf.dynamic_dfu=true # (default)
# mixin.perf.dynamic_entity_renderers=false # (default)
# mixin.perf.dynamic_resources=false # (default)
# mixin.perf.dynamic_resources.ctm=true # (default)
# mixin.perf.dynamic_resources.ldlib=true # (default)
# mixin.perf.dynamic_resources.supermartijncore=true # (default)
# mixin.perf.dynamic_structure_manager=true # (default)
# mixin.perf.fast_forge_dummies=true # (default)
# mixin.perf.fast_registry_validation=true # (default)
# mixin.perf.faster_capabilities=true # (default)
# mixin.perf.faster_ingredients=true # (default)
# mixin.perf.faster_item_rendering=false # (default)
# mixin.perf.faster_structure_location=true # (default)
# mixin.perf.faster_texture_stitching=true # (default)
# mixin.perf.fix_loop_spin_waiting=true # (default)
# mixin.perf.forge_cap_retrieval=true # (default)
# mixin.perf.forge_registry_alloc=true # (default)
# mixin.perf.forge_registry_lambda=true # (default)
# mixin.perf.ingredient_item_deduplication=false # (default)
# mixin.perf.kubejs=true # (default)
# mixin.perf.lazy_search_tree_registry=true # (default)
# mixin.perf.memoize_creative_tab_build=true # (default)
# mixin.perf.model_optimizations=true # (default)
# mixin.perf.mojang_registry_size=true # (default)
# mixin.perf.patchouli_deduplicate_books=true # (default)
# mixin.perf.potential_spawns_alloc=true # (default)
# mixin.perf.reduce_blockstate_cache_rebuilds=true # (default)
# mixin.perf.remove_biome_temperature_cache=true # (default)
# mixin.perf.remove_spawn_chunks=false # (default)
# mixin.perf.resourcefullib_highlight_deduplication=true # (default)
# mixin.perf.resourcepacks=true # (default)
# mixin.perf.smart_ingredient_sync=true # (default)
# mixin.perf.state_definition_construct=true # (default)
# mixin.perf.tag_id_caching=true # (default)
# mixin.perf.thread_priorities=true # (default)
# mixin.perf.ticking_chunk_alloc=true # (default)
# mixin.perf.worldgen_allocation=true # (default)
# mixin.safety=true # (default)
#
# User overrides go here.

8
config/simplytraps.toml Normal file
View File

@ -0,0 +1,8 @@
StakeWallDamageMultiplier = 1.0
StakeDamageMultiplier = 1.0
SpikeDamageMultiplier = 1.0
BarbedWireDamageMultiplier = 1.0
BarbedIvyWireDamageMultiplier = 1.0
##This variable represents time in ticks. 20 ticks = 1 second
GrassTrapTime = 5.0

55
config/tacz-common.toml Normal file
View File

@ -0,0 +1,55 @@
[gun]
#The default fire sound range (block)
#Range: > 0
DefaultGunFireSoundDistance = 64
#The silencer default fire sound range (block)
#Range: > 0
DefaultGunSilenceSoundDistance = 16
#The range (block) of other gun sound, reloading sound etc.
#Range: > 0
DefaultGunOtherSoundDistance = 16
#Whether or not the player will consume ammo in creative mode
CreativePlayerConsumeAmmo = true
#Auto reload all the guns in player inventory, useful for pvp servers
AutoReloadWhenRespawn = false
[ammo]
#Warning: Ammo with explosive properties can break blocks
ExplosiveAmmoDestroysBlock = true
#Warning: Ammo with explosive properties can set the surroundings on fire
ExplosiveAmmoFire = false
#Ammo with explosive properties can add knockback effect
ExplosiveAmmoKnockBack = true
#The distance at which the explosion effect can be seen
#Range: > 0
ExplosiveAmmoVisibleDistance = 192
#Those blocks that the ammo can pass through
PassThroughBlocks = []
#Whether a ammo can break the glass
DestroyGlass = true
#Whether a ammo can ignite the block
IgniteBlock = true
#Whether a ammo can ignite the entity
IgniteEntity = true
#Global bullet speed modifier, the init speed of the bullet will be multiplied by this value, default is 2.0
#This is to compensate the side effects introduced while fixing the shooter variable input issue
#Range: 0.01 ~ 20.0
GlobalBulletSpeedModifier = 2.0
[other]
#Deprecated: now move to .minecraft/tacz/tacz-pre.toml or <your version>/tacz/tacz-pre.toml
#When enabled, the reload command will not overwrite the default model file under config
DefaultPackDebug = false
#The farthest sound distance of the target, including minecarts type
#Range: > 0
TargetSoundDistance = 128
#DEV: Server hitbox offset (If the hitbox is ahead, fill in a negative number)
#Range: -1.7976931348623157E308 ~ 1.7976931348623157E308
ServerHitboxOffset = 3.0
#Server hitbox latency fix
ServerHitboxLatencyFix = true
#The maximum latency (in milliseconds) for the server hitbox latency fix saved
#Range: 250.0 ~ 1.7976931348623157E308
ServerHitboxLatencyMaxSaveMs = 1000.0

View File

@ -0,0 +1,8 @@
#Common config settings
[common]
#Enables backpacks spawning in loot chests
enableLoot = true
#Enables trade for Villager Backpack in Librarian villager trades
enableVillagerTrade = true

View File

@ -0,0 +1,72 @@
{
"dynamicScaling": {
"dynamicScalingEnabled": false,
"healthScalePerPlayer": 0.05,
"damageScalePerPlayer": 0.05,
"speedScalePerPlayer": 0.0,
"armorScalePerPlayer": 0.0,
"daysBetweenScaleIncreases": 10.0,
"daysHealthScaleIncrease": 0.05,
"daysDamageScaleIncrease": 0.05,
"daysSpeedScaleIncrease": 0.0,
"daysArmorScaleIncrease": 0.0,
"maxHealthScale": 2.0,
"maxDamageScale": 2.0,
"maxSpeedScale": 2.0,
"maxArmorScale": 2.0
},
"difficultyLevels": [
{
"difficultyName": "Level 1",
"minStartDay": 0,
"maxStartDay": 0,
"chanceForDifficultyLevelSwitch": 100,
"difficultySettingsHordeNights": {
"daysBetweenHordeNights": 5,
"chanceForHordeNight": 100,
"spawnAdditionalWaves": true,
"cooldownBetweenWaves": 45,
"chanceForAdditionalWave": 7,
"allDayLongHordeNights": false,
"maxHordesPerHordeNight": 0,
"numberOfPlayersToGetHordePerHordeEvent": 5
},
"difficultySettingsHordeMobs": {
"updateHordeMobAttributes": false,
"updateAttributesOfThirdPartyMobs": false,
"healthAttributeScaleFactor": 1.0,
"damageAttributeScaleFactor": 1.0,
"speedAttributeScaleFactor": 1.0,
"armorAttributeScaleFactor": 1.0,
"hordeMobsTrackingRange": 128.0,
"hordeZombiesBurnInTheSun": false,
"vanillaZombiesBurnInTheSun": true,
"hordeZombiesAreFasterOnWater": false,
"hordeMobsCanClimbEachOther": true,
"blockBreaking": false,
"blockBreakingTier": 1
},
"difficultySettingsHordes": {
"hordeSizeScaleFactor": 1.0,
"enableRandomHordes": false,
"chanceForRandomHorde": 15,
"hordeSelectionMode": "sequential",
"listOfPossibleHordes": [
1
],
"bossHordeEnabled": false,
"bossHordeId": 1
},
"difficultySettingsLureEffect": {
"enableLureHordeEffect": true,
"nonHordeZombiesCanCauseLureHordeEffect": true,
"chanceForLureHordeEffect": 0.07,
"durationForLureHordeEffect": 60,
"lureHordeEffectSpawnsHorde": true,
"chanceForLureEffectToSpawnHorde": 0.2,
"strongLureHordeEffectSpawnsHorde": true
}
}
],
"internalConfigVersion": 1
}

View File

@ -0,0 +1,19 @@
{
"configVariant": 1,
"maxWaveSize": 15,
"defaultMobId": "undeadnights:horde_zombie",
"extraSpawnInfo": "none",
"hordeMobs": [
{
"mobId": "undeadnights:elite_zombie",
"spawnChance": "8",
"extraSpawnInfo": "none"
},
{
"mobId": "undeadnights:demolition_zombie",
"spawnChance": "4",
"extraSpawnInfo": "tnt:5"
}
],
"internalConfigVersion": 1
}

View File

@ -0,0 +1,27 @@
#The rarity of the enchantment.
#Allowed Values: COMMON, UNCOMMON, RARE, VERY_RARE
rarity = "RARE"
#The number of levels of the enchantment.
#Range: 1 ~ 5
levels = 1
#If enabled, the enchantment is considered a treasure enchantment.
isTreasure = false
#If enabled, the enchantment can be offered by villagers for trade.
isVillagerTrade = true
#If enabled, the enchantment can generate in loot.
isLootable = true
#If enabled, the enchantment can be applied at the enchantment table.
canApplyAtEnchantingTable = true
#If enabled, the enchantment can be applied on books.
canApplyOnBooks = true
#The minimum enchantability required for the first enchantment level.
#Range: 1 ~ 100
minEnchantabilityBase = 15
#The additional enchantability required for each enchantment level after the first.
#Range: 1 ~ 100
minEnchantabilityPerLevel = 5
#Enchantments that cannot be applied together with the enchantment.
incompatibleEnchantments = []
#Items that the enchantment can be applied on.
itemsList = ["is:tool", "quark:pickarang", "quark:flamerang"]

View File

@ -0,0 +1,40 @@
#The minimum destroy speed the used tool needs on the block to vein mine.
#Range: 0.0 ~ 100.0
requiredDestroySpeed = 1.0
#If enabled, vein mining will not activate if the used tool cannot harvest drops from the source block.
requireCorrectTool = false
#The maximum number of blocks to vein mine without the enchantment.
#Range: 0 ~ 1000
maxBlocksBase = 0
#The maximum number of blocks to vein mine per level of the enchantment.
#Range: 1 ~ 1000
maxBlocksPerLevel = 50
#If enabled, vein mining can mine diagonally.
diagonalMining = true
#If enabled, vein mining will stop when the tool can no longer be used.
limitedByDurability = true
#If enabled, vein mining will move drops from blocks to the source location.
relocateDrops = true
#If enabled, vein mining will never break tools.
preventToolDestruction = true
#If enabled, vein mining will damage the tool for each block mined.
addToolDamage = true
#The multiplier to tool damage from blocks that are vein mined.
#Range: 0 ~ 1000
toolDamageMultiplier = 1
#If enabled, vein mining will cause player exhaustion for each block mined.
addExhaustion = true
#The multiplier to player exhaustion from blocks that are vein mined.
#Range: 0.0 ~ 1000.0
exhaustionMultiplier = 1.0
#Determines the vein mineable blocks based on a preset option or a configured list.
#Allowed Values: CONFIG_LIST, ALL, ORES, ORES_LOGS, ORES_STONE, ORES_STONE_LOGS, NO_BLOCK_ENTITIES
blocks = "CONFIG_LIST"
#The blocks or block tags for vein mining if blocks is set to "CONFIG_LIST".
blocksList = ["#c:ores", "#forge:ores", "#minecraft:logs"]
#Determines if blocksList contains allowed blocks or denied blocks.
#Allowed Values: ALLOW, DENY
blocksListType = "ALLOW"
#The groups of blocks or block tags that are vein mined together.
groupsList = ["#forge:obsidian", "#forge:ores/coal", "#forge:ores/diamond", "#forge:ores/emerald", "#forge:ores/gold", "#forge:ores/iron", "#forge:ores/lapis", "#forge:ores/redstone", "#forge:ores/quartz", "#forge:ores/netherite_scrap", "#forge:ores/copper", "#forge:ores/tin", "#forge:ores/osmium", "#forge:ores/uranium", "#forge:ores/fluorite", "#forge:ores/lead", "#forge:ores/zinc", "#forge:ores/aluminum", "#forge:ores/nickel", "#forge:ores/silver", "#forge:ores/apatite", "#forge:ores/cinnabar", "#forge:ores/niter", "#forge:ores/ruby", "#forge:ores/sapphire", "#forge:ores/sulfur"]

81
config/vinery.toml Normal file
View File

@ -0,0 +1,81 @@
[Blocks]
#Total fermentation time in ticks
#Range: > 1
totalFermentationTime = 6000
#Maximum fluid level in the Fermentation Barrel
#Range: 10 ~ 1000
maxFluidLevel = 100
#How much Fluid a Grapejuice Bottle fills
#Range: 1 ~ 1000
maxFluidPerJuice = 25
#Apple Press mashing time in ticks
#Range: 1 ~ 1000
applePressMaxMashingProgress = 600
#Apple Press fermenting time in ticks
#Range: 1 ~ 1000
applePressMaxFermentingProgress = 800
#Chance for cherries to grow
#Range: 0.0 ~ 1.0
cherryGrowthChance = 0.4
#Chance for apples to grow
#Range: 0.0 ~ 1.0
appleGrowthChance = 0.4
#Chance for grapes to grow
#Range: 0.0 ~ 1.0
grapeGrowthChance = 0.5
[Items]
[Items.Wine]
#Maximum level for wine
#Range: 1 ~ 10
maxLevel = 5
#Start duration for wine in seconds
#Range: 1 ~ 100000
startDuration = 1800
#Duration per year in seconds
#Range: 1 ~ 10000
durationPerYear = 200
#Days per year
#Range: 1 ~ 100
daysPerYear = 24
#Years per effect level
#Range: 1 ~ 100
yearsPerEffectLevel = 6
#Maximum duration in seconds
#Range: 1 ~ 100000
maxDuration = 15000
[Items.Banner]
#Set to false to disable the banner's effect.
giveEffect = true
#Set to false to hide the banner's tooltip. If giveEffect is false, showTooltip is automatically false.
showTooltip = true
[Items.Basket]
#List of item IDs that are blacklisted from being placed in the picnic basket. Format: 'modid:itemname'
basketBlacklist = ["vinery:basket"]
[Items.WanderingTrader]
#Chance for the custom trader to spawn. Range: 0.0 to 1.0
#Range: 0.0 ~ 1.0
spawnChance = 0.5
#If true, the trader will spawn with mules.
spawnWithMules = true
#Spawn delay for the trader in ticks.
#Range: > 1
spawnDelay = 48000
[Items.VillagerTrades]
#List of trades for Level 1. Format: item|price|quantity|maxUses|isSelling
level1Trades = ["vinery:red_grape|5|4|5|false", "vinery:white_grape|5|4|5|false", "vinery:red_grape_seeds|2|1|1|true", "vinery:white_grape_seeds|2|1|1|true"]
#List of trades for Level 2. Format: item|price|quantity|maxUses|isSelling
level2Trades = ["vinery:wine_bottle|1|2|7|true"]
#List of trades for Level 3. Format: item|price|quantity|maxUses|isSelling
level3Trades = ["vinery:flower_box|3|1|10|true", "vinery:white_grape_bag|7|1|10|true", "vinery:red_grape_bag|7|1|10|true"]
#List of trades for Level 4. Format: item|price|quantity|maxUses|isSelling
level4Trades = ["vinery:basket|4|1|10|true", "vinery:flower_pot_big|5|1|10|true", "vinery:window|12|1|10|true", "vinery:dark_cherry_beam|6|1|10|true", "vinery:taiga_red_grape_seeds|2|1|5|true", "vinery:taiga_white_grape_seeds|2|1|5|true"]
#List of trades for Level 5. Format: item|price|quantity|maxUses|isSelling
level5Trades = ["vinery:wine_box|10|1|10|true", "vinery:lilitu_wine|4|1|10|true", "vinery:calendar|12|1|15|true"]

View File

@ -0,0 +1,5 @@
default_enforced_profile = default
enforced_profile_permission_node = xaero.lib.enforced_server_profile
allow_internet_access = true
everyone_tracks_everyone = false
edit_server_profiles_permission_node = xaero.lib.edit_server_profiles

View File

@ -0,0 +1,5 @@
############
## Server Config Profile "default"
##
profile_name = Default

View File

@ -0,0 +1,3 @@
default_enforced_profile = default
enforced_profile_permission_node = xaero.minimap.enforced_server_profile
register_minimap_status_effects = true

View File

@ -0,0 +1,5 @@
############
## Server Config Profile "default"
##
profile_name = Default

0
crash-reports/.gitkeep Normal file
View File

191
discord_bot.py Normal file
View File

@ -0,0 +1,191 @@
import asyncio
import sys
import discord
from discord import app_commands
from datetime import datetime
from pathlib import Path
from mcstatus import JavaServer
from secrets import TOKEN
BOT_STATUS_CHANNEL = "bot-status"
SCRIPTS_DIR = Path(__file__).parent
class GPackBot(discord.Client):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.tree = app_commands.CommandTree(self)
self._serve_active = False
async def _wait_for_tcp_listen(self, host: str, port: int, timeout_s: float) -> bool:
"""
Returns True when `host:port` accepts TCP connections.
Used to confirm `simple_serve.py` successfully bound before reporting success to Discord.
"""
deadline = asyncio.get_running_loop().time() + timeout_s
last_err: Exception | None = None
while asyncio.get_running_loop().time() < deadline:
try:
reader, writer = await asyncio.open_connection(host=host, port=port)
writer.close()
await writer.wait_closed()
return True
except Exception as e:
last_err = e
await asyncio.sleep(0.2)
# Avoid leaking potentially sensitive details; just return False.
_ = last_err
return False
async def setup_hook(self):
self.tree.command(name="start", description="Start the server")(self.cmd_start)
self.tree.command(name="stop", description="Stop the server")(self.cmd_stop)
self.tree.command(name="status", description="Check server status")(self.cmd_status)
self.tree.command(name="serve", description="Serve ModPack webpage")(self.cmd_serve)
async def on_ready(self):
print(f"GPack Bot {self.user} (ID: {self.user.id}) @{datetime.now().strftime('%I:%M%p')}")
for guild in self.guilds:
self.tree.copy_global_to(guild=guild)
await self.tree.sync(guild=guild)
self.tree.clear_commands(guild=None)
await self.tree.sync()
timestamp = datetime.now().strftime("%H:%M")
channel = discord.utils.get(self.get_all_channels(), name=BOT_STATUS_CHANNEL)
if isinstance(channel, discord.TextChannel):
await channel.send(f"Server in Standby! - {timestamp}")
async def close(self):
timestamp = datetime.now().strftime("%H:%M")
channel = discord.utils.get(self.get_all_channels(), name=BOT_STATUS_CHANNEL)
if isinstance(channel, discord.TextChannel):
await channel.send(f"Server Disabled - {timestamp}")
await super().close()
async def run_script(self, script: str) -> tuple[int, str, str]:
proc = await asyncio.create_subprocess_exec(
SCRIPTS_DIR / script,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
)
stdout, stderr = await proc.communicate()
return proc.returncode or 0, stdout.decode(), stderr.decode()
async def cmd_start(self, interaction: discord.Interaction):
await interaction.response.defer()
proc = await asyncio.create_subprocess_shell(
"ss -tuln | grep 443",
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
)
stdout, _ = await proc.communicate()
status = "Online" if stdout.strip() else "Offline"
if status == "Offline":
code, stdout, stderr = await self.run_script("start.sh")
if code == 0:
await interaction.followup.send("Server started.")
else:
await interaction.followup.send(f"Start failed (exit {code}): {stderr or stdout}")
else:
await interaction.followup.send("Barryslab is running, can't turn on rn")
async def cmd_stop(self, interaction: discord.Interaction):
await interaction.response.defer()
code, stdout, stderr = await self.run_script("stop.sh")
if code == 0:
await interaction.followup.send("Server stopped.")
else:
await interaction.followup.send(f"Stop failed (exit {code}): {stderr or stdout}")
async def cmd_status(self, interaction: discord.Interaction):
proc = await asyncio.create_subprocess_shell(
"ss -tuln | grep 25565",
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
)
stdout, _ = await proc.communicate()
status = "Online" if stdout.strip() else "Offline"
if status == "Offline":
await interaction.response.send_message(f"Server is {status}.")
else:
server = JavaServer.lookup("barrys.cloud")
status = server.status()
await interaction.response.send_message(f"Server has {status.players.online} player(s) online and replied in {status.latency} ms")
async def cmd_serve(self, interaction: discord.Interaction):
if self._serve_active:
await interaction.response.send_message("Serve is already running.", ephemeral=True)
return
await interaction.response.defer()
self._serve_active = True
proc = None
try:
proc = await asyncio.create_subprocess_exec(
sys.executable,
str(SCRIPTS_DIR / "simple_serve.py"),
str(SCRIPTS_DIR),
stdout=asyncio.subprocess.DEVNULL,
stderr=asyncio.subprocess.PIPE,
)
# Confirm the HTTP server actually bound successfully on port 80.
# If binding fails (e.g. permissions), the process will exit and no port will listen.
bound = await self._wait_for_tcp_listen("127.0.0.1", 80, timeout_s=5)
if not bound:
# Stop the child process and return the stderr so we can see the real reason.
try:
proc.terminate()
await asyncio.wait_for(proc.wait(), timeout=5)
except Exception:
try:
proc.kill()
await proc.wait()
except Exception:
pass
_, stderr = await proc.communicate()
err_text = (stderr.decode(errors="replace").strip() if stderr else "").splitlines()
err_text = err_text[0] if err_text else "unknown error"
await interaction.followup.send(
f"Serve failed to start (port 80 not listening): {err_text}",
ephemeral=True,
)
return
await interaction.followup.send(
"HTTP server started for 4 minutes. Go to http://barrys.cloud to download the modpack."
)
await asyncio.sleep(240)
if proc.returncode is None:
proc.terminate()
try:
await asyncio.wait_for(proc.wait(), timeout=15)
except asyncio.TimeoutError:
proc.kill()
await proc.wait()
await interaction.followup.send("Serve window ended.")
except Exception as e:
await interaction.followup.send(f"Serve failed: {e}")
finally:
self._serve_active = False
if proc is not None and proc.returncode is None:
proc.terminate()
try:
await asyncio.wait_for(proc.wait(), timeout=15)
except asyncio.TimeoutError:
proc.kill()
await proc.wait()
def main():
print("Hello from gpackbot!")
bot = GPackBot(intents=discord.Intents.default())
bot.run(TOKEN)
if __name__ == "__main__":
main()

3
eula.txt Normal file
View File

@ -0,0 +1,3 @@
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://aka.ms/MinecraftEULA).
#Sun Mar 08 14:27:36 CET 2026
eula=true

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,3 @@
Input: 9afed7fc4927dd453c68f77c98176a9473ae6942
Srg: 67dc0f086ea40e91fd4ae15124fa888e6803844f
Output: 13522e3278befd103064d91a199451df4cd2633f

View File

@ -0,0 +1,3 @@
Input: 9afed7fc4927dd453c68f77c98176a9473ae6942
Srg: 67dc0f086ea40e91fd4ae15124fa888e6803844f
Output: 9e06bdd77ca6d95b2cced0bf372245f753eeb16a

Some files were not shown because too many files have changed in this diff Show More